GUI erstellen - Allgemeine Frage

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
Levario
Beiträge: 101
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 3.0.0 FPC 3.2.2)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

GUI erstellen - Allgemeine Frage

Beitrag von Levario »

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
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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

Beitrag von af0815 »

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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wennerer
Beiträge: 507
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

Beitrag von wennerer »

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
SetShape.png (113.79 KiB) 1526 mal betrachtet
Viele Grüße
Bernd
Dateianhänge
project1.zip
(126.84 KiB) 49-mal heruntergeladen
Zuletzt geändert von wennerer am So 12. Sep 2021, 11:56, insgesamt 1-mal geändert.

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

Re: GUI erstellen - Allgemeine Frage

Beitrag von hum4n0id3 »

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.

Benutzeravatar
Levario
Beiträge: 101
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 3.0.0 FPC 3.2.2)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: GUI erstellen - Allgemeine Frage

Beitrag von Levario »

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 :).

Benutzeravatar
Levario
Beiträge: 101
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 3.0.0 FPC 3.2.2)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: GUI erstellen - Allgemeine Frage

Beitrag von Levario »

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
Danke es hat funktioniert! Ich versuche es mal an meine Wünsche anzupassen.
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

wennerer
Beiträge: 507
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

Beitrag von wennerer »

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.

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.
Viele Grüße
Bernd

Antworten