2010-10-29 37 views
6

Tôi đang tạo thành phần Delphi tùy chỉnh đầu tiên của mình. Về cơ bản một tùy chỉnh của nó Tpanel với tiêu đề và dòng văn bản hiển thị trên đó.Làm thế nào để impliment một tài sản stringlist trong một thành phần delphi tùy chỉnh?

Tôi muốn có thể thêm nhiều dòng văn bản bằng cách sử dụng danh sách chuỗi.

Khi kiểm tra các thành phần Tôi không thể có được các dòng văn bản hiển thị trên bảng điều khiển khi thêm dòng: NewLinesText.add ('text line1')

Nó tuy nhiên hoạt động khi tôi tạo ra và cư một stringlist mới trong thời gian chạy và sau đó gán nó để kiểm soát của tôi: controlPanelitem.NewLinesText = MyNewStringlist

tôi muốn để có thể thêm dòng như thế này: NewLinesText.add ('line1 text')

tôi đang sử dụng Delphi 7 chuyên nghiệp trên WinXP. Xem mã bên dưới.

Mọi trợ giúp sẽ được đánh giá cao!

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.

Trả lời

8

Bạn nên làm

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

Bạn cũng có thể cần phải đặt OnChange tài sản của FLines (làm điều này trong constructor của điều khiển tùy chỉnh của bạn, càng sớm càng tốt có tạo ra nó). Đặt nó vào bất kỳ thủ tục tương thích TNofifyEvent (riêng tư hoặc được bảo vệ, tôi đoán) của thành phần của bạn. Trong quy trình này, bạn có thể thực hiện việc vẽ lại, cập nhật, v.v. bạn cần.

Đó là, làm

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

Tôi đã làm điều đó. Xem thủ tục tControlPanelItem.SetLinesText gọi SetText. (thủ tục SetText chưa hoàn thành. Im chỉ sử dụng showmessage để xem nó có hoạt động không) –

+0

OK, tôi không thấy điều đó. (Như bạn đã biết, đoạn mã này không phải là một vài phút trước!) Nhưng tôi không thể nhìn thấy bất kỳ 'OnChange'? –

+0

Xin chào. Cám ơn bạn đã phản ứng nhanh chóng của bạn. FLinesText là một danh sách chuỗi và không có thuộc tính onchange theo như tôi biết? –

Các vấn đề liên quan