AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

VirtualStringTree in Thread

Ein Thema von Zodi · begonnen am 28. Jun 2020 · letzter Beitrag vom 2. Jul 2020
 
Benutzerbild von Zodi
Zodi

Registriert seit: 19. Jul 2017
Ort: Berlin
47 Beiträge
 
Delphi XE7 Ultimate
 
#1

VirtualStringTree in Thread

  Alt 28. Jun 2020, 21:20
Hi Delphianer.

Ich habe folgendes Problem. Ich versuche meine VST in einem Thread zu füllen. Leider funktioniert das füllen nicht mehr
sobald ich es im Thread ausführe.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,
  VirtualTrees, Vcl.ImgList;

type
  TForm2 = class(TForm)
    ImageList1: TImageList;
    VST: TVirtualStringTree;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure VSTGetImageIndexEx(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex; var ImageList: TCustomImageList);
    procedure VSTGetNodeDataSize(Sender: TBaseVirtualTree;
    var NodeDataSize: Integer);
    procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  MyThread = class(TThread)
  private
    i:integer;
    { Private-Deklarationen }
  protected
    { protected-Deklarationen }
    procedure Execute; override;
    procedure DoSomething;
  public
    { Public-Deklarationen }
  end;

type
  PTreeData = ^TTreeData;
  TTreeData = packed record
  Column0: String; Column1: String; Column2: String;
end;

var
  MyThr: MyThread;
  Form2: TForm2;

implementation

{$R *.dfm}

procedure MyThread.Execute;
var
  Data: PTreeData;
  XNode: PVirtualNode;
  begin
 while not Terminated do
   begin
     inc(i);

   XNode := form2.VST.AddChild(nil);

   if form2.VST.AbsoluteIndex(XNode) > -1 then
     begin
       Data := form2.VST.GetNodeData(Xnode);
       Data^.Column0 := inttostr(i);
       Data^.Column1 := 'Wert 1';
       Data^.Column2 := 'Wert 2';
     end;

     if i = 10 then begin
        i:=0;
        SuspendThread(MyThr.Handle);
     end;

   Synchronize(DoSomething);
   end;
end;

procedure MyThread.DoSomething;
begin
//
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
       MyThr := MyThread.Create(True);
       MyThr.FreeOnTerminate := true;
       MyThr.Priority := tpIdle;
       ResumeThread(MyThr.Handle);
end;

procedure TForm2.VSTGetImageIndexEx(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex; var ImageList: TCustomImageList);
begin
  if Column = 0 then
    begin
      if Kind in [ikNormal, ikSelected] then ImageIndex := 0;
  end;

end;

procedure TForm2.VSTGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
  NodeDataSize := SizeOf(TTreeData);
end;

procedure TForm2.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var
  Data: PTreeData;
begin
  Data := VST.GetNodeData(Node);
  case Column of
    0: CellText := Data^.Column0;
    1: CellText := Data^.Column1;
    2: CellText := Data^.Column2;
  end;
end;

end.
Wenn ich aber im ButtonClick nicht den Tread starte sondern die VST direkt fülle.....
Delphi-Quellcode:
procedure TForm2.BitBtn1Click(Sender: TObject);
var
  Data: PTreeData;
  XNode: PVirtualNode;
begin
   XNode := VST.AddChild(nil);
   Data := VST.GetNodeData(Xnode);

   Data^.Column0 := inttostr(i);
   Data^.Column1 := 'Wert 1';
   Data^.Column2 := 'Wert 2';

end;
dann geht es was mache ich falsch?
Pascal
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz