Form BorderStyle ohne "Schließen" RundButton

Form BorderStyle ohne "Schließen" RundButton

Beitragvon DL3AD » 20. Jan 2020, 12:36 Form BorderStyle ohne "Schließen" RundButton

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
DL3AD
 
Beiträge: 432
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Debian Buster (L 2.0.2) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 21. Jan 2020, 13:01 Re: Form BorderStyle ohne "Schließen" RundButton

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.
theo
 
Beiträge: 8239
Registriert: 11. Sep 2006, 18:01

Beitragvon DL3AD » 21. Jan 2020, 14:53 Re: Form BorderStyle ohne "Schließen" RundButton

Hallo theo,
ja, dass scheint leider so zu sein - habe nun eine andere Lösung für mein spezifisches Problem gefunden.
DL3AD
 
Beiträge: 432
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Debian Buster (L 2.0.2) | 
CPU-Target: 64Bit
Nach oben

Beitragvon six1 » 21. Jan 2020, 16:38 Re: Form BorderStyle ohne "Schließen" RundButton

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
six1
 
Beiträge: 140
Registriert: 1. Jul 2010, 18:01

Beitragvon Warf » 21. Jan 2020, 16:53 Re: Form BorderStyle ohne "Schließen" RundButton

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
Warf
 
Beiträge: 1330
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: MacOS | Win 10 | Linux | 
CPU-Target: x86_64
Nach oben

Beitragvon DL3AD » 21. Jan 2020, 17:08 Re: Form BorderStyle ohne "Schließen" RundButton

Hallo Warf,
hmm gut der Runde Btn re oben ist nun ohne Funktion - wie kann ich nun programmtechnisch das Form schließen ?
DL3AD
 
Beiträge: 432
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Debian Buster (L 2.0.2) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 21. Jan 2020, 17:16 Re: Form BorderStyle ohne "Schließen" RundButton

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.
wp_xyz
 
Beiträge: 3071
Registriert: 8. Apr 2011, 08:01

Beitragvon theo » 21. Jan 2020, 17:37 Re: Form BorderStyle ohne "Schließen" RundButton

Eigentlich ist dafür auch OnCloseQuery gedacht. Dort kann man CanClose auf False setzen.
theo
 
Beiträge: 8239
Registriert: 11. Sep 2006, 18:01

Beitragvon Warf » 21. Jan 2020, 18:57 Re: Form BorderStyle ohne "Schließen" RundButton

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;
Warf
 
Beiträge: 1330
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: MacOS | Win 10 | Linux | 
CPU-Target: x86_64
Nach oben

• Themenende •

Zurück zu Linux



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried