小编Tho*_*ler的帖子

如何使用在设计时接受其他控件的子面板创建自定义控件?

我编写了一个自定义控件,它有几个子面板.我希望这些子面板能够接受在设计时丢弃的任何其他控件.

不幸的是,在设计时掉落的任何控件都会在我的自定义控件上出现,而不是在面板上.这特别显示我是否尝试删除标签:标签的蓝点显示,但标题不是,如果我取消选择标签,则根本不再可见.

简化代码(只有一个子面板):

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.)

[编辑]

我现在已经解决了不同的问题.该组件不再包含面板,但指的是外部面板.这使它实际上更加灵活,但在不利方面,它不再直观易用.

我仍然想知道如何完成我原先描述的内容.是不是有一个开源组件可以做到这一点,所以我可以研究源代码?

delphi custom-component

6
推荐指数
1
解决办法
4377
查看次数

为Canvas.LineTo设置lineend样式

有没有办法为TCanvas.LineTo方法设置lineends的样式?它似乎默认为圆形末端,当Pen.Width设置为较大的值(例如9)时,对于不同颜色的行中的几行看起来非常糟糕.

它看起来像这样(圆形末端):

 ********........******
**********........******
**********........******
 ********........******
Run Code Online (Sandbox Code Playgroud)

(其中*是例如蓝色,而.是黄色)

如果在中线之后绘制两条外线,情况会更糟:

 ********........******
**********......********
**********......********
 ********........******
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样(streight结束):

 ********........******
 ********........******
 ********........******
 ********........******
Run Code Online (Sandbox Code Playgroud)

Pen似乎没有为此提供任何设置,LineTo方法也没有.可能有我可以调用的Windows API函数吗?

delphi winapi gdi tcanvas

5
推荐指数
1
解决办法
1259
查看次数

从TObjectList中提取对象

我有一个带OwnsObjects = true的TObjectList.它包含很多对象.现在我想从该列表中删除索引Idx处的对象,而不释放它.

Extract方法是唯一的选择吗?

ExtractedObject := TheList.Extract(TheList[Idx]);

所有其他方法似乎都释放了对象.我正在寻找一些更高效的东西,每次都不进行线性搜索,因为我已经知道了对象的索引.像超载的东西......

ExtractedObject := TheList.Extract(Idx);

......不存在.

delphi tobjectlist tlist

2
推荐指数
1
解决办法
5279
查看次数

标签 统计

delphi ×3

custom-component ×1

gdi ×1

tcanvas ×1

tlist ×1

tobjectlist ×1

winapi ×1