Erste Gehversuche mit GTK2

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Erste Gehversuche mit GTK2

Beitrag von hum4n0id3 »

Mathias hat geschrieben:
Do 13. Apr 2023, 09:12
Genau. QWidget ist ein einfaches Fenster. Willst eine Statusbar Toolbar und Menü haben, nimmst du QMainWindow. Hast du kompliziertes Fenster, packst du in das QMainWindow das QWidget rein und darauf dann eben die QVBoxView oder QHBoxView oder Form oder GridView rein. Dann das Layout ausrichten und das wars.
Im Grunde das Gleiche wie bei GTK, einfach der Dialekt ist anders. QT und LCL habe viele Ähnlichkeiten. GTK ähnelt eher den alten Toolkit Athena und Motif.
Ja, genau. Das versuchte ich auch zu schreiben. Jemand der sich damit schon auseinander gesetzt hat, wird das auf Anhieb verstehen. Jemand der damit noch nie gearbeitet hat, hat erstmal seine schwierigkeiten. Obwohl ich kein C++ kann, konnte ich mit deinem Beispiel sofort etwas anfangen, weil es in Python im Prinzip ähnlich ist. Auch die Doku von Gtk verstehe ich nun viel besser, weil ich jetzt eine Vorstellung davon habe, was da passiert und gemacht werden muss. Sie funktionieren eben ähnlich.

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Jemand der sich damit schon auseinander gesetzt hat, wird das auf Anhieb verstehen.
Das ist so, wen man mal weis, was Container sind, ist das coden einiges ringer.

Ich habe noch ein bisschen mit qt gespielt. Was dort nocht geht, eine HBox in eine VBox reinzupacken. Anscheinend gibt es da eine andere Lösung als bei GTK.

Und jetzt konnte ich es nicht lassen, es mal kurz mit Lazarus auszuprobieren. Dabei habe ich etwas gemogelt, ich habe eine LCL, Anwendung gebaut, und dort den Widget-Satz auf QT5 umgestellt. Er da hatte ich die Unit qt5 zur Verfügung. Dies sieht dann so aus.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  window: QWidgetH;
  button: QPushButtonH;
  layout: QHBoxLayoutH;
var
  s: WideString;
  i: integer;
begin
  window := QWidget_Create();

  layout := QHBoxLayout_Create(window);
  for i := 0 to 7 do begin
    s := 'Button ' + IntToStr(i);
    button := QPushButton_Create(@s);
    QBoxLayout_addWidget(layout, button);
  end;

  QWidget_show(window);
end;   
Was dabei merkwürdig ist, das sieht ganz anders aus, als QT5 mit C++. Dies sieht eher aus wie bei GTK.
Ist es mit FPC nicht möglich, das die Anbindung an QT5 so merkwürdig gelöst ist.
Was mit noch aufgefallen ist, ist musste eine spezielle lib installieren:

Code: Alles auswählen

apt install libqt5pas-dev 
Und Lazarus greift dann mit der Unit QT5 dann aus diese Lib zu.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Erste Gehversuche mit GTK2

Beitrag von PascalDragon »

Mathias hat geschrieben:
Fr 14. Apr 2023, 22:01
Was dabei merkwürdig ist, das sieht ganz anders aus, als QT5 mit C++. Dies sieht eher aus wie bei GTK.
Ist es mit FPC nicht möglich, das die Anbindung an QT5 so merkwürdig gelöst ist.
Was mit noch aufgefallen ist, ist musste eine spezielle lib installieren:

Code: Alles auswählen

apt install libqt5pas-dev 
Und Lazarus greift dann mit der Unit QT5 dann aus diese Lib zu.
Weil du eben nicht von Pascal aus auf C++ Code zugreifen kannst (zumindest nicht mit FPC; in Delphi geht das, wenn für C++ der C++ Builder genutzt wird, da beide Compiler kompatible ABIs haben). Es braucht eine Bibliothek, welche die C++ API als C API bereitstellt, was eben die libqt5pas (oder libqt4pas) macht.
FPC Compiler Entwickler

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Weil du eben nicht von Pascal aus auf C++ Code zugreifen kannst (zumindest nicht mit FPC; in Delphi geht das, wenn für C++ der C++ Builder genutzt wird, da beide Compiler kompatible ABIs haben)
Habe ich dies richtig verstanden. ?
Mit FPC kann man nur auf Libs zugreifen, welch in C geschrieben sind ?
Libs, welche in C++ geschrieben sind, guckt man mit FPC in die Röhre ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Erste Gehversuche mit GTK2

Beitrag von theo »

Du bist doch jetzt auch schon 9 Jahre dabei?

Das kann man alles seit Ewigkeiten wissen.
https://downloads.freepascal.org/fpc/do ... Pascal.pdf

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Erste Gehversuche mit GTK2

Beitrag von hum4n0id3 »

theo hat geschrieben:
Sa 15. Apr 2023, 18:59
Du bist doch jetzt auch schon 9 Jahre dabei?

Das kann man alles seit Ewigkeiten wissen.
https://downloads.freepascal.org/fpc/do ... Pascal.pdf
Cool! Danke für den Link :D

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

theo hat geschrieben:
Sa 15. Apr 2023, 18:59
Du bist doch jetzt auch schon 9 Jahre dabei?

Das kann man alles seit Ewigkeiten wissen.
https://downloads.freepascal.org/fpc/do ... Pascal.pdf
Wen ich so im PDF lese, braucht man eine Brücke zwischen der C++-Lib und Pascal ?
Und diese Brücke muss auch in C++ geschrieben sein ?

Wen ich den Pascal-Button von gt5 angucke, sieht man dies gut.
https://github.com/davidbannon/libqt5pa ... tton_c.cpp

Schade, das dies nicht direkt geht, Pascal und C++ unterstützen Objektorientierung.
Und wen ich mit "object" von Pascal angucke, ist dies sehr ähnlich mit den C++ "class".
Nicht verwechseln mit LCL und Delphi "class", dies sind anders aufgebaut.

Hier steht noch etwas, https://www.freepascal.org/future.var , das da noch was in Planung ist, was C++ anbelangt.
So nebenbei hat es da noch andere interessante Sachen in Planung.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Erste Gehversuche mit GTK2

Beitrag von PascalDragon »

Mathias hat geschrieben:
So 16. Apr 2023, 13:33
Und wen ich mit "object" von Pascal angucke, ist dies sehr ähnlich mit den C++ "class".
Das ist nur eine oberflächliche Ähnlichkeit. Der Teufel steckt im Detail, was auch der Grund ist, warum cppclass nicht wirklich über experimentelle Funktionalitäten hinaus gekommen ist.
FPC Compiler Entwickler

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Bit GTK2 kann man noch recht lustige Spielerreien machen. Zum ausprobieren hier: https://github.com/sechshelme/Lazarus-G ... tton_Label
Ich sehe schon, mit GTK kann man sich recht lange beschäftigen, die Möglichkeiten sehen endlos aus.
Und ich denke, bei GTK4 wird es noch viel extremer ?
Das ist nur eine oberflächliche Ähnlichkeit. Der Teufel steckt im Detail, was auch der Grund ist, warum cppclass nicht wirklich über experimentelle Funktionalitäten hinaus gekommen ist.
Sowas habe ich fast vermutet, ansonsten wäre QT sicher anders verwendet worden und nicht über den Umweg von libqtpas.
Dateianhänge
Bildschirmfoto vom 2023-04-18 15-45-55.png
Bildschirmfoto vom 2023-04-18 15-45-55.png (27.83 KiB) 3741 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Ich habe folgendes Miniprogramm mit 2 Dialogen erzeugt. Der einte Dialog ist eine Fontauswahl, und der andere für die Schrift.
Nun das Problem.
Der Color Dialog verhält sie wie wen man in der LCL ein Form mit ShowModal aufruft, somit somit ist keine aktion mehr auf die anderen Fenster möglich.
Beim Font Dialog ist wie Show, wobei da es sogar möglich ist diesen Dialog mehrmals aufzurufen.

Was mache ich falsch, das die Dialoge sich unterschiedlich verhalten ?

Die beiden Funktionen sehen fast gleich aus.

Code: Alles auswählen

  procedure select_Color(widget: PGtkWidget; lab: gpointer); cdecl;
  var
    dialog: PGtkWidget;
  begin
    dialog := gtk_color_selection_dialog_new('Select Color');
    gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);
  end;

  procedure select_Font(widget: PGtkWidget; lab: gpointer); cdecl;
  var
    dialog: PGtkWidget;
  begin
    dialog := gtk_font_selection_dialog_new('Select Font');
    gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);
  end;    
Im Anhang noch der ganze Code.
Dateianhänge
30-FontSelectionDialog_2.zip
(1.68 KiB) 55-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Erste Gehversuche mit GTK2

Beitrag von theo »

Bei mir verhalten sich beide Dialoge gleich.
GTK 2.24.33

Betriebssystem: openSUSE Leap 15.4
KDE-Plasma-Version: 5.24.4
KDE-Frameworks-Version: 5.90.0

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Ich habe folgendes:

Code: Alles auswählen

    WriteLn('GTK+ version: ', gtk_major_version, '.', gtk_minor_version, '.', gtk_micro_version); // ->  GTK+ version: 2.24.33
Dies wäre die gleiche Version wie bei dir.

Ich habe es noch auf dem Laptop mit der gleichen Mint-Version getestet. Dort verhalten sich beide ShowModal.
Somit muss auf meinem PC ein Bug vorliegen.
Könnte evtl. dies mir GTK4 zusammen hängen, welches ich direkt vom Git-Server habe ?
Nur soviel ich weis, sollte doch GTK2 unabhängig von GTK4 sein ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Erste Gehversuche mit GTK2

Beitrag von theo »

Selbst wenn - oder auch falls der Fenstermanager noch mitredet - ergibt es keinen Sinn, dass sich die beiden Dialoge in der gleichen Anwendung unterschiedlich verhalten.
Ich kann das wie gesagt auch nicht bestätigen/nachvollziehen.
Dazu fällt mir weiter nichts ein.

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Bei mir verhalten sich beide Dialoge gleich.
GTK 2.24.33
Kennt einer eine typische GTK2 Anwendung, welche die Color und Font Dialoge verwenden ?
Wen dort das Problem auch zum Vorschein kommt, dann ist klar, das meine GTK2 Lib ein Problem hat.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Kennt einer eine typische GTK2 Anwendung, welche die Color und Font Dialoge verwenden ?
Wen dort das Problem auch zum Vorschein kommt, dann ist klar, das meine GTK2 Lib ein Problem hat.
Diese Problem hat sich bei mir gelöst, als ich mal in der Zwischenzeit Linux neu installierte.

Aber etwas anderes erstaunt mich viel mehr. Bei der LCL wird in der Regel im Hintergrund auf GTK2 zugegriffen, sicher bei Linux der Fall.
Mir ist da im Forum vielfach aufgefallen, das viele Coder Probleme haben, das zB. eine Caption von eine Komponente über den Rand aus geht und abgeschnitten wird. Vor allem wen verschiedene Skalierungen des Desktops vorkommen.

Bei normaler Anwendung von GTK2 ist das Management der Komponenten genial gelöst die Grösse wird immer so angepasst, das die Caption immer schön rein passt. Man kann auch die Dialoge nur soweit verkleinern, so das noch aller Text sichtbar ist. Siehe mein Beispiel weiter oben mit den verdrehten Schriften, alles ist sichtbar.

Wieso wird sowas nicht bei der Gestaltung bei der LCL perfekt integriert. Es hat da schon ein Autosize, aus so perfekt wie bei nativen GTK ist es nicht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten