Einzelnen Beitrag anzeigen

Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#1

In virt. Meth. wird stat. Meth. aufgerufen, diese Verdecken?

  Alt 22. Apr 2003, 07:57
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?
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat