2010-10-29 12 views
6

İlk özel Delphi bileşenimi oluşturuyorum. Temelde, üzerinde görüntülenen başlık ve satır metni olan özel bir Tpanel.Özel bir delphi bileşeninde bir dizi listesi özniteliğine nasıl katılır?

Bir dize listesi kullanarak çok satırlı metin ekleyebilmek istiyorum.

bileşeni Ben satırları eklerken metin satırları panelde görüntülemek için alamayan test ederken: NewLinesText.add ('satırı1 metin') Ancak ben oluştururken

çalışır ve zamanında yeni StringList doldurmak böyle satırları eklemek mümkün istiyorum controlPanelitem.NewLinesText = MyNewStringlist

: ve sonra benim kontrolüm atamak NewLinesText.add ('satırı1 metin')

Ben WinXP'de Delphi 7 uzmanına kullanıyorum. Aşağıdaki kodlara bakın.

Herhangi bir yardım için teşekkür ederiz!

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.

cevap

8

Sen de en kısa sürede sahip olarak FLines ait OnChange özelliği (değerindeki özel denetim yapıcısı bunu ayarlamak gerekebilir

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

yapmalıyım oluşturdu). Bileşeninizin herhangi bir TNofifyEvent uyumlu (özel veya korumalı, sanırım) prosedürüne ayarlayın. Bu prosedürde, ihtiyacınız olan yeniden boyama, güncelleme vb. olduğu

, ben zaten o yapıyorum

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

yok. SetText'i çağıran tControlPanelItem.SetLinesText yordamına bakın. (SetText prosedürü tamamlanmadı. Sadece çalışıp çalışmadığını görmek için showmessage kullanıyorum) –

+0

Tamam, bunu görmedim. (Bildiğiniz gibi, kod birkaç dakika önce güzel değildi!) Ama herhangi bir OnChange göremiyorum? –

+0

Merhaba. Hızlı yanıtınız için teşekkür ederim. FLinesText bir dize listesi ve bildiğim kadarıyla bir onchange özelliğine sahip değil mi? –