![]() |
AW: dynamisch erzeugte Forms richtig freigeben
Außerdem kann man das Schließen eines Forms via [X] im OnCloseQuery "abfangen" oder besser gesagt be-/verarbeiten.
MfG Dalai |
AW: dynamisch erzeugte Forms richtig freigeben
Dann eben so, aber nicht mrOK. Und nur das sollte man im Normalfall prüfen.
|
AW: dynamisch erzeugte Forms richtig freigeben
Zitat:
Er wollte doch alle BorderIcons und das Systemmenu verbannen und noch ALT+F4 abfangen. In diesem Falle, wenn er verhindern wollte, dass das [X] angeklickt werden kann, finde ich es praktischer nur das [X] zu deaktivieren, damit alles andere rund um die Titelleiste aktiv bleibt. |
AW: dynamisch erzeugte Forms richtig freigeben
Ich ärger mich aber auch immer, dass man anhand des ModalResults keinen Unterschied erkennen kann, ob der Button "Abbrechen" geklickt wurde, oder nur das Formular geschlossen wurde.
|
AW: dynamisch erzeugte Forms richtig freigeben
Zitat:
|
AW: dynamisch erzeugte Forms richtig freigeben
Zitat:
![]() Hier die Liste aller ModalResult Werte ![]() |
AW: dynamisch erzeugte Forms richtig freigeben
Das ist mir sowieso schon immer schleierhaft, warum der eine Knopf "Abbruch" und der andere "Abbrechen" heißt, ist das denn Windows oder ist das Delphi?
Nachtrag: Ich glaube sogar, dass in den ganz frühen Delphiversionen der Knopf für Kind=bkCancel "Abbruch" und nicht "Abbrechen" hieß, kann mich aber auch irren. |
AW: dynamisch erzeugte Forms richtig freigeben
Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure DoFormCloseButtonEnable(AHandle: HWND; AEnable: Boolean); var lMenue: Integer; begin lMenue := Windows.GetSystemMenu(AHandle, LongBool(False)); if (lMenue <> 0) then begin if (AEnable) then begin Windows.EnableMenuItem(lMenue, SC_CLOSE, MF_BYCOMMAND or MF_SYSMENU); end else begin Windows.EnableMenuItem(lMenue, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED); end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin DoFormCloseButtonEnable(Handle,false); end; procedure TForm1.Button2Click(Sender: TObject); begin DoFormCloseButtonEnable(Handle,true); end; end. |
AW: dynamisch erzeugte Forms richtig freigeben
|
AW: dynamisch erzeugte Forms richtig freigeben
Eine dynamische Dialog-Form gibt man einfach wieder frei:
Delphi-Quellcode:
Wenn in dem Dialog noch weitere Daten erfasst werden sollen, dann übergibt man vor dem Anzeigen diese Daten und holt sich diese im Erfolgsfall wieder ab:
procedure Foo;
var LForm: TForm; begin LForm := TFooDialo.Create(nil); try case LForm.ShowModal of mrOK : begin ... end; mrCancel : begin ... end; ... end; finally LForm.Free; end; end;
Delphi-Quellcode:
und dann so
type
TFooData = class( TPersistent ) public property SomeStr: string; property SomeBool: Boolean; end; type TFooDialog = class( TForm ) Edit1: TEdit; Checkbox1: TCheckBox; private procedure AssignTo( FooData: TFooData ); overload; procedure AssignFrom( FooData: TFooData ); protected procedure AssignTo( Dest: TPersistent ); overload; override; public procedure Assign( Source: TPersistent ); override; end; procedure TFooDialog.AssignTo( FooData: TFooData ); begin FooData.SomeStr := Edit1.Text; FooData.SomeBool := CheckBox1.Checked; end; procedure TFooDialog.AssignFrom( FooData: TFooData ); begin Edit1.Text := FooData.SomeStr; CheckBox1.Checked := FooData.SomeBool; end; procedure TFooDialog.AssignTo( Dest: TPersistent ); begin if Dest is TFooData then AssignTo( TFooData( Dest ) ) else inherited; end; procedure TFooDialog.Assign( Source: TPersistent ); begin if Source is TFooData then AssignFrom( TFooData( Source ) ) else inherited; end;
Delphi-Quellcode:
procedure Foo( FooData: TFooData );
var LDialog: TForm; begin LDialog := TFooDialog.Create( nil ); try LDialog.Assign( FooData ); // Daten an die Form schreiben if LDialog.ShowModal = mrOK then FooData.Assign( LDialog ); // Daten von der Form lesen finally LDialog.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz