Hallo,
es geht wieder zurück zur ursprünglichen Problematik und da hab ich in #7 schon geschrieben
Zitat:
Also weg mit allen BorderIcons und Alt+F4 abfangen, und gut isses. Dann wird auch sauberer Code daraus.
Damit ist es so was von egal, ob ich das Fenster modal anzeige,
wobei in dem Fall vom ursprünglichen Programmierer modale Anzeige aus welchen Gründen auch immer nicht gewollt war, oder ob das Fenster normal angezeigt wird. Und wenn ich das Verhalten öfter brauche, vererbe ich das Fenster einfach. Ich hab noch keine Uni von innen gesehen, und mir das Programmieren selber beigebracht. Meine Kenntnisse sind daher mit Euren nicht vergleichbar, aber das wäre für mich - in diesem speziellen Fall - wiederverwendbarer, flexibler, leicht nachvollziehbarer und lesbarer Code. Wir wissen ja, Code wird öfter gelesen als geschrieben
Delphi-Quellcode:
unit Foo;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls;
type
TFoo =
class(TForm)
ButtonSave: TButton;
ButtonClose: TButton;
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ButtonSaveClick(Sender: TObject);
procedure ButtonCloseClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
implementation
{$R *.dfm}
procedure TFoo.ButtonCloseClick(Sender: TObject);
begin
// wenn Daten verändert, dann User fragen, ob er speichern möchte
// und dann schließen
Close;
end;
procedure TFoo.ButtonSaveClick(Sender: TObject);
begin
// Daten speichern
end;
procedure TFoo.FormClose(Sender: TObject;
var Action: TCloseAction);
begin // Formular freigeben
Action := caFree;
end;
procedure TFoo.FormCreate(Sender: TObject);
begin // Formulareigenschaften vorbereiten
BorderIcons := [];
KeyPreview := true;
end;
procedure TFoo.FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin // Schließen des Fensters mit [Alt] + [F4] verhindern
if ((ssAlt
in Shift)
and (Key = VK_F4))
then Key := $0000;
end;
end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
with TFoo.Create(Application) do ShowModal;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
with TFoo.Create(Application) do Show;
end;