Hallo,
in einem Stringgrid unter D7, Win7 habe ich folgenden Fehler:
Im OnKeyPress eines Stringgrids prüfe ich, ob Spalten eine Breite >0 haben. Wenn ja, darf bei einem Druck auf die Enter-Taste die nächste Zelle ausgewählt sein.
Sollte das Zeilenende erreicht sein, wird in die nächste Zeile gesprungen. An dieser Stelle ist jetzt ein komisches Phänomen zu beobachten.
Die Zelle bekommt den Focus im Eingabemodus. Ein Zeichen eintippen (a-z, 0-9 o.ä.) bewirkt, dass das Zeichen eingetragen wird, der InplaceEditor aber den Focus verliert. Somit wird bei dem nächsten Tastenanschlag das aktuelle eine Zeichen überschrieben.
Habe ich da was übersehen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| if Key = #13 then begin if TStringGrid(Sender).Col < TStringGrid(Sender).ColCount - 1 then repeat TStringGrid(Sender).Col := TStringGrid(Sender).Col + 1; until (TStringGrid(Sender).ColWidths[TStringGrid(Sender).Col] > 0) or (TStringGrid(Sender).Col = TStringGrid(Sender).ColCount - 1);
if TStringGrid(Sender).Col >= TStringGrid(Sender).ColCount - 1 then if TStringGrid(Sender).Row < TStringGrid(Sender).RowCount - 1 then begin TStringGrid(Sender).Row := TStringGrid(Sender).Row + 1; TStringGrid(Sender).Col := 1; repeat TStringGrid(Sender).Col := TStringGrid(Sender).Col + 1; until (TStringGrid(Sender).ColWidths[TStringGrid(Sender).Col] > 0) or (TStringGrid(Sender).Col = TStringGrid(Sender).ColCount - 1); end; end; |
Anmerkung: Eine Prüfung auf RowCount habe ich noch nicht drin, kommt, wenn das Problem behoben ist.
Danke und Gruß