Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Im Thread TTreeView zur Laufzeit erzeugen (https://www.delphipraxis.net/146652-im-thread-ttreeview-zur-laufzeit-erzeugen.html)

schwa226 24. Jan 2010 14:37


Im Thread TTreeView zur Laufzeit erzeugen
 
Hallo,

ich möchte in einem Thread einen TreeView erzeugen.

Wenn der Thread startet erzeuge ich hiermit den TreeView:
Delphi-Quellcode:
  My_TreeView := TTreeView.Create(nil);
Wenn ich nun aber ein Item hinzufügen will kommt diese Meldung das My_TreeView kein übergeordnetes Fenster besitzt.
Wird ja auch mit NIL erzeugt. In einer Form würde es warscheinlich so aussehen:
Delphi-Quellcode:
  My_TreeView := TTreeView.Create(self);
Wie kann ich das aber im Thread machen?

Luckie 24. Jan 2010 14:52

Re: Im Thread TTreeView zur Laufzeit erzeugen
 
Warum willst du eine grafische Komponente in einem Thread erzeugen der kein Fenster hat? Du wirst den Treeview ja nie sehen.

schwa226 24. Jan 2010 17:01

Re: Im Thread TTreeView zur Laufzeit erzeugen
 
Ich brauche den TreeView zur virtuellen Darstellung. Der Treeview wird dann per Stream an Clients geschickt.

Nach etwas Suchen bin ich auch darauf gestoßen:
Delphi-Quellcode:
 My_TreeView := TTreeView.CreateParented(THandle(-3));
Dann geht's!

Astat 24. Jan 2010 17:25

Re: Im Thread TTreeView zur Laufzeit erzeugen
 
Zitat:

Zitat von schwa226
Ich brauche den TreeView zur virtuellen Darstellung. Der Treeview wird dann per Stream an Clients geschickt.

Nach etwas Suchen bin ich auch darauf gestoßen:
Delphi-Quellcode:
 

My_TreeView := TTreeView.CreateParented(THandle(-3));

Hallo schwa226, dass THandle(-3) geht ist reine Glücksache, da gibt es zufällig irgendwo ein Fenster mit DWORD - 1.
Auch ist das Vorhaben mit einem Thread und einem Visuellen Control keinesfalls zu empfehlen.

Du solltest folgendes versuchen.
1. Erstelle das Control im Mainthread
2. Befülle das Teil mit Daten
3. Streame die Daten in einen Threadsaven Buffer
4. Erst jetzt greifst Du mit dem Thread auf den Buffer zu, und arbeitest mit dem Stream weiter.


lg. Astat

jbg 24. Jan 2010 17:36

Re: Im Thread TTreeView zur Laufzeit erzeugen
 
Zitat:

Zitat von Astat
Du solltest folgendes versuchen.

Besser wäre wohl eine eigene Baumstruktur. Die wäre nicht nur schneller in der Verarbeitung als eine visuelle Komponente, sondern man kann sie auch in einem Thread befüllen.

Delphi-Quellcode:
type
  TNode = class(TObject)
  public
    // besser über Properties, aber ich bin gerade Schreibfaul
    FirstChild: TNode;
    NextSibling: TNode;

    MeineDaten: Integer;
    // ...

    procedure SaveToStream(Stream: TStream);
    procedure LoadFromStream(Stream: TStream);
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 Uhr.

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