Hallo,
Ich möchte verhindern, dass ein Modales Fenster unter bestimmten Umständen geschlossen wird.
[EDIT] Das Programm soll aber weiterlaufen, auch wenn das Fenster geöffnet bleibt. [/EDIT]
(Siehe auch
Thread)
Dort Überschrieb ich die Methode ShowModal, diese Lösung ist aber nicht sehr elegant.
Daher untersuchte ich die Methode ShowModal etwas genauer:
in der
Delphi-Quellcode:
function TCustomForm.ShowModal: Integer;
var
...
begin
...
try
Show;
try
...
finally
Hide; // <---------------------------------
end;
finally
...
end;
end;
befindet sich u.a. der Aufruf von Hide, den ich Überschreiben wollte.
Hide ist aber eine statische Methode:
Delphi-Quellcode:
procedure TCustomForm.Hide;
begin
Visible := False;
end;
Wenn ich nun folgendes schreibe
Delphi-Quellcode:
TYPE
TForm3 = CLASS(TForm)
PRIVATE
FDebugMode: Boolean;
PUBLIC
PROCEDURE Hide; // Static, d.h. nicht Override-bar
PROPERTY DebugMode: Boolean READ FDebugMode WRITE FDebugMode;
END;
PROCEDURE TForm3.Hide;
BEGIN
IF DebugMode AND (fsModal IN self.FormState) THEN
ELSE
Visible := False; // Original-Code
END;
wird nach
Delphi-Quellcode:
PROCEDURE TForm1.Button2Click(Sender: TObject);
VAR
aDebugForm : TForm3;
BEGIN
aDebugForm := TForm3.Create(self);
aDebugForm.DebugMode := TRUE;
aDebugForm.Showmodal; // Hier gibt es ein "Hide"
END;
trotzdem TCustomForm.Hide und nicht "mein" Hide aufgerufen,
kann ich das irgendwie verhindern (ausser das ich die VCL patche) ?
p.s. Mir ist klar das dieses Verhalten die Regeln der
OOP befolgt (zumindest jene die mir geläufig sind), aber trotzdem: Es muß doch noch einen anderen Weg geben, oder?