Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Thread mit Rückgabewert (https://www.delphipraxis.net/72444-thread-mit-rueckgabewert.html)

dk3wx 30. Jun 2006 10:14


Thread mit Rückgabewert
 
Hallo,
komme einfach nicht mehr weiter.

Ich starte einen Thread und übergebe ein Bild (Diagrammfläche)

Im Hauptprogramm:
mthd:=Diagramm.Create(PaintBox1);
with mthd do mthd.OnTerminate := ThreadDone;

Im Thread
constructor Diagramm.Create(Box: TPaintBox);

Die Execute-Methode schreibt Messkurven in diese Zeichenfläche und malt diese auch auf den Bildschirm. Dazu benutze ich Synchronize.

Das Funktioniert recht gut.

Mein Problem:
Wenn ich den Thread beende, steht das Bild auch noch auf dem Bildschirm aber ich komme nicht mehr dran um es ggf. auszudrucken.
Was ich brauche ist eine Rückgabe des Bildes aus dem Thread in mein Hauptprogramm. Habe leider keine Idee mehr wie ich das hinbekomme

Tnx Bernd

Bernhard Geyer 30. Jun 2006 10:18

Re: Thread mit Rückgabewert
 
Lass den Thread in einen TBitmap-Instanz schreiben und dieses Bild kannst Du alle 1/2 Sekunden vom Programm zeichnen lassen (Für Fortschritt) und am Ende der Thread-Lebensdauer kopierst Du es halt ins Hauptprogramm.

dk3wx 30. Jun 2006 10:35

Re: Thread mit Rückgabewert
 
Hallo Bernhard,
das habe ich mit

Form1.PaintBox1.Canvas := Diabox.Canvas;

vor dem Beenden versucht. Da meckert der Compiler das er nicht darf

[Fehler] Unit2.pas(163): E2129 Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden

Und wenn der Thread erst mal beendet ist, stehen wohl auch die Variablen nicht mehr zur Verfügung.
ich versuche mal eine Procedure aus dem Hauptprogramm, der ich das Bild übergebe

Bernd

dk3wx 30. Jun 2006 10:59

Re: Thread mit Rückgabewert
 
Hallo,
Problem erledigt.

Habe im Hauptprogramm eine

procedure TForm1.getDBmp(Bild : TPaintBox);
begin
PaintBox1:= Bild;
end;

geschaffen, die im Thread gerufen wird

procedure Diagramm.GiveDBmp();
begin
Form1.getDBmp(DiaBox);
end;

Es geht ggf. eleganter, aber nun habe ich eine Lösung. ;-)

Danke Bernd


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