Button mit mehr-farbiger Schrift (GTK2)

Rund um die LCL und andere Komponenten
Mathias
Beiträge: 6693
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Button mit mehr-farbiger Schrift (GTK2)

Beitrag von Mathias »

Ich habe es hingekriegt, einem mehrfarbigen Button in der LCL zu erstellen.
Ein kleines Manko hat es, es funktioniert nur ab GTK2.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  fix, btn, lab: PGtkWidget;
begin
  Button1.Width := 150;
  fix := PGtkWidget(Button1.Handle);
  btn := gtk_bin_get_child(GTK_BIN(fix));
  lab := gtk_bin_get_child(GTK_BIN(btn));
  gtk_label_set_markup(GTK_LABEL(lab), '<span foreground="red">Rot</span> <span foreground="green">Grün</span> <span foreground="blue">Blau</span>');
end;
Natürlich könnte man dies auch in eine Komponente verpacken.
Dateianhänge
Bildschirmfoto vom 2024-12-08 09-08-48.png
Bildschirmfoto vom 2024-12-08 09-08-48.png (5.51 KiB) 1603 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1571
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von corpsman »

lol, cool.
Wenn ich es richtig verstanden habe, würde das mit Fresnel Platform unabhängig gehen..
--
Just try it

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

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von Mathias »

corpsman hat geschrieben: So 8. Dez 2024, 09:46 lol, cool.
Wenn ich es richtig verstanden habe, würde das mit Fresnel Platform unabhängig gehen..
Ich weis nicht was du mit Fresnel meinst.

Aber mein Beispiel läuft nur mit GTK. Wen man die GTK2 DLLs hat, sollte es auch unter Windows gehen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6514
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von af0815 »

Mathias hat geschrieben: So 8. Dez 2024, 14:08
corpsman hat geschrieben: So 8. Dez 2024, 09:46 lol, cool.
Wenn ich es richtig verstanden habe, würde das mit Fresnel Platform unabhängig gehen..
Ich weis nicht was du mit Fresnel meinst.
https://wiki.freepascal.org/Fresnel und https://gitlab.com/freepascal.org/lazarus/fresnel
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von Mathias »

Da button.color wiso auch immer nicht funktioniert, kann man den auch über einen kleinen Umweg trotzdem einfärben,.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  fix, btn, lab: PGtkWidget;
  style: PGtkStyle;
begin
  style := gtk_style_new;
  style^.bg[GTK_STATE_NORMAL].pixel := 0;
  style^.bg[GTK_STATE_NORMAL].red := $FFFF;
  style^.bg[GTK_STATE_NORMAL].green := $FFFF;
  style^.bg[GTK_STATE_NORMAL].blue := $8888;

  style^.bg[GTK_STATE_PRELIGHT].pixel := $8888;
  style^.bg[GTK_STATE_PRELIGHT].red := $FFFF;
  style^.bg[GTK_STATE_PRELIGHT].green := $FFFF;
  style^.bg[GTK_STATE_PRELIGHT].blue := 0;

  Button1.Width := 150;
  fix := PGtkWidget(Button1.Handle);
  btn := gtk_bin_get_child(GTK_BIN(fix));
  lab := gtk_bin_get_child(GTK_BIN(btn));
  gtk_label_set_markup(GTK_LABEL(lab), '<span foreground="red">Rot</span> <span foreground="green">Grün</span> <span foreground="blue">Blau</span>');

  gtk_widget_set_style(btn, style);

  Button2.Color:=clRed;  // geht nicht
end; 
Dateianhänge
Bildschirmfoto vom 2024-12-31 08-56-27.png
Bildschirmfoto vom 2024-12-31 08-56-27.png (5.37 KiB) 1102 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
juelin
Beiträge: 168
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von juelin »

Hallo,
sehr interessant.
Aber bei mir geht es nicht bekomme die Meldung "PGtkWidget nicht gefunden".
Was muss man einbinden?
Gruß
Jürgen

Singlepin
Beiträge: 14
Registriert: Fr 28. Aug 2015, 17:00
OS, Lazarus, FPC: Ubuntu 24.04.1 LTS (L 3.6 FPC 3.2.2)
CPU-Target: 64Bit

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von Singlepin »

Code: Alles auswählen

uses
  Gdk2, Gtk2;

Benutzeravatar
juelin
Beiträge: 168
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von juelin »

Hallo Gemeinde,
habe versucht die farbigen Button in mein Programm zu intregieren.
Habe dabei den Sourcecode von Mathias benutzt.
Als erstes mekerte Lazarus das Fehlen von DLL-Files an.
Habe alle DLL-Files (16 Stück) die angemekert wurden runtergeladen. (in Verzeichnis lib)
Habe das Verzeichnis lib in Projekteinstellungen unter Pfade in Bibliotheken eingetragen.
Trotzdem kommt jetzt folgende Fehlermeldungen.
1. siehe bild1 im Anhang
2. siehe bild2 im Anhang
Kann mir da jemand helfen?
Danke und Gruß
Jürgen
Dateianhänge
bild2.jpg
bild2.jpg (10.33 KiB) 947 mal betrachtet
bild1.jpg
bild1.jpg (12.81 KiB) 947 mal betrachtet

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

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von Mathias »

Hallo Gemeinde,
habe versucht die farbigen Button in mein Programm zu intregieren.
Habe dabei den Sourcecode von Mathias benutzt.
Als erstes mekerte Lazarus das Fehlen von DLL-Files an.
Kompilierst du ein gtk2 Programm, oder verwendet es die WinApi ?

Das im Anhang, muss bei Windows zwingend eingestellt werden, ansonsten hast du Konflikt mit der WinApi.
Dateianhänge
Bildschirmfoto vom 2025-01-02 15-56-49.png
Bildschirmfoto vom 2025-01-02 15-56-49.png (88.49 KiB) 943 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
juelin
Beiträge: 168
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von juelin »

Hallo Mathias,
habe ich gemacht.
Aber der Fehler ist immer noch der gleiche.
Ich arbeite mit Lazarus 3.6 und FPC 3.2.2 auf einem Windows 10 Rechner.
Wenn Du noch fragen hast, kannst mir gerne eine private Nachricht schreiben.
Ich kann Dir auch meine Telefonnummer geben.
Danke für Deine Hilfe.
Gruß
Jürgen

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

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von Mathias »

Habe alle DLL-Files (16 Stück) die angemekert wurden runtergeladen. (in Verzeichnis lib)
Ich denke, dies ist auch ein Fehler, die DLLs müssen im glichen Ordner sein wie die EXE. Ausser du willst sie nach .../windows/system32 kopieren. Was ich für eine Versuch nicht empfehle.

Noch eine Frage, von wo hast du die DLLs. von si dubiosen Seiten.
Als ich mal GTK2 auf Windows probieren wollte, habe ich gimp installiert, da findet man diese auch.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
juelin
Beiträge: 168
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von juelin »

Hallo Mathias,
danke für die schnelle Antwort.
Ich habe die DLL's sowohl im Ordner mit der EXE und PAS Files stehen als auch in dem Verzeichnis lib.
Kannst Du mir sagen was der Fehlercode 1073741701 bedeutet?
Gruß
Jürgen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1535
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von fliegermichl »

Die zweite Fehlermeldung deutet darauf hin, daß noch eine DLL nicht gefunden wird.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6514
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von af0815 »

Ich würde auch kein GTK Widgetset in das Windows Widgetset hinein mischen.

Wenn, dann sollte man sich das GTK komplett original installieren und das ganze Programm GTK machen Und GTK 2 ist ja bekanntlich Ende Of Life, das sollte man bedenken.

Es gibt Komponenten die sowas ähnliches machen und die Komponenten selbst zeichnen.

Basieren oft auf BGRA Zeichen Routinen und laufen auf jeden Widgetset und sehen dort auch gut und gleich aus.

Gute Programme setzen so Effekte nur spärlich ein. MS-Office ist für mich da eine negative Ausnahme, ist aber auch Geschmacksache.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: Button mit mehr-farbiger Schrift (GTK2)

Beitrag von Mathias »

Ich würde auch kein GTK Widgetset in das Windows Widgetset hinein mischen.
Dies gibt sicher nicht schlaues.
Wenn, dann sollte man sich das GTK komplett original installieren und das ganze Programm GTK machen Und GTK 2 ist ja bekanntlich Ende Of Life, das sollte man bedenken.
Dies wird demnächst sicher ein Problem von Lazarus werden. Mal schauen was da das Lazarus-Team macht.
Ich vermute mit GTK4 wird es sehr schwierig werden, dies in die LCL einzubauen.
Da scheitert es schon mit Form.Left und Form.Top, da dies nativ von GTK4 gar nicht unterstützt wird.
Ich sehe da momentan nur ein Weg über QT oder custom.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten