Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pointer von einem Fenster (https://www.delphipraxis.net/3725-pointer-von-einem-fenster.html)

Maa83 27. Mär 2003 09:47


Pointer von einem Fenster
 
Hi ihr Leute

wenn ich ein Fenster mit

FensterName := TFenster.create(self);

erzeugen wie kann ich den Pointer der auf dieses Fenster zeigt zwischen speichern???

Phoenix 27. Mär 2003 10:01

Hi,

Du kannst nach
Code:
FensterName := TFenster.create(self);
Direkt über
Code:
FensterName.Handle;
auf das Handle des Fensters zugreifen.
API Funktionen unter Windows benötigen eh meist das Handle.

Einen Pointer auf das Fenster kannst Du dir über
Code:
myPointer := ^FensterName;
holen und dann damit weiter arbeiten.

Maa83 27. Mär 2003 10:05

und von welchem Datentyp ist myPointer ?

Maa83 27. Mär 2003 10:29

und wie kann ich mit einem Handle von einem Fenster arbeiten? (wie kann ich den Handle wieder einem Fenster übergeben? ist ja eine Read-Only Eigenschaft)

janjan 27. Mär 2003 10:42

Erlkär am besten einfach mal was du machen willst...

Phoenix 27. Mär 2003 10:47

Sorry, das war natürlich Schwachfug von mir... immer diese @ und ^- Verwechslerei. :oops:

Es geht folgendermassen:
:idea:
Delphi-Quellcode:
   var
      MyForm : TForm;  // Fenster
      PWindow: ^TForm; // PWindow: Zeiger auf den Typen TForm
   begin
      MyForm := TForm.Create(self); // form erzeugen
      PWindow := @MyForm;           // Pointer auf Form holen
   end;
Und nun zum Handle:
Ein Handle ist sozusagen der 'Henkel', an dem Windows das Formular anpackt. Du kannst also z.B. an das Handle Nachrichten Schicken, oder das Handle woanders hin übergeben. Du kannst dem Handle als solches allerdings nichts zuweisen, denn das Handle gehört ja zum Form dazu.

Wenn Du mit mehreren Forms an einem 'Haken' arbeiten willst ist wohl der Pointer die richtige Methode.

Maa83 27. Mär 2003 11:00

@Phoenix: vielen Dank das ist genau was ich gesucht habe

@janjan: Phoenix hat mich doch verstanden :D

Maa83 27. Mär 2003 13:41

Funktioniert leider doch noch nicht so wie ich das will :(

Ich beschreib mein Problem jetzt mal richtig:

und zwar hab ich ein Fenster auf diesem befindet sich ein Button.
Klicke ich auf diesen Button öffnet sich ein Suchfenster in dem ich einen Datensatzt auswähle. Aus diesem Datensatzt lese ich die IdentNummer aus und geb diese zurück an das erste Fenster und schließe das SuchenDLG wieder.

Das Problem:
wenn ich das SuchenDLG aufrufe wird das erste Fenster auf NIL gesetzt da es sich um MDIChilds handelt...
deshalb muss ich mir den Pointer des Fensters merken.
Wenn ich den Pointer nun wieder zuweise habe ich auch das richtige Fenster wieder. kann die Variablen ansprechen usw.
Nur die Komponeten auf dem Fenster kann ich nicht ansprechen da diese immer noch aus mir unerfindlichen Gründen auf NIL gesetzt sind!

Phoenix 27. Mär 2003 13:55

Huch?

Zum einen: Die normalen Delphi-Units erstellen ein Fenster als globale Variable. Du brauchst also nur das entsprechende Fenster in die Uses - Klausel mit aufzunehmen und kannst über FormName.KompoName direkt drauf.

Beispiel:
Unit Form1 ruft den SuchDlg auf (in Form2) der steckt auch in der Uses - Klausel deines ersten Formulares..

Beim schliessen des Dialogs schickst Du eine Message an dessen Parent. (genauer: an Parent.Handle).

Das Formular bekommt die Nachricht, liest aus dem zweiten Formular die Nummer selber aus (da es das Formular über uses kennt ist das kein problem, z.B. Form2.Edit1.Text) und schliesst den Dialog auch wieder. That's it.

Maa83 27. Mär 2003 14:01

Das geht leider nicht so einfach da ich keine globalen Variablen gebrauchen kann und funktionieren tuts damit auch nur wenn die Fenster keine MDI Childs wären (was aber für das Programm zwingend vonnöten ist :(

an das Fenster das ich über den Button aufrufe wird nichts übergeben (ausser der Pointer). Das aufgerufene Fenster muss aber wissen von wo es aufgerufen wurde... jetzt kommt wahrscheinlich die Idee ich soll einfach den Sender mit übergeben. Würde bei "normalen" Fenstern auch wunderbar funktionieren bei MDI-Childs aber nicht da diese eben beim deaktivieren auf NIL gesetzt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Seite 1 von 2  1 2      

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