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 Wie benutzt man TJclStrQueue (https://www.delphipraxis.net/129110-wie-benutzt-man-tjclstrqueue.html)

WoGe 12. Feb 2009 20:52


Wie benutzt man TJclStrQueue
 
In den JCJs gibt es die TJclStrQueue . Das scheint eine FiFo Liste zu sein - etwas was ich gerade brauche.

Die Deklaration sieht so aus:
Delphi-Quellcode:
  TJclStrQueue = class(TJclAbstractContainer, IJclStrQueue)
  private
    FCapacity: Integer;
    FElements: TDynStringArray;
    FHead: Integer;
    FTail: Integer;
  protected
    { IJclStrQueue }
    function Contains(const AString: string): Boolean;
    function Dequeue: string;
    function Empty: Boolean;
    procedure Enqueue(const AString: string);
    function Size: Integer;
  public
    constructor Create(ACapacity: Integer = DefaultContainerCapacity);
  end;
gibt es eine einfache Möglichkeit dieses zu benutzen ohne gleich eine neue Klasse zu erzeugen?

Grüsse wo

HalloDu 12. Feb 2009 22:12

Re: Wie benutzt man TJclStrQueue
 
Hallo WoGe,

das erstellen einer Instanz ist nötig, aber sicher nicht das anlegen einer neuen Klasse.

MfG Frederic

WoGe 12. Feb 2009 22:36

Re: Wie benutzt man TJclStrQueue
 
Hi Frederic

Zitat:

das erstellen einer Instanz ist nötig, aber sicher nicht das anlegen einer neuen Klasse.
In einer Instanz davon stehen die als protected deklarierten Methoden leider nicht zur Verfügung.
(Weil Außerhalb der deklarierenden Unit)
Der einzige mir bekannte Weg wäre eine neue Klasse die diese Deklarationen in den Public Teil verlagern.

Viele Grüße
wo

Dax 12. Feb 2009 23:22

Re: Wie benutzt man TJclStrQueue
 
Nur so als Tip: die Interfaces sind nicht nur da, weil sie gut aussehen :angel2:

WoGe 13. Feb 2009 09:15

Re: Wie benutzt man TJclStrQueue
 
Zitat:

Zitat von Dax
Nur so als Tip: die Interfaces sind nicht nur da, weil sie gut aussehen :angel2:

Vielen Dank für den Hinweis. Ich habs halt nicht so mit den Interfaces, mir gings ähnlich wie hier

Meine Lösung sieht nun so aus:

Delphi-Quellcode:
  ...
  public
    { Public-Deklarationen }
    myQueue : IJclStrQueue;
  end;
  ...

procedure TForm7.Button1Click(Sender: TObject);
begin
  myQueue := TJclStrQueue.create; // Default Size = 16
//  myQueue := TJclStrQueue.create(16);
end;

procedure TForm7.Button2Click(Sender: TObject);
begin
  myQueue.Enqueue('TestNo1');
  myQueue.Enqueue('TestNo2');
  myQueue.Enqueue('TestNo3');
end;

procedure TForm7.Button3Click(Sender: TObject);
begin
  if not myQueue.Empty then memo1.Lines.Add(myQueue.Dequeue);
end;

procedure TForm7.Button4Click(Sender: TObject);
begin
//  FreeAndNil(myQueue); // Unnötig da Interface ?
end;
...
Das funktioniert - so wie ich das erwartet hatte.
Vielen Dank nochmal

Gruß
wo


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 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