AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pointer von einem Fenster

Ein Thema von Maa83 · begonnen am 27. Mär 2003 · letzter Beitrag vom 27. Mär 2003
Antwort Antwort
Seite 1 von 2  1 2   
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#1

Pointer von einem Fenster

  Alt 27. Mär 2003, 09:47
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???
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#2
  Alt 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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#3
  Alt 27. Mär 2003, 10:05
und von welchem Datentyp ist myPointer ?
Martin
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#4
  Alt 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)
Martin
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#5
  Alt 27. Mär 2003, 10:42
Erlkär am besten einfach mal was du machen willst...
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#6
  Alt 27. Mär 2003, 10:47
Sorry, das war natürlich Schwachfug von mir... immer diese @ und ^- Verwechslerei.

Es geht folgendermassen:
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#7
  Alt 27. Mär 2003, 11:00
@Phoenix: vielen Dank das ist genau was ich gesucht habe

@janjan: Phoenix hat mich doch verstanden
Martin
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#8
  Alt 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!
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#9
  Alt 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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#10
  Alt 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.
Martin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 00:33 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