TForm.Handle und GdkWindow

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.

Re: TForm.Handle und GdkWindow

Beitragvon Teekeks » 3. Mär 2011, 21:08 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...
Teekeks
 
Beiträge: 359
Registriert: 27. Mai 2009, 19:54
Wohnort: Cottbus
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2) | 
CPU-Target: x86
Nach oben

Beitragvon Socke » 3. Mär 2011, 21:23 Re: TForm.Handle und GdkWindow

pluto hat geschrieben:Kannst du ein vergleichbares Beispiel erzeugen mit deinem Problem und das hochladen?

gdktest.tar.gz
Beispiel um zu überprüfen ob TForm.Handle ein GdkWindow referenziert
(1.71 MiB) 12-mal heruntergeladen

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 :D. 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.
Also da weiß ich auch nicht weiter, wie das überhaupt funktionieren kann.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2636
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Scotty » 4. Mär 2011, 10:50 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 :mrgreen:
Scotty
 
Beiträge: 770
Registriert: 4. Mai 2009, 12:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4 | 
CPU-Target: x86_64-linux-qt/gtk2
Nach oben

Beitragvon Socke » 4. Mär 2011, 10:55 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 :mrgreen:

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
Socke
Lazarusforum e. V.
 
Beiträge: 2636
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon pluto » 4. Mär 2011, 13:55 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.
MFG
Michael Springwald
Aktuelles Projekt: ContentManager2(Ehmals NoteManager2).
pluto
Lazarusforum e. V.
 
Beiträge: 7022
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg(Oldenburg)
OS, Lazarus, FPC: Linux Mint 19.2 | 
CPU-Target: AMD
Nach oben

Beitragvon Socke » 4. Mär 2011, 18:26 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
Meiner Meinung nach ist es aber völlig bescheuert, bei jeder Aktivierung den Cursor zu überprüfen -- auch, wenn es in meinem Fall nur einmal sein sollte.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2636
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Scotty » 4. Mär 2011, 19:15 Re: TForm.Handle und GdkWindow

Bau einen OnIdle-Handler ein und hänge den am Ende wieder ab (OnIdle:=nil).
Scotty
 
Beiträge: 770
Registriert: 4. Mai 2009, 12:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4 | 
CPU-Target: x86_64-linux-qt/gtk2
Nach oben

Beitragvon Socke » 4. Mär 2011, 19:40 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
Socke
Lazarusforum e. V.
 
Beiträge: 2636
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon MitjaStachowiak » 8. Sep 2017, 13:21 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:
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?
MitjaStachowiak
Lazarusforum e. V.
 
Beiträge: 356
Registriert: 15. Mai 2010, 12:46
CPU-Target: 64 bit
Nach oben

Beitragvon MitjaStachowiak » 8. Sep 2017, 17:12 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 :|
MitjaStachowiak
Lazarusforum e. V.
 
Beiträge: 356
Registriert: 15. Mai 2010, 12:46
CPU-Target: 64 bit
Nach oben

• Themenende •
Vorherige

Zurück zu Lazarus - Bugs



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried