Form ueber Handle ansprechen
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Form ueber Handle ansprechen
Hallo,
weiss Jemand eine Lösung, die platformunabhängig läuft bei der ich eine Form über das Handle ansprechen kann.
Unter MS-Win geht es ja über:
ShowWindow(v_handle,SW_SHOW);
wobei: v_handle: HWND;
Ich kann auch beim erzeugen einer Form über: v_handle:=form1.handle;
das Handle der Form bekommen.
Nur würde ich jetzt gerne die Form wieder über das Handle aktivieren können.
In der Unit "Forms" gibt es zwar die Methode "ShowWindow" aber da streikt der Compiler unter Linux und meldet:
Error: Identifier not found
Weiss Jemand Rat?
Gruss,
Tibor
weiss Jemand eine Lösung, die platformunabhängig läuft bei der ich eine Form über das Handle ansprechen kann.
Unter MS-Win geht es ja über:
ShowWindow(v_handle,SW_SHOW);
wobei: v_handle: HWND;
Ich kann auch beim erzeugen einer Form über: v_handle:=form1.handle;
das Handle der Form bekommen.
Nur würde ich jetzt gerne die Form wieder über das Handle aktivieren können.
In der Unit "Forms" gibt es zwar die Methode "ShowWindow" aber da streikt der Compiler unter Linux und meldet:
Error: Identifier not found
Weiss Jemand Rat?
Gruss,
Tibor
Re: Form ueber Handle ansprechen
Wozu?piper62 hat geschrieben: bei der ich eine Form über das Handle ansprechen kann.
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Ganz einfach: Ich erzeuge mehrere Forms, die alle ein unterschiedliches Handle bekommen.
Das kann ich sehen. Bis hierhin ist Alles OK.
Nun muss es doch möglich sein diese Forms wieder ueber das Handle anzusprechen, oder?
In der Forms Unit wäre die Methode ja auch drin aber ich bekomme - wie gesagt - eine Fehlermeldung.
Das kann ich sehen. Bis hierhin ist Alles OK.
Nun muss es doch möglich sein diese Forms wieder ueber das Handle anzusprechen, oder?
In der Forms Unit wäre die Methode ja auch drin aber ich bekomme - wie gesagt - eine Fehlermeldung.
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Pluto: Danke! Es war die LCLIntf die gefehlt hat.
Nun klappt es.
Theo: Ich erzeuge mehrere Forms, die den gleichen Namen haben. Ausserdem möchte ich auch externe Programme steuern können. Meines Wissens nach geht das nur über das Handle?
Siehst Du noch eine andere Möglichkeit wenn etwas in dieser Art mehrfach durchgeführt wird:
Application.CreateForm(TForm1,Form1);
??
Nach dem Create kann ich mir über Form1.Handle das Handle holen und dann diese Form darüber ansprechen.
Bin offen für Verbesserungsvorschläge.
Gruss,
Tibor
Nun klappt es.
Theo: Ich erzeuge mehrere Forms, die den gleichen Namen haben. Ausserdem möchte ich auch externe Programme steuern können. Meines Wissens nach geht das nur über das Handle?
Siehst Du noch eine andere Möglichkeit wenn etwas in dieser Art mehrfach durchgeführt wird:
Application.CreateForm(TForm1,Form1);
??
Nach dem Create kann ich mir über Form1.Handle das Handle holen und dann diese Form darüber ansprechen.
Bin offen für Verbesserungsvorschläge.
Gruss,
Tibor
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Es gibt mehrere Form1, die auch zur gleichen Zeit existieren. Unterscheiden lassen Sie sich meines Wissens nach nur anhand der Instanz, d.h. in der Repräsentation des Betriebssystems über das Handle.
Oder liege ich da falsch?
Wenn ich einfach nur Form1.Activate mache, erwische ich immer nur die zuketzt erzeugte Form.
Über das Handle kann ich nun auch davor erzeugte Instanzen ansprechen.
So klarer?
Oder liege ich da falsch?
Wenn ich einfach nur Form1.Activate mache, erwische ich immer nur die zuketzt erzeugte Form.
Über das Handle kann ich nun auch davor erzeugte Instanzen ansprechen.
So klarer?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Was genau hast du eigentlich vor ? Warum erzeugst du mehrer TForm1 Instanzen ?
Das Verhalten ist für mich normal. Da ja in Form1 die zuletzte erstelle Form gespeichert wird.
Nun musst du entweder auf API zurückgreifen z.b. Sendmessger oder so. oder du musst alle instanzen in einer Liste Speichern.
Aber beschreibt bitte erst was du genau erreichen möchtest. So eine art MDI Anwendung ?
Das Verhalten ist für mich normal. Da ja in Form1 die zuletzte erstelle Form gespeichert wird.
Nun musst du entweder auf API zurückgreifen z.b. Sendmessger oder so. oder du musst alle instanzen in einer Liste Speichern.
Aber beschreibt bitte erst was du genau erreichen möchtest. So eine art MDI Anwendung ?
MFG
Michael Springwald
Michael Springwald
Irdendwo speicherst du ja die Handles auch, wie willst du sonst zugreifen?piper62 hat geschrieben: So klarer?
Wieso speicherst du stattdessen nicht das Objekt (bzw den Pointer drauf),
Also bspw statt:
MyHandleList.Add(Form1.Handle);
Das:
MyFormList.Add(Form1);
Ist doch viel logischer.
Genauso wie das Handle ändert, ändert auch die Speicherstelle der Instanz, wenn du die im Loop erzeugst.
Also kannste das Handle vergessen.
Form1 zeigt immer auf die aktuelle Form im Loop, also am Ende natürlich auf die letzte, deshalb jeden Instanzzeiger in Liste speichern.