Ja klar kannst Du das machen, nur hat es den gleichen Effekt ^^. Du musst Dir im klaren sein, dass, wenn Du beim OnKeyDown Event der Pfeil-nach-rects-Taste etwas machst, die Navigation innerhalb der Zelle ggf. nicht mehr funktioniert.
Du könntest es auch so machen, dass nur nach rechts gesprungen wird, wenn zusätzlich die STRG-Taste gedrückt ist.
Was vielleicht auch noch möglich, aber nicht ganz so einfach wäre, ist, die Caret-Position innerhalb der Zelle abzufragen, und nur eine Spalte weiter zu springen, wenn sich der Caret am Ende des Inhalts der Zelle befindet.
Edit: probier es mal so:
Beim Druck der Pfeil-nach-rechts-Taste wird nur in die nächste Spalte gewechselt, sofern sich der Caret am Ende des Zelltextes befindet. Ansonsten wird normal innerhalb der Zelle navigiert.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 =
class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1KeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
type
TMyGrid =
class(TStringGrid);
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetCaretPosition(Grid: TStringGrid): Integer;
begin
with TMyGrid(Grid)
do
begin
Result := InplaceEditor.SelStart;
end;
end;
procedure TForm1.StringGrid1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if (Key = VK_RIGHT)
and
(GetCaretPosition(StringGrid1) = Length(TMyGrid(StringGrid1).InplaceEditor.EditText))
then begin
StringGrid1.Col := StringGrid1.Col + 1;
end;
end;
end.