Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TCollection - objekte anzeigen (https://www.delphipraxis.net/108269-tcollection-objekte-anzeigen.html)

Andreas L. 10. Feb 2008 14:45


TCollection - objekte anzeigen
 
Hi,

ich hab mir folgende TEST-Kompo geschrieben.

Delphi-Quellcode:
unit ScrollBox1;

interface

uses
  SysUtils, Classes, Controls, Forms, Stdctrls;

type
  TItem = class(TCollectionItem)
  private
    fCaption: TCaption;
  published
    property Caption: TCaption read fCaption write fCaption;
  end;

type
  TScrollBoxtest = class(TScrollBox)
  private
    fItems: TCollection;
  protected
  procedure setitems(value: Tcollection);
  public
   procedure Refresh;
  published
    constructor Create(Aowner: tComponent); override;
    destructor Destroy; override;
    property items: tcollection read fitems write setitems;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TScrollBoxtest]);
end;

constructor tScrollboxtest.Create(Aowner: TComponent);
begin

 inherited Create(Aowner);

 fitems := TCollection.Create(titem);

end;

destructor tscrollboxtest.Destroy;
begin

 fItems.Free;

 inherited destroy;

end;

procedure tscrollboxtest.Refresh;
var
 i: Integer;
 lbl: TLabel;
begin

 for i := ComponentCount -1 downto 0 do
  Components[i].Free;

 for i := 0 to fItems.Count -1 do
  begin

   lbl := TLabel.Create(Self);
   lbl.Align := altop;
   lbl.Caption := (fitems.items[i] as titem).Caption;
   lbl.Refresh;
   lbl.Parent := self;
   lbl.Visible := true;

  end;

end;

procedure tscrollboxtest.setitems(value: TCollection);
begin

 fitems.Assign(value);

 refresh;

end;

end.
Wenn ich jetzt während der Runtime refresh aufrufe werden alle Labels angezeigt. Was muss ich tun damit diese bereits bei der DesignTime zu sehen sind?

Andreas L. 10. Feb 2008 15:25

Re: TCollection - objekte anzeigen
 
Ich habe jetzt einen weitere Typen definiert und die prozedur Notify überschrieben:

Delphi-Quellcode:
type
  Titemcollection = class(tcollection)
  protected
    procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;
  end;

...
...
procedure titemcollection.Notify(Item: TCollectionItem; Action: TCollectionNotification);
begin

 inherited Notify(item, action);

 (owner as Tscrollboxtest).Refresh;

end;
Doch die Labels werden nicht angezeigt. Und ich weiß auch warum so wohl der Setter meiner Basisklasse sowie das Notify-Ereignis werden nie aufgerufen. Warum?

Andreas L. 10. Feb 2008 19:48

Re: TCollection - objekte anzeigen
 
Jetzt in jeder Add, Delete, etc. Routine Refresh aufrufen finde ich irgendwie umständlich. Laut Delphi-hilfe muss ich nur EndUpdate überschreiben. Aber diese Routine wird nie aufgerufen und ich weiß nicht warum. Bin am verzweifeln...

marabu 10. Feb 2008 20:22

Re: TCollection - objekte anzeigen
 
Hallo Andreas,

kannst du erklären, warum du die Komponente TScrollBox um FItems erweitern willst?

Freundliche Grüße

Andreas L. 10. Feb 2008 21:27

Re: TCollection - objekte anzeigen
 
Zitat:

Zitat von marabu
Hallo Andreas,

kannst du erklären, warum du die Komponente TScrollBox um FItems erweitern willst?

Freundliche Grüße

Ich möchte damit eine ListBox ähnliche Komponente bauen. In fItems sollen die Items, welche über den OI hinzugefügt werden können, gespeichert werden.

Andreas L. 11. Feb 2008 17:24

Re: TCollection - objekte anzeigen
 
Weiß denn keiner wie ich das Problem behebe?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz