Hi,
mit
SelLength := 0;
kann ich leider nicht die Markierung aufheben.
Was ich damit erreichen will:
Ein Anwender wollte alle Eingaben ausschliesslich mit der Tastatur machen, ohne die Maus benutzen zu müssen.
Er hatte dadurch immer das Problem, das er nach dem Navigieren keine Möglichkeit hatte, den Wert in der Zelle zu verändern, ohne Ihn vorher zu löschen.
Nun habe ich hier erfahren, das es mit "F2" möglich ist in den Editormodus zu schalten. Da habe ich diese Möglichkeit direkt in das Navigieren mit eingebaut.
Es ist auch ohne Probleme möglich aus dem Editormodus weiter zu navigieren.
Hier mal mein kompletter Code:
Delphi-Quellcode:
procedure TForm1.STG1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
If Key = 113 then exit;
if (Key = VK_UP) OR (Key = VK_DOWN) then
begin
keybd_event(113,0,0,0);
end;
if (Key = VK_RIGHT) then
begin
If TMyStringGrid(STG1).InplaceEditor.SelStart = 6 then //Erst nach der 6 Zahl in die nächste Spalte springen
begin
STG1.col := STG1.col + 1;
keybd_event(113,0,0,0);
end;
end;
if (Key = VK_LEFT) then
begin
If TMyStringGrid(STG1).InplaceEditor.SelStart = 0 then //Erst an der vordersten Stelle in die vorherige Spalte springen
begin
STG1.col := STG1.col - 1;
keybd_event(113,0,0,0);
end;
end;
if (Key = 46) then //Taste Entfernen
begin
Form1.BB_entfClick(Sender);
keybd_event(113,0,0,0);
end;
end;
Zusätzlich wird durch die Taste "Return" einen neue Zeile freigeschaltet (RowCount + 1), bzw. in die nächste Zeile gesprungen.
Delphi-Quellcode:
procedure TForm1.STG1KeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then //Return
begin
If STG1.RowCount - 1 = STG1.Row then
begin
STG1.RowCount := STG1.RowCount + 1;
STG1.Col := 1;
STG1.Row := STG1.RowCount - 1;
STG1.cells[1,STG1.Row] := '';
STG1.cells[2,STG1.Row] := '';
STG1.cells[3,STG1.Row] := '';
STG1.cells[4,STG1.Row] := '';
STG1.cells[5,STG1.Row] := '';
STG1.cells[6,STG1.Row] := '';
end
else
begin
STG1.Col := 1;
STG1.Row := STG1.Row + 1;
end;
end;
end;
Gruss
Holger