Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DBNavigator Refresh Ereignis überschreiben und löschen (https://www.delphipraxis.net/82713-dbnavigator-refresh-ereignis-ueberschreiben-und-loeschen.html)

Mahul 18. Dez 2006 17:13


DBNavigator Refresh Ereignis überschreiben und löschen
 
Guten Abend,

ich verwende einen DBNavigator und möchte den Button Refresh mit meinem Code überschreiben. Als erstes habe ich eine BeforeAction erstellt und dort meinen SourceCode geschrieben.
Dumm an der Sache ist, das die Komponente Standartmäßig bei einem Refresh wirklich auch einen DataSource.DataSet.Refresh macht .. was bei mir dazu führt, das es eine Exception auslöst.
Nun reicht mir aber auch ein Requery() von meiner AdoQuery und dazu möchte ich nun den Button der DBNavigator Schaltleiste verwenden OHNE das er anschliessend dann noch das Refresh macht.

Wie bitte kann ich nun das Ereignis zum auslösen des Refresh, das ich vorher ja schon gemacht habe mit der Requery(), aus der Liste löschen. Also das das Ereignis nicht ausgeführt wird wozu es eigentlich anfänglich gedacht war?

dataspider 19. Dez 2006 07:35

Re: DBNavigator Refresh Ereignis überschreiben und löschen
 
Hi,

das geht IMHO so mit dem TdbNavigator nicht.
Der ClickHandler löst BtnClick aus und dort wird unweigerlich das Refresh ausgelöst.
Jetzt kan man zwar von TDBnavigator ableiten und z.B. die virtuelle Methode BtnClick überschreiben.
Aber da gehen die Probleme schon los. In dieser Methode wird das Event onNavClick ausgelöst - ein inherited kann ich nicht verwenden - ruft ja wieder Refresh auf :(

Das ist dann wahrscheinlich auch der Grund, warum beim Proggen solcher Komponenten in der Regel von vorn anfangen und auf eine Ableitung von TdbNavigator verzichtet wird.

Cu, Frank

Mahul 19. Dez 2006 07:51

Re: DBNavigator Refresh Ereignis überschreiben und löschen
 
Guten Morgen Frank,
stimmt alles was Du sagst :(
Aber ich habe das nun so gelöst:

In der DBNavigatorBeforeAction Methode
Code:
 
if button = nbRefresh then
  begin
    versandQuery.Requery();
    abort;
  end;
Das Abort macht eine Stille Exception und das DataSource.DataSet.Refresh wird nicht aufgerufen :)

Einen schönen Tag, Dieter

dataspider 19. Dez 2006 07:57

Re: DBNavigator Refresh Ereignis überschreiben und löschen
 
Hi Dieter,

ja - abort - diese Möglichkeit vergesse ich manchmal... :|

Frank

DP-Maintenance 19. Dez 2006 08:16

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows API / MS.NET Framework API" nach "VCL / WinForms / Controls" verschoben.
Es geht um die VCL


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 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