Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie onCloseQuery überschreiben? (https://www.delphipraxis.net/66854-wie-onclosequery-ueberschreiben.html)

Igotcha 5. Apr 2006 13:21


Wie onCloseQuery überschreiben?
 
Hallo zusammen,

ich versuche gerade onCloseQuery einer von TForm abgeleiteten Klasse zu überschreiben, aber irgendwie klappt das nicht so richtig:

Delphi-Quellcode:
function CloseQuery(Sender: TObject; var CanClose: Boolean):boolean; override;

=> "Deklaration von CloseQuery" unterscheidet sich von vorheriger Deklaration"
Das nimmt mir der Compiler zwar ab, funktioniert aber auch nicht, da dieses onCloseQuery nie angesprungen wird:

Delphi-Quellcode:
function CloseQuery(Sender: TObject; var CanClose: Boolean):boolean; reintroduce;

function TModularForm.CloseQuery(Sender: TObject;
  var CanClose: Boolean): boolean;
begin
    If Sender is TModularForm then
    begin
      SHowMessage('OK');
    end;
end;
In der Anwendung werden mittels TModularForm MDI-Children erstellt. Ich möchte in diesem Ereignis abprüfen, ob ich eine Leiste mit den TModularForm-MDI-Children ein-oder ausblende. Gibt es kein MDI-Child von TModularForm mehr, soll die Leiste weg.

Bisher hatte ich in meiner abgeleiteten Klasse folgendes:

Delphi-Quellcode:
function CloseQuery: Boolean; Override;

function TModularForm.CloseQuery: Boolean;
begin
   if xForm.MDIChildCount = 1 then
   begin
      xForm.TBXDock3.Visible:=false;
      xForm.TBXItem18.Visible:=false;
   end
   else
    begin
      xForm.TBXDock3.Visible:=true;
      xForm.TBXItem18.Visible:=true;
    end;
    result:=true;
end;
Das Problem hierbei ist, dass dieses Ereignis auch Dialogen angesprochen wird, die ebenfalls von der Klasse TModularForm sind. Ich brauche also den Sender um zu überprüfen, ob "Sender = MDIChild", damit dieses Event nur angesprochen wird, wenn ein MDI-Child geschlossen wird.

Viele Grüße
Igotcha

Bernhard Geyer 5. Apr 2006 13:52

Re: Wie onCloseQuery überschreiben?
 
1, Wenn Du eine Methode überschreibst mußt du die gleiche Methodensignatur verwenden:

2, Wenn der Code der eigentlich von der Methode ausgeführt wurde immer noch ausgeführt werden soll muß du mittels inherited den Basiscode ausführen:

Delphi-Quellcode:
function TModularForm.CloseQuery: Boolean;
begin
   if xForm.MDIChildCount = 1 then
   begin
      xForm.TBXDock3.Visible:=false;
      xForm.TBXItem18.Visible:=false;
   end
   else
    begin
      xForm.TBXDock3.Visible:=true;
      xForm.TBXItem18.Visible:=true;
    end;

  inherited CloseQuery;
end;

freak4fun 5. Apr 2006 14:02

Re: Wie onCloseQuery überschreiben?
 
Delphi-Quellcode:
with (xForm) do
  begin
    TBXDock3.Visible := not (MDIChildCount = 1);
    TBXItem18.Visible := TBXDock3.Visible;
  end;
läuft auf das Gleiche hinaus wie ;)

Delphi-Quellcode:
if xForm.MDIChildCount = 1 then
   begin
      xForm.TBXDock3.Visible:=false;
      xForm.TBXItem18.Visible:=false;
   end
   else
    begin
      xForm.TBXDock3.Visible:=true;
      xForm.TBXItem18.Visible:=true;
    end;
MfG
freak

Flocke 5. Apr 2006 14:14

Re: Wie onCloseQuery überschreiben?
 
Zitat:

Zitat von Igotcha
Ich brauche also den Sender um zu überprüfen, ob "Sender = MDIChild", damit dieses Event nur angesprochen wird, wenn ein MDI-Child geschlossen wird.

Brauchst du nicht, denn in diesem Fall ist "Self" ja der Sender. Prüfe einfach "FormStyle = fsMDIChild", dann weißt du ob's ein MDI-Fenster ist.

Igotcha 5. Apr 2006 14:30

Re: Wie onCloseQuery überschreiben?
 
Zitat:

Zitat von Flocke
Zitat:

Zitat von Igotcha
Ich brauche also den Sender um zu überprüfen, ob "Sender = MDIChild", damit dieses Event nur angesprochen wird, wenn ein MDI-Child geschlossen wird.

Brauchst du nicht, denn in diesem Fall ist "Self" ja der Sender. Prüfe einfach "FormStyle = fsMDIChild", dann weißt du ob's ein MDI-Fenster ist.

DANG!

Ja klar :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz