Hallo,
ich habe einen Thread, der sich ein Formular erzeugt, um den Status der aktuellen Aufgabe anzuzeigen.
Nichts anderes als der Thread greift sonst noch auf dieses Formlar zu.
Ich habe hier im Forum erfahren, dass ich trotzdem immer Synchronize benutzen muss, wenn ich auf visuelle Elemente zugreifen möchte.
In der Deklaration des Forms habe ich eine Variable (record) unter Public eingefügt.
Der record enthält nichts sichtbares er ist aber natürlich ein Element des sichtbaren Formulars.
Darf ich ohne Synchronize die Werte des Records ändern?
Hier die Deklaration:
Delphi-Quellcode:
TTaskLogStatus = record
StepNr,min,max,step: integer;
ordFeedback: integer;
jobname: string;
logStr:string;
SpaceLines: integer;
end;
TTaskLogForm = class(TForm)
Memo: TMemo;
TitelLabel: TLabel;
Label1: TLabel;
Label2: TLabel;
PB: TProgressBar;
//...
procedure CancelButtonClick(Sender: TObject);
//...
private
{ Private-Deklarationen }
procedure RefreshPrevStep(im:TImage; Labl:TLabel; ordFeedback: integer);
procedure SetToStep(StepNr:integer; ordFeedback: integer=ord(tfOk));
procedure SetToStepPB(StepNr,min,max,step:integer; ordFeedBack:integer = ord(tfOk));
procedure StepPB;
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public-Deklarationen }
Status: TTaskLogStatus; // <-- hierum geht es. Darf dies ohne Synchronize geändert werden?
procedure DoSetToStep;
procedure DoSetToStepPB;
procedure DoStepPB;
procedure DoSetJobName;
procedure SetWaitCursor;
procedure SetDefaultCursor;
procedure Log;
end;
Hintergrund:
Da ich nur Methoden ohne Parameter an Synchronize übergeben kann, möchte ich im Thread erst die Statusvariable setzen und anschließend mittels Synchronize eine der Doxxx Prozeduren ausführen, die den Inhalt der Variable verarbeiten.
Oder gibt es einen besseren Weg als diesem Umweg?