2010-10-29 16 views
6

Tworzę swój pierwszy niestandardowy komponent Delphi. Jest to w zasadzie niestandardowy Tpanel z wyświetlonym na nim tekstem nagłówka i wiersza.Jak imponować właściwość stringlist w niestandardowym komponencie delphi?

Chcę móc dodawać wiele wierszy tekstu przy użyciu listy napisów.

Testując komponent nie mogę uzyskać linie tekstu do wyświetlenia na panelu podczas dodawania linie: NewLinesText.add („tekst”) line1

Uważa jednak pracować przy tworzeniu i wypełnić nową stringlist w czasie wykonywania a następnie przypisać go do mojego kontroli: controlPanelitem.NewLinesText = MyNewStringlist

Chcę, aby móc dodać linie tak: NewLinesText.add („tekst line1”)

używam Delphi 7 Professional na WinXP. Zobacz kod poniżej.

Każda pomoc zostanie doceniona!

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.

Odpowiedz

8

Należy zrobić

procedure SetLines(Lines: TStrings); 
begin 
    FLinesText.Assign(Lines); 
    // Repaint, update or whatever you need to do. 
end; 

Być może trzeba ustawić właściwość OnChange z FLines (zrób to w konstruktorze kontrolą niestandardowego, jak tylko masz stworzyłem to). Ustaw go na dowolną procedurę zgodną z TNofifyEvent (prywatna lub chroniona, chyba) w twoim komponencie. W tej procedurze można wykonać odświeżanie, aktualizowanie itp., Których potrzebujesz.

Oznacza to, że zrobić

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

mam już robić. Zobacz procedurę tControlPanelItem.SetLinesText, która wywołuje SetText. (procedura SetText nie jest kompletna, ja tylko używam showmessage, aby sprawdzić, czy działa) –

+0

OK, nie widziałem tego. (Jak wiecie, kod nie był ładny kilka minut temu!) Ale nie widzę żadnego "OnChange"? –

+0

Hi. Dziękuję za szybką odpowiedź. FLinesText jest listą łańcuchów i nie ma właściwości onchange, o ile wiem? –

Powiązane problemy