Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 13.04.11 20:23 
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?

ausblenden 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ß

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)