Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variable übergreifend übergeben (https://www.delphipraxis.net/7654-variable-uebergreifend-uebergeben.html)

Tpercon 18. Aug 2003 14:22


Variable übergreifend übergeben
 
Das ist wahrscheinlich ne ganz dumme Frage, aber ich komme da auf keine Lösung.

Ich übergebe einem Thread Objekt den Wert einer Variablen von meiner Hauptform (create Ereignis überschrieben und darin als Parameter angebeben). Dieser Wert wird im Thread ner globalen Variable zugewiesen und diese im Verlauf geändert. Wie übergebe ich den Wert dann wieder an die Variable im Hauptformular? Ich möchte keine public deklarierten Variablen benutzen!

neolithos 18. Aug 2003 14:27

Re: Variable übergreifend übergeben
 
Übergib die Variable nur als Referenz (eh Zeiger drauf).

Der Zugriff sollte Dabei nur mittels TCriticalSection geschehen.

Da ich aber nicht genau weis was du genau willst kann ich dir nicht sagen ob das der beste weg ist.

Tpercon 18. Aug 2003 14:38

Re: Variable übergreifend übergeben
 
Der Thread wird so aufgerufen:
Delphi-Quellcode:
TMBM.Create(LastClose);
LastClose wird in eine globale Variable in TMBM geschrieben und diese geändert. Wenn der Thread fertig durchlaufen wurde, möchte ich in LastClose wieder den Wert der globalen Variable haben, sonst würde LastClose in der Main Unit ja immer gleich bleiben. Ich brauche also eine Rückgabe des Variablenwertes.

neolithos 18. Aug 2003 14:55

Re: Variable übergreifend übergeben
 
Also willst du die Variable nicht Dynamisch ändern, sondern darin das ergebnis Speichern? Quasi wie ne Function!

Dann schick doch den Rückgabewert mittels PostMessage an dein Fenster
oder das was ich als erstes geschrieben habe.



So, oder Anders?

Tpercon 18. Aug 2003 15:03

Re: Variable übergreifend übergeben
 
Genau, wie eine function!
Wie geht das denn mit dem Zeiger?

oki 18. Aug 2003 15:11

Re: Variable übergreifend übergeben
 
Hi Tpercon,

ich hatte mal ähnliches Problem und dies so gelöst:

Delphi-Quellcode:

type TMyCloseEvent = procedure(Sender : TObject; Value : Integer) of Object;
Hierbei kann natürlich für Value jeder beliebige Typ genutzt werden.

Im Thread dann:
Delphi-Quellcode:
type
  TMyThread = class(TThread)
.
.
.
  private
    FMyCloseEvent : TMyCloseEvent;
  public
    property OnMyClose : TMyCloseEvent read FMyCloseEvent write FMyCloseEvent;
end;

// im Code MyThread

  If Assigned(FMyCloseEvent) then FMyCloseEvent(self, Wert);

Im Hauptprogramm:

Delphi-Quellcode:
   // Ereignisse
  procedure OnThreadClose(Sender : TObject; Value : Integer);

// zum Zeitpunkt Thread-Create

  MyThread := TMyThread.Create(LastClose);
  MyThread.OnMyClose := OnThreadClose;
Im Code für die procedure OnThreadClose des Hauptprogramms kann dann in geeigneter Form der Wert Value weiterverarbeitet werden. Durch den Sender bekommt man automatisch auch mit, welcher Thread diesen liefert. Das ist vorallem interessant, wenn man mehrere dieser Threads startet.

Nach diesem Schema hab ich das schon verarbeitet und es funzt super.

Gruß oki

neolithos 18. Aug 2003 15:18

Re: Variable übergreifend übergeben
 
Oki gibt dir die VCL-Variante von dem Postmassage.

Welche für kleine Datenpackete ausreicht.

Möchtestes du aber große komplizierte Datenstrukturen zurückgeben dann sag bescheid.

Tpercon 18. Aug 2003 15:26

Re: Variable übergreifend übergeben
 
Habe jetzt die Variante von Oki genommen, reicht vollkommen.

Danke euch beiden!

sakura 18. Aug 2003 15:47

Re: Variable übergreifend übergeben
 
@Tpercon: Wenn die Lösung okay ist, wie zu vermuten nach Deiner letzten Aussage, dann setze die Frage bitte auf "beantwortet" (der Link ist oben rechts).

Danke,
...:cat:...

Tpercon 18. Aug 2003 15:51

Re: Variable übergreifend übergeben
 
Zitat:

Zitat von sakura
@Tpercon: Wenn die Lösung okay ist, wie zu vermuten nach Deiner letzten Aussage, dann setze die Frage bitte auf "beantwortet" (der Link ist oben rechts).

Danke,
...:cat:...

Oh, habe ich übersehen. :oops:


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