Form BorderStyle ohne "Schließen" RundButton

Antworten
DL3AD
Beiträge: 434
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Form BorderStyle ohne "Schließen" RundButton

Beitrag von DL3AD »

Hallo,
um ein Form ohne Icons fester Größe zu erstellen habe ich unter Windows einfach bsSingle ausgewählt und die BorderIcons deaktiviert
und schon hatte ich ein Form fester Größe und ohne Icons min,max,schließen.
Unter Debian KDE gelingt es mir nicht das Schließen Icon aus der Kopfzeile zu entfernen.

Wie komme ich zu Ziel ?

Gruß Frank

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

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von theo »

Da bewegt man sich im Bereich der Linux Fenstermanager und die bestimmen, was geht und was nicht.
Du kannst bsNone einstellen, dann kommt aber gar nichts mehr, außer das blanke Window.

DL3AD
Beiträge: 434
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von DL3AD »

Hallo theo,
ja, dass scheint leider so zu sein - habe nun eine andere Lösung für mein spezifisches Problem gefunden.

Benutzeravatar
six1
Beiträge: 206
Registriert: Do 1. Jul 2010, 19:01

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von six1 »

kenne ich das Problem :)

Code: Alles auswählen

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
    abort;
end;
 


Damit verhinderst du ein Schließen. Den Button oben rechts verhindert dies natürlich nicht, nur er ist dadurch ohne Funktion.
Gruß, Michael

Warf
Beiträge: 1474
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von Warf »

six1 hat geschrieben:kenne ich das Problem :)

Damit verhinderst du ein Schließen. Den Button oben rechts verhindert dies natürlich nicht, nur er ist dadurch ohne Funktion.


Wenn sollte man schon die CloseAction benutzen, dafür ist die ja da. Eine Stille Exception zu werfen ist extrem unsauber

Code: Alles auswählen

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
    CloseAction := caNone;
end;
 


Je nach dem was man machen will, nehme ich entweder (wenn es eine hauptäschlich stilistische entscheidung ist) einfach BorderStyle := bsNone und implementiere die fehlende Funktionalität selber, oder wenn das schießen verhindert werden soll dann über die CloseAction. Aber CloseAction verhindert auch Alt+F4. Nur so nebenbei, wenn man das nicht verhindern will sollte man es nicht so machen

DL3AD
Beiträge: 434
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von DL3AD »

Hallo Warf,
hmm gut der Runde Btn re oben ist nun ohne Funktion - wie kann ich nun programmtechnisch das Form schließen ?

wp_xyz
Beiträge: 3302
Registriert: Fr 8. Apr 2011, 09:01

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von wp_xyz »

Was ist denn das Problem, wenn der Schließen-Button in der Titelzeile vorhanden ist? Das ist ein allgemein übliches Element einer graphischen Benutzeroberflächen. Wenn das fehlt, werden die User vor den Kopf gestoßen.

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

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von theo »

Eigentlich ist dafür auch OnCloseQuery gedacht. Dort kann man CanClose auf False setzen.

Warf
Beiträge: 1474
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Form BorderStyle ohne "Schließen" RundButton

Beitrag von Warf »

DL3AD hat geschrieben:Hallo Warf,
hmm gut der Runde Btn re oben ist nun ohne Funktion - wie kann ich nun programmtechnisch das Form schließen ?

Du kannst z.B. nen boolean setzen, der beim FormShow auf false gesetzt wird, und wenn du programatisch schließen willst auf True, dann hast du sowas:

Code: Alles auswählen

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  if FCanClose then
    CloseAction := caFree // oder caHide, wenn man die Form nochmal braucht
  else
    CloseAction := caNone;
end;

Antworten