Hallo zusammen,
ich habe im Moment auf der Arbeit ein wenig Zeit für Weiterbildung und habe Kurse in JavaFX auf Udemy belegt. Die Benutzeroberflächen können hier sehr einfach über eine CSS Style Datei farblich angepasst werden. So auch z.B. transparent. Ich habe in Lazarus und Online gesucht, wie man so etwas hinbekommen kann und diese Lösung gefunden.
https://www.youtube.com/watch?v=TQrg5agc1ok
Trozdem das das Video in die Jahre gekommen ist funktioniert es. Allerdings mit viel Rechenleistung kann das Form transparent gezeichnet und die Buttons ausgeschnitten werden.
Gibt es die Möglichkeiten auch bei lazarus mit css zu arbeiten? Oder die Benutzeroberfläche von einem anderen Programm aus zu erstellen und den Quellcode in Pascal zu schreiben. Wonach sollte ich da suchen? Bin auf eure Antworten gespannt.
Gruß Levario
GUI erstellen - Allgemeine Frage
- Levario
- Beiträge: 132
- Registriert: Mo 1. Sep 2014, 14:32
- OS, Lazarus, FPC: Windows 11 Pro , MacOS und Linux Mint (Version 3.4 for Windows 64 bit )
- CPU-Target: 64 Bit
- Wohnort: Deutschland / NRW
GUI erstellen - Allgemeine Frage
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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: GUI erstellen - Allgemeine Frage
Lazarus verwendet die Widgetsets des Betriessystem. Wenn das mit CSS arbeitet dann geht es. Zusätzlich gibt es noch ein paar spezielle Widgetsets für Lazarus wie fpGUI.
Auch transpiling nach Java ist möglich mit den dort verwendeten grafischen Komponenten.
Das Android widgetset kann unter Android mittels Lamw auch verwendet werden.
Ob eines der Widgetsets CSS verwendet kann ich nicht sagen, weil ich nur Win und gtk2 derzeit einsetze.
Auch transpiling nach Java ist möglich mit den dort verwendeten grafischen Komponenten.
Das Android widgetset kann unter Android mittels Lamw auch verwendet werden.
Ob eines der Widgetsets CSS verwendet kann ich nicht sagen, weil ich nur Win und gtk2 derzeit einsetze.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: GUI erstellen - Allgemeine Frage
Hi,
mit SetShape hatte ich auch schon mal herum getestet und hatte mit der Rechenleistung keine Probleme bemerkt. Wenn es dir nur um Buttons geht kannst du mal mein angehängtes Projekt testen. Lief bei mir in Linux und Win10. Lässt sich bei Bedarf sicherlich auch auf andere Controls erweitern.
Viele Grüße
Bernd
mit SetShape hatte ich auch schon mal herum getestet und hatte mit der Rechenleistung keine Probleme bemerkt. Wenn es dir nur um Buttons geht kannst du mal mein angehängtes Projekt testen. Lief bei mir in Linux und Win10. Lässt sich bei Bedarf sicherlich auch auf andere Controls erweitern.
Viele Grüße
Bernd
- Dateianhänge
-
project1.zip
- (126.84 KiB) 64-mal heruntergeladen
Zuletzt geändert von wennerer am So 12. Sep 2021, 11:56, insgesamt 1-mal geändert.
Re: GUI erstellen - Allgemeine Frage
Gtk ab Version 3 verwendet CSS, wenn auch bei weitem nicht so wie ein Browser. Ich denke aber das es außerhalb von Linux nicht mit Lazarus einsetzbar ist, weil es unter jedem OS sein Betriebssystem spezifisches GUI verwendet. Unter Windows die WinForms und unter MacOS, Cocoa (oder was die da gerade nutzen). Die wiederum nutzen kein CSS.
Unter Linux gibt es den UI-Creator Glade. Diesen wiederum nutzt auch die Gnome-IDE, Gnome-Builder. Man kann damit eine GTK-UI erstellen, die wiederum als XML-Datei gespeichert wird. Dort sind alle Infos über die UI gespeichert. Diese wiederum könnte man mit FPC Parsen und eine GTK-Pascal Anwendung schreiben. GTK ist wiederum für Windows, MacOS und Linux zu haben und könnte überall gleich genutzt werden.
Unter Linux gibt es den UI-Creator Glade. Diesen wiederum nutzt auch die Gnome-IDE, Gnome-Builder. Man kann damit eine GTK-UI erstellen, die wiederum als XML-Datei gespeichert wird. Dort sind alle Infos über die UI gespeichert. Diese wiederum könnte man mit FPC Parsen und eine GTK-Pascal Anwendung schreiben. GTK ist wiederum für Windows, MacOS und Linux zu haben und könnte überall gleich genutzt werden.
- Levario
- Beiträge: 132
- Registriert: Mo 1. Sep 2014, 14:32
- OS, Lazarus, FPC: Windows 11 Pro , MacOS und Linux Mint (Version 3.4 for Windows 64 bit )
- CPU-Target: 64 Bit
- Wohnort: Deutschland / NRW
Re: GUI erstellen - Allgemeine Frage
Vielen Dank für die viele Hilfe ich werde es testen. Meine Software ist hauptsächlich für Windows 10, Linux Mint, Linux Ubuntu. Alles weitere nutze ich nicht.
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).
- Levario
- Beiträge: 132
- Registriert: Mo 1. Sep 2014, 14:32
- OS, Lazarus, FPC: Windows 11 Pro , MacOS und Linux Mint (Version 3.4 for Windows 64 bit )
- CPU-Target: 64 Bit
- Wohnort: Deutschland / NRW
Re: GUI erstellen - Allgemeine Frage
Danke es hat funktioniert! Ich versuche es mal an meine Wünsche anzupassen.wennerer hat geschrieben: So 12. Sep 2021, 10:13 Hi,
mit SetShape hatte ich auch schon mal herum getestet und hatte mit der Rechenleistung keine Probleme bemerkt. Wenn es dir nur um Buttons geht kannst du mal mein angehängtes Projekt testen. Lief bei mir in Linux und Win10. Lässt sich bei Bedarf sicherlich auch auf andere Controls erweitern.
SetShape.png
Viele Grüße
Bernd
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: GUI erstellen - Allgemeine Frage
Hi,
freut mich das es geht. Habe eben nochmal mit verschiedenen Lazarus-Versionen unter Win10 und XP getestet. Hat bei mir immer funktioniert.
Habe in den Code noch ein paar Kommentare eingefügt. Ich hoffe das Hilft etwas weiter.
Viele Grüße
Bernd
freut mich das es geht. Habe eben nochmal mit verschiedenen Lazarus-Versionen unter Win10 und XP getestet. Hat bei mir immer funktioniert.
Habe in den Code noch ein paar Kommentare eingefügt. Ich hoffe das Hilft etwas weiter.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ShapeControl(Several : array of TButton);
procedure ButtonsClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
borderstyle := bsnone; //macht die Menüleiste weg
end;
procedure TForm1.FormShow(Sender: TObject); //https://www.lazarusforum.de/viewtopic.php?p=118490#p118490
var Comp : TComponent;
Buttons : array of TButton;
begin
for Comp in Self do //durchläuft die Form und sucht alle Komponenten
begin
if Comp is TButton then //ist die gefundene Komponente ein TButton dann...
begin
setlength(Buttons,length({%H-}Buttons)+1); //legt die Länge des array fest
Buttons[pred(length(Buttons))] := Comp as TButton; //übergibt die Eigenschaften der gefundenen Komponente
end;//is TButton
end;//comp
ShapeControl(Buttons);
end;
procedure TForm1.ShapeControl(Several : array of TButton);
var
ABitmap: TBitmap;
lv : integer;
begin
ABitmap := TBitmap.Create; //https://wiki.lazarus.freepascal.org/BGRABitmap_tutorial_5/de über Masken
ABitmap.Monochrome := True;
ABitmap.Width := Width;
ABitmap.Height := Height;
with ABitmap.Canvas do
begin
Brush.Color := clBlack; // transparent color
FillRect(0, 0,Width, Height);
Brush.Color := clWhite; // mask color
for lv := 0 to pred(length(Several)) do
FillRect(Several[lv].Left,Several[lv].Top,Several[lv].Left+ Several[lv].Width,Several[lv].Top+ Several[lv].Height);
end;
SetShape(ABitmap);
ABitmap.Free;
end;
procedure TForm1.ButtonsClick(Sender: TObject);
begin
showmessage('TestShapeControl');
close;
end;
end.
Bernd