![]() |
Datenbank: dbase • Version: 3 • Zugriff über: Apollo VCL
Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung
Hi NG.
Delphi 4 (update 3), Apollo VCL 5.1 Ich lasse mir in einem Grid gefilterte Records einer dbase Tabelle anzeigen - genauer gesagt: gefiltert mittels Scope. Ich habe einige DBEdits und einen DBNavigator mit der Tabelle verknüpft, um die Records bearbeiten zu können. Der User wählt sich aus dem Grid den Record aus, den er bearbeiten möchte. Per Klick auf nbEdit des DBNavigators werden die DBEdits enabled, so dass der User dort auch etwas ändern kann und anschließend mit nbPost oder nbCancel des DBNavigators dies abschließt. Soweit nichts besonderes. Ich möchte allerdings, dass der User nur bestimmte Records ändern kann. Dazu soll bei einem bestimmten Wert im Record der DBNavigator einfach disabled werden. Dazu verwende ich das OnDrawColumnCell-Ereignis des (BFC_)DBGrids.
Delphi-Quellcode:
Leider funktioniert das nicht ganz so wie gewünscht. Bewege ich mich kreuz und quer per Maus oder beliebig hoch und runter per Pfeiltasten durch das Grid, so passiert es, dass das Enablen bzw. Disablen erst nach dem zweiten Tastendruck geschaltet wird. Damit meine ich: Liegen zwei unterschiedliche Datensätze (fürs enablen bzw. disablen) neben einander und wechsle ich per Tastendruck (Mausklick) von dem 'Enable'-Satz in den benachbarten 'Disable'-Satz, so bleibt der DBNavigator noch enabled. Erst wenn ich mit einem zweiten Tastendruck mich nach rechts oder links in der gleichen 'Disable'-Zeile bewege (oder in eine nächste 'Disable'-Zeile wechsle), wird der DBNavigator disabled.
procedure TFBestellungen.BFC_DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin with (Sender as TBFC_DBGrid) do begin if FData.tWAZU.fieldbyname('status').asboolean then DBNavigator1.enabled := false else DBNavigator1.enabled := true; DefaultDrawColumnCell(rect, DataCol, Column, State); end; end; Was mache ich falsch? Wahrscheinlich geht es mit einem anderen Ansatz einfacher. Und zwar, indem ich nicht das OnDrawColumnCell-Ereignis des Grids verwende, sondern mit den DBNavigator-Ereignissen BeforeAction und OnClick arbeiten. Nur leider habe ich dazu, noch keine Lösung gefunden. Meine Idee ist, dass ich im BeforeAction-Ereignis, die geklickten Knopf ändere. Leider funktioniert das aber nicht und das OnClick-Ereignis wird trotzdem abgearbeitet.
Delphi-Quellcode:
Was mache ich hier falsch?
procedure TFBestellungen.DBNavigator1BeforeAction(Sender: TObject;
Button: TNavigateBtn); begin if (Button = nbEdit) then Button := nbCancel; end; Gruß, Peter |
Re: Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung
Du manipulierst den DBNavigator an der falschen Stelle.
Das Event OnDrawColumnCell ist dazu völlig ungeeignet. Du musst das Event [Tdataset].AfterScroll verwenden. |
Re: Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung
danke, das wars.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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