Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Stringgrid-Zelle, Focus Problem


trm - Mi 13.04.11 19:23
Titel: Stringgrid-Zelle, Focus Problem
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:
{OnKeyPress}
  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] > 0or (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] > 0or (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ß