AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie onCloseQuery überschreiben?

Ein Thema von Igotcha · begonnen am 5. Apr 2006 · letzter Beitrag vom 5. Apr 2006
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

Wie onCloseQuery überschreiben?

  Alt 5. Apr 2006, 14:21
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Wie onCloseQuery überschreiben?

  Alt 5. Apr 2006, 14:52
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;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Wie onCloseQuery überschreiben?

  Alt 5. Apr 2006, 15:02
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
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Wie onCloseQuery überschreiben?

  Alt 5. Apr 2006, 15:14
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Wie onCloseQuery überschreiben?

  Alt 5. Apr 2006, 15:30
Zitat von Flocke:
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 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