Einzelnen Beitrag anzeigen

s-off
(Gast)

n/a Beiträge
 
#9

Re: im stringgrid eingabe mit pfeiltaste bestätigen

  Alt 12. Mai 2006, 08:24
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.
  Mit Zitat antworten Zitat