如何在自定义的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; 

您可能还需要尽快你有设置FLinesOnChange财产(这样做在你的自定义控件的构造,创建它)。将其设置为与您的组件的任何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; 
+0

我已经这样做。请参阅调用SetText的过程tControlPanelItem.SetLinesText。 (程序SetText不完整,我只是使用showmessage来查看它是否工作) – 2010-10-29 09:33:51

+0

好的,我没有看到。 (正如你所知,代码在几分钟前还不算漂亮!)但是我看不到任何'OnChange'? – 2010-10-29 09:35:39

+0

嗨。感谢你的快速回复。据我所知,FLinesText是一个字符串列表,并且没有onchange属性? – 2010-10-29 09:39:05