Einzelnen Beitrag anzeigen

HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 26. Feb 2010, 08:11
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
  Mit Zitat antworten Zitat