Einzelnen Beitrag anzeigen

Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Fehler im DBGrid, Hilfe bei der Verifizierung benötigt.

  Alt 22. Okt 2008, 23:41
Ich habe mir jetzt mal die Quellen von D7 und TD vorgenommen.
Die Unterschiede sind nicht sehr groß. Zumindest was die dbgrids.pas angeht. Ob aber hier tatsächlich der Fehler liegt, das liegt ausserhalb meiner Zeit, dieses zu ermitteln.


So habe ich mir einen Workaround ausgeheckt.

Zuerst bin ich auf die neue Property OnMouseActivate gestossen, womit man das Setzen des Fokus eines Steuerelements unterbinden kann.
Z. B. in dieser Form:
Delphi-Quellcode:
procedure TForm1.DBGrid1MouseActivate(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y, HitTest: Integer;
  var MouseActivate: TMouseActivate);
begin
  if Table1.State in [dsEdit, dsInsert] then
    if HitTest = HTCLIENT then
      MouseActivate := maNoActivateAndEat;
end;
Dies ist aber sehr restriktiv, da man auch nicht mehr zu einem anderen Datensatz springen kann. Ich stellte mir schon das Telefon vor, wie es heissklingelt, weil die Kunden nicht mehr wie gewohnt ins Grid klicken können...
Eigentlich wollte ich aber nur verhindern, dass man nicht mehr darunter klicken kann. Das wird aber leider nicht unterschieden, ob man auf einen DS oder den Freiraum klickt.


Bin dann letzten Endes doch zu der Überlegung gekommen, dass es vielleicht doch am sinnvollsten ist, den Datensatz zu speichern, wenn das Grid angeklickt wird.
Delphi-Quellcode:
procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
  if Table1.State in [dsEdit, dsInsert] then
    Table1.Post;
end;
procedure TForm1.Table1AfterEdit(DataSet: TDataSet);
begin
  DBEdit1.SetFocus;
end;
Das TableAfterEdit ist wichtig, da GridEnter ja nur ausgelöst wird, wenn man auch wirklich das Grid betritt.


Das ist meines Erachtens nicht die schönste Lösung, aber immer noch besser wie verlorene Daten.


Mal gucken, was Borland so als nächstes auf Lager bereithält. Hatte schon überlegt, auf Delphi 2009 upzugraden, ich glaube, damit warte ich noch ein wenig.



Gruß
Michael
  Mit Zitat antworten Zitat