AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung
Thema durchsuchen
Ansicht
Themen-Optionen

Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung

Ein Thema von PASST · begonnen am 6. Feb 2007 · letzter Beitrag vom 7. Feb 2007
Antwort Antwort
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung

  Alt 6. Feb 2007, 16:36
Datenbank: dbase • Version: 3 • Zugriff über: Apollo VCL
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:
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;
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.

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:
procedure TFBestellungen.DBNavigator1BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  if (Button = nbEdit) then Button := nbCancel;
end;
Was mache ich hier falsch?


Gruß,
Peter
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung

  Alt 6. Feb 2007, 16:52
Du manipulierst den DBNavigator an der falschen Stelle.
Das Event OnDrawColumnCell ist dazu völlig ungeeignet.
Du musst das Event [Tdataset].AfterScroll verwenden.
Andreas
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Grid.OnDrawColumnCell reagiert manchmal mit Verzögerung

  Alt 7. Feb 2007, 09:17
danke, das wars.
  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 10:53 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