TForm.Handle und GdkWindow
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: TForm.Handle und GdkWindow
@pluto:
Das Problem ist das man mit unserer Methode ein TXID oder auch ein TWindow (ist das gleiche) zurück bekommt, er aber ein TGdkWindow möchte.
Aber ich glaube eine Funktion gesehen zu haben mit der man eine TXID zu einem TGdkWindow umwandeln kann... Mal gucken ob ich das nochmal finde...
Das Problem ist das man mit unserer Methode ein TXID oder auch ein TWindow (ist das gleiche) zurück bekommt, er aber ein TGdkWindow möchte.
Aber ich glaube eine Funktion gesehen zu haben mit der man eine TXID zu einem TGdkWindow umwandeln kann... Mal gucken ob ich das nochmal finde...
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
pluto hat geschrieben:Kannst du ein vergleichbares Beispiel erzeugen mit deinem Problem und das hochladen?
Das Beispiel ist wirklich trivial. Wenn bei dir eine andere Adresse als nil angezeigt wird, ist bei dir alles in Ordnung. Wichtig: Widgetset auf GTK2 stellen.
Teekeks hat geschrieben:Das Problem ist das man mit unserer Methode ein TXID oder auch ein TWindow (ist das gleiche) zurück bekommt, er aber ein TGdkWindow möchte.
Bis auf die exakten Bezeichnungen stimmt das in etwa, aber die sind erstmal egal . Vielleicht ist dir sogar aufgefallen, dass ihr für die ebenfalls ein GdkWindow benötigt, um von dort das X-Window zu erhalten -- und wenn man da nil hinein gibt, kommt auch nil wieder heraus.
pluto hat geschrieben:hast du dir schon mal angeschaut, wie Lazarus bzw. die LCL die Mauszeiger verwaltet? Vielleicht kannst du es erweitern. Meines wissens sind es Konstanten. Wenn du die Nummern raus bekommst, müsste es klappen.
Es könnte aber auch sein, dass Einträge in der Res Datei fehlen.
Hab ich auch schon versucht, aber nichts sinnvolles gefunden. Eine Zuweisung an Cursor ergibt in etwa folgendes:
- Zuweisung des neuen Cursors an das Feld FCursor
- Aufruf von Perform(CM_CURSORCHANGED, 0, 0);
- Ich kann keinen MessageHandler für diese Message finden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
Code: Alles auswählen
Self.Handle ist GtkWidget: True
GdkHandle: 00000000
Wenn du das Handle an anderer Stelle als OnCreate abfragst, zum Beispiel Button1.OnClick() dann steht das hier drin:
Code: Alles auswählen
Self.Handle ist GtkWidget: True
GdkHandle: 0000000000CB4E00
Damit sollte einiges klarer sein
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
Scotty hat geschrieben:Wenn du das Handle an anderer Stelle als OnCreate abfragst, zum Beispiel Button1.OnClick() dann steht das hier drin:Code: Alles auswählen
Self.Handle ist GtkWidget: True
GdkHandle: 0000000000CB4E00
Damit sollte einiges klarer sein
An welchen stellen funktioniert das denn einwandfrei -- oder besser: wo funktionierts und wo ist es sinnvoll? Ich meine OnShow getestet zu haben, und da kam auch nichts heraus.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Lazarusforum e. V.
- Beiträge: 7178
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: TForm.Handle und GdkWindow
Wäre es denkbar, dass das Handle nicht beim onCreate eines Froms zu Verfügung steht?
Bau das mal bei OnShow ein oder onAcitivate. Das sollte reichen.
Bau das mal bei OnShow ein oder onAcitivate. Das sollte reichen.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
pluto hat geschrieben:Wäre es denkbar, dass das Handle nicht beim onCreate eines Froms zu Verfügung steht?
Bau das mal bei OnShow ein oder onAcitivate. Das sollte reichen.
Also genau das war meine Frage.
Ich hab mal getestet:
- Create: nein
- FirstShow: Nein
- Show: Nein
- Activate: ja
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
Bau einen OnIdle-Handler ein und hänge den am Ende wieder ab (OnIdle:=nil).
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
Scotty hat geschrieben:Bau einen OnIdle-Handler ein und hänge den am Ende wieder ab (OnIdle:=nil).
Dann kann ich mein OnActivate-Event genau so gut auch wieder als Event-Handler austragen.
Davon mal abgesehen, hat sich an meinem Cursor eh recht wenig (genauer: gar nichts) geändert
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Lazarusforum e. V.
- Beiträge: 394
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
Hy, der Thread ist zwar uralt, aber ich komme an der gleichen Stelle nicht weiter:
Ich möchte mit gtk_widget_hide ein Fenster verstecken, äquivalent zu Windows.ShowWindow(...). Habe das versucht:
Wenn ich mir das Verhalten von hide_all so ansehe, ist das Handle hier offenbar auch nicht der richtige Ansprechpartner, da es sich sozusagen auf den Inhalt des Fensters bezieht. Mit PGtkWidget(myForm.Handle)^.window hatte ich auch keinen Erfolg.
Eigentlich möchte ich gtk_widget_set_parent_window benutzen, aber der Einfachheit halber erst mal gtk_widget_hide zum laufen bringen. Nur wie? myForm.visible := false; geht auch nicht. Kann's sein, dass das alles überhaupt nicht implementiert ist?
Ich möchte mit gtk_widget_hide ein Fenster verstecken, äquivalent zu Windows.ShowWindow(...). Habe das versucht:
Code: Alles auswählen
uses gtk2;
gtk_widget_hide(PGtkWidget(myForm.Handle)); // dud nix
gtk_widget_hide_all(PGtkWidget(myForm.Handle)); // macht alle Elemente im Fenster unsichtbar, das Fenster selbst bleibt sichtbar
Wenn ich mir das Verhalten von hide_all so ansehe, ist das Handle hier offenbar auch nicht der richtige Ansprechpartner, da es sich sozusagen auf den Inhalt des Fensters bezieht. Mit PGtkWidget(myForm.Handle)^.window hatte ich auch keinen Erfolg.
Eigentlich möchte ich gtk_widget_set_parent_window benutzen, aber der Einfachheit halber erst mal gtk_widget_hide zum laufen bringen. Nur wie? myForm.visible := false; geht auch nicht. Kann's sein, dass das alles überhaupt nicht implementiert ist?
-
- Lazarusforum e. V.
- Beiträge: 394
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: TForm.Handle und GdkWindow
Hmm, offenbar geht es unter Linux generell nicht, ein Fenster in einem anderen Fenster eines anderen Prozesses anzuzeigen. Ich muss die gesamte GUI also in einem Programm halten und alle Infos, die vom Zweitprozess an die GUI gehen, über das MemmoryMapping schaufeln. Das wird 'ne Menge Arbeit