如何在自定义的delphi组件中实现stringlist属性?
问题描述:
我正在创建我的第一个自定义的Delphi组件。它基本上是一个自定义Tpanel,其上显示标题和行文字。如何在自定义的delphi组件中实现stringlist属性?
我希望能够使用字符串列表添加多行文本。
当测试组件,我不能得到文本行添加行时在面板上显示:NewLinesText.add(“一号线文”)
但它确实在工作的时候创建并填充在运行一个新的StringList然后将其分配给我的控制:controlPanelitem.NewLinesText = MyNewStringlist
我希望能够增加线路是这样的:NewLinesText.add(“一号线文”)
我使用在WinXP德尔福7个专业。见下面的代码。
任何帮助,将不胜感激!
unit ControlPanelItem;
interface
uses
SysUtils, Classes, Controls, ExtCtrls, Graphics, AdvPanel, StdCtrls,
Windows,Forms,Dialogs;
type
tControlPanelItem = class(TAdvPanel)
private
fLinesText : TStrings;
procedure SetLinesText(const Value: TStrings);
procedure SetText;
protected
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
published
property NewLinesText : TStrings read FLinesText write SetLinesText;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [tControlPanelItem]);
end;
constructor tControlPanelItem.Create(AOwner: TComponent);
begin
inherited;
fLinesText := TStringList.Create;
end;
destructor tControlPanelItem.Destroy;
begin
fLinesText.Free;
inherited;
end;
procedure tControlPanelItem.SetLinesText(const Value: TStrings);
begin
fLinesText.Assign(value);
SetText;
end;
procedure tControlPanelItem.SetText;
var
count : Integer;
begin
for count := 0 to fLinesText.Count - 1 do
ShowMessage(fLinesText.strings[count]);
end;
end.
答
你应该做
procedure SetLines(Lines: TStrings);
begin
FLinesText.Assign(Lines);
// Repaint, update or whatever you need to do.
end;
您可能还需要尽快你有设置FLines
的OnChange
财产(这样做在你的自定义控件的构造,创建它)。将其设置为与您的组件的任何TNofifyEvent
兼容(私有或受保护,我猜)程序。在此过程中,您可以进行重新绘制,更新等。
也就是说,做
constructor TControlPanelItem.Create(AOwner: TComponent);
begin
inherited;
FLinesText := TStringList.Create;
TStringList(FLinesText).OnChange := LinesChanged;
end;
procedure TControlPanelItem.LinesChanged(Sender: TObject);
begin
// Repaint, update or whatever you need to do.
end;
我已经这样做。请参阅调用SetText的过程tControlPanelItem.SetLinesText。 (程序SetText不完整,我只是使用showmessage来查看它是否工作) – 2010-10-29 09:33:51
好的,我没有看到。 (正如你所知,代码在几分钟前还不算漂亮!)但是我看不到任何'OnChange'? – 2010-10-29 09:35:39
嗨。感谢你的快速回复。据我所知,FLinesText是一个字符串列表,并且没有onchange属性? – 2010-10-29 09:39:05