Dacht het enigszins te begrijpen hoe het in elkaar zit, maar krijg het nog niet voor elkaar.
Ik wil een treeview opbouwen als een form opstart. Nu doe ik dat ook, maar het scherm wordt pas getoond als alles klaar is. Maar ik wil snelheid. Het scherm opstarten terwijl de treeview wordt opgebouwd. Het is geen grote treeview met veel nodes, maar toch.....
Ik dacht het zo voor elkaar te krijgen. Echter blijkt dat toch niet zo makkelijk. Zodra een item in een treeview wordt aangemaakt, komt het systeem met de melding 'has no parent window'. Er wordt dus getracht naar de canvas te schrijven, wacht niet in de achtergrond kan.
Maar hoe bouw je dan een treeview op in een aparte thread?
Delphi Code:
procedure tdeelnemers.TreeBuildBG(aTreeview : TTreeview);
begin
TThread.CreateAnonymousThread(
procedure
var SoortItems : TStringlist;
AlfaNode : TTreenode;
SoortNode : TTreenode;
Node : TTreenode;
Letter : char;
soort : string;
TV : TTReeview;
begin
SoortItems := TStringlist.Create;
TV := TTReeview.Create(nil);
try
SoortItems.Sorted := true;
while not fPokemonlijst.Eof do
begin
SoortItems.Add(fPokemonlijst.FieldByName('soort').AsString);
fPokemonlijst.Next;
end;
AlfaNode := TV.Items.AddChild(nil, 'alfabet');
AlfaNode.Data := pointer(0);
SoortNode := TV.Items.AddChild(nil, 'op soort');
SoortNode.Data := pointer(0);
for Letter in ['A'..'Z'] do
begin
Node := TV.Items.AddChild(Alfanode,'Letter : ' + Letter);
Node.Data := pointer(1)
end;
for soort in SoortItems do
begin
Node := TV.Items.AddChild(SoortNode,soort);
Node.Data := pointer(2)
end;
TThread.Synchronize(TThread.Current, // Geen 'self' beschikbaar
procedure
begin
aTreeview := TV;
end);
finally
SoortItems.Free;
end;
end
).Start;
end;
Bookmarks