我编写了一个自定义控件,它有几个子面板.我希望这些子面板能够接受在设计时丢弃的任何其他控件.
不幸的是,在设计时掉落的任何控件都会在我的自定义控件上出现,而不是在面板上.这特别显示我是否尝试删除标签:标签的蓝点显示,但标题不是,如果我取消选择标签,则根本不再可见.
简化代码(只有一个子面板):
type
TMyContainer = class(TPanel)
p_SubPanel: TPanel;
public
constructor Create(_Owner: TComponent); override;
end;
constructor TMyContainer.Create(_Owner: TComponent);
begin
inherited;
p_SubPanel := TPanel.Create(Self);
p_SubPanel.Parent := Self;
p_SubPanel.Align := alClient;
end;
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
(以防万一重要:我使用的是Delphi 2007.)
[编辑]
我现在已经解决了不同的问题.该组件不再包含面板,但指的是外部面板.这使它实际上更加灵活,但在不利方面,它不再直观易用.
我仍然想知道如何完成我原先描述的内容.是不是有一个开源组件可以做到这一点,所以我可以研究源代码?
例如,火花面板部件可以这样写
<Panel title="Skinny">
<child components ... />
<controlBarGroup>
<child control bar components ... />
</controlBarGroup>
</Panel>
Run Code Online (Sandbox Code Playgroud)
它的外观文件将处理contentGroup,controlBarGroup和titleDisplay的布局.请注意,但是contentGroup没有出现在上面的代码中,并且controlBarGroup接受子mxml组件.
现在说我想创建一个定义各种必需和非必需skinpart的自定义组件,例如'headerGroup','navigationGroup'和'accountPreferencesGroup'.我想像这样编写这个自定义组件
<MyComp>
<headerGroup>
<child components .../>
</headerGroup>
<navigationGroup>
<child components .../>
</navigationGroup>
<accountPreferencesGroup>
<child components .../>
</accountPreferencesGroup>
</MyComp>
Run Code Online (Sandbox Code Playgroud)
这里的动机是我现在可以创建几个不同的皮肤文件来改变这些子组的外观和布局.读取spark面板的源代码,mx_internal命名空间中有一些调用,例如getMXMLContent(),它是spark组件的一个方法,但是我无法访问它.
上面的描述是否有意义?如何在我的自定义Flex4组件中创建可以使用嵌套的mxml子组件的自定义"contentGroups"?我应该采用不同的方式吗?
我目前正在尝试禁用selectable/editable /或将textInput更改为dynamic以获得我想要的结果.
我有一个带有下拉菜单和文本输入区域的自定义数据网格.但是,如果我的Model#列中没有数据,我不希望允许相应的PurchasePrice单元格中的任何条目.
col1 = new DataGridColumn("Model");
col1.headerText = "Model #";
c2.consumables_dg.addColumn(col1);
col1.width = 60;
col1.editable = false;
col1.sortable = false;
col1.cellRenderer = AlternatingRowColors_editNum_PurchasePrice;
col1 = new DataGridColumn("PurchasePrice");
col1.headerText = "Purchase Price";
c2.consumables_dg.addColumn(col1);
col1.width = 60;
col1.editable = false;
col1.sortable = false;
col1.cellRenderer = AlternatingRowColors_editNum_PurchasePrice;
Run Code Online (Sandbox Code Playgroud)
我已经尝试了AlternatingRowColors_editNum_PurchasePrice中的各种项目,但似乎没有任何工作.请看看我在if的其他声明中尝试了什么(__ enbaled)
package{
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import fl.controls.TextInput;
import flash.text.TextFieldType;
import flash.events.Event;
import fl.controls.listClasses.ListData;
import fl.controls.listClasses.ICellRenderer;
public class AlternatingRowColors_editNum_PurchasePrice extends TextInput implements ICellRenderer
{
protected var _data:Object;
protected var _listData:ListData;
protected var _selected:Boolean;
private …Run Code Online (Sandbox Code Playgroud) 请记住,我已经阅读了有关向自定义组件添加组件图标的所有说明.当我们谈论24x24像素的图标大小时,我能够做到这一点.在表单上删除组件时,我会看到图标.但是我看不到浏览工具调色板时应显示的小16x16图标.
我已经读过,我应该将我的另外两个BMP文件命名为DCR文件,如下所示:
MyComponentName16 [适用于16x16 BMP文件]
MyComponentName32 [适用于32x32 BMP文件]
不幸的是,这似乎不起作用,我试图重新启动Delphi几次,希望它可能是不刷新的东西,但没有任何成功.
有任何想法吗?
我有以下自定义按钮视图.
public class PrayerTimeLabel extends Button {
int hours;
int minutes;
String dayHalf; //am or pm
Context parentActivity;
PrayerControl parentControl;
public PrayerTimeLabel(Context context,PrayerControl parent) {
super(context);
init(context,parent,0);
}
public PrayerTimeLabel(Context context, int defStyle, PrayerControl parent) {
//super(context, null, R.style.Button_PrayerTimeButton);
super(context, null, defStyle);
init(context,parent,defStyle);
}
private void init(final Context context, PrayerControl parent, int defStyle)
{
parentActivity = context;
parentControl = parent;
Typeface tf = Typeface.createFromAsset(context.getAssets(),"fonts/digital.ttf");
this.setTypeface(tf);
this.setText(false);
this.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TimeDialog dialogBox = parentControl.getDialogBox();
dialogBox.setTime(hours, minutes, …Run Code Online (Sandbox Code Playgroud) 我根据许多教程中的一个创建了我的自定义JSF组件(我使用的是PrimeFaces),我添加了一个成功传递给组件的参数.
<c:custom command="command"/>
Run Code Online (Sandbox Code Playgroud)
public void setCommand(String command) {
log.debug("setCommand {}", command);
this.command = command;
}
Run Code Online (Sandbox Code Playgroud)
但我需要自定义类型的参数,这是我在教程中找不到的,它只处理最琐碎的情况.
<c:custom image="#{currentImageBean.image}"/>
Run Code Online (Sandbox Code Playgroud)
public void setImage(Object image) {
log.debug("setImage {}", image);
this.image = (Image) image;
}
Run Code Online (Sandbox Code Playgroud)
bean返回Image类型的对象,但不调用setter.我希望这会有效,因为否则一个好的教程应该提到这种情况,但现在我遇到了更糟糕的错误:没有任何反应,日志中没有任何内容暗示为什么......那么,出了什么问题,我需要改变什么,在哪里寻找潜在的错误?
我想通过属性将我在变量上的数据传递给Polymer组件.
这是代码:
<script>
var item1 = {
title: "Title 1",
status: "accepted"
};
</script>
<bm-card item="{{item1}}" otherAttribute="hello">
Run Code Online (Sandbox Code Playgroud)
该otherAttribute获取自定义元素上的数据,但项目不到货.
如何从item1变量填充item属性?
在我的Android项目中,我有几个使用自定义属性的自定义组件。
attrs.xml文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources >
<declare-styleable name = "TextBox">
<attr name = "font" format = "string"/>
</declare-styleable>
<declare-styleable name = "ButtonBox">
<attr name = "font" format = "string"/>
</declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)
我在自定义组件中输入的属性很好,但是当我运行代码时,看到以下错误。
错误:多次发现Attr / font项目
错误:任务':app:mergeDebugResources'执行失败。
在两个不同的可声明样式的资源中有相似的属性名称,对吗?
如果您有任何帮助,将不胜感激,谢谢!
我想在Swing中实现具有自定义行为的工具提示:用户在组件上悬停的时间越长,工具提示中应显示的细节越多(即,在用户悬停几秒钟后添加一些新行)在组件上).我只需要检查这是否真的可以使用Swing而不会让事情变得太乱.我此刻的想法可能是:
这样的事情是否可行或者这不是与Swing合作的好方法(对不起,我对它很新)?有没有更好的方法呢?
[编辑]嗯,刚才记得ToolTipManager是一个单例,其构造函数只有包可见性,因此无法扩展.
[编辑2]我正在尝试一些解决方案.我忘记添加的一件事是我确实需要知道哪个组件正在盘旋 - 我想这意味着我需要使用mouseEntered()方法处理某种类型的侦听器(或者能够访问它信息).并且不需要与弹出/工具提示的其他交互 - 它只需要显示信息.
我已经实现了以下组件.它的工作和行为符合预期.然而,由于实施ControlValueAccessor对我来说是新的,我不得不关注博客而不了解几个部分的更深层细节.所以这是一种" 它有效,但为什么?! "的情况.
@Component({ selector: ..., templateUrl: ..., styleUrls: ...,
providers: [{ provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => InputTextComponent),
multi: true }]
})
export class InputComponent implements ControlValueAccessor {
constructor() { }
@Input() info: string;
onChange: any = () => { }
onTouch: any = () => { }
writeValue(input: any): void {
this.info.value = input;
// this.onChange(input);
// this.onTouch();
}
registerOnChange(_: any): void { this.onChange = _; }
registerOnTouched(_: any): void { this.onTouch = _; } …Run Code Online (Sandbox Code Playgroud) custom-component ×10
android ×2
delphi ×2
java ×2
angular ×1
apache-flex ×1
attr ×1
attributes ×1
cellrenderer ×1
datagrid ×1
delphi-2009 ×1
flex-skins ×1
flex4 ×1
icons ×1
javascript ×1
jsf ×1
jsf-2 ×1
polymer ×1
styles ×1
swing ×1
tooltip ×1
typescript ×1