![]() |
TStringGrid - Zelle wie mit zweifachem Mausklick selektieren
Hallo zusammen,
ich habe ein TStringGrid. Wenn ich mit der Pfeiltaste nach oben oder unter navigiere ist die entsprechende Zelle gestrichelt umrahmt. Wenn ich nun mit der Maus auf die Zelle klicke ist der Inhalt markiert. Wenn ich nochmal mit der Maus klicke ist der Cursor zu sehen. Wie kann ich diese beiden Mausklicks programmiertechnisch nachbauen, so das man nicht die Maus benutzen muss. Ich habe mir vorgestellt, wenn man z.B. Strg drückt dies dann ausgelöst (OnKeyPress) wird. Gruss Holger |
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
Wenn Du erreichen möchtest, dass nach der Aktivierung des Editors der Inhalt nicht markiert ist, dann drück doch mal F2, nachdem Du Deine Zelle selektiert hast.
|
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
So habe ich es nun auch gelöst.
Ich löse F2 aus, nachdem die oben oder unten Pfeiltaste gedrückt wird.
Delphi-Quellcode:
Dachte nur da gibt es eine besser Lösung ?
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; end; Gruss Holger |
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
Du kannst auch hier natürlich wieder auf den InplaceEditor zugreifen, und dann mit
Delphi-Quellcode:
die Markierung aufheben.
SelLength := 0;
Mir ist noch nicht ganz klar, was Du überhaupt erreichen möchtest. Wenn Du beim Drücken der Pfeiltaste gleich in den Editmodus schaltest, kannst Du mit den Pfeiltasten ja nicht mehr navigieren. |
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
Hi,
mit
Delphi-Quellcode:
kann ich leider nicht die Markierung aufheben.
SelLength := 0;
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:
Zusätzlich wird durch die Taste "Return" einen neue Zeile freigeschaltet (RowCount + 1), bzw. in die nächste Zeile gesprungen.
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;
Delphi-Quellcode:
Gruss
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; Holger |
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
Moin,
bei der Methode STG1KeyDown solltest if-elseif-else verwenden ;) Und warum lässt du jetzt das editieren mit F2 nicht mehr zu? Lass das doch drin, dann kann auch der normale Benutzer damit besser klar kommen, der halt standardmäßig F2 benutzt um was zu editieren. MfG Fabian |
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
Zitat:
|
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
Das Simulieren von F2 ist für Deinen Zweck in der Tat etwas - naja ;)
Im Prinzip hat der Nutzer mehrere Möglichkeiten. Zwei davon wären: 1. Mittels ENTER in den Editmodus schalten und die Markierung mittels der Pfeiltasten aufheben oder den bestehenden Wert mittels einfachem Losschreiben löschen. 2. Mittels F2 in den Editmodus schalten und dabei gleich die Markierung aufheben. Das sind beides Standardroutinen, die man kennen sollte. Alles andere verschlimmbessert die Usability meiner Meinung nach nur. |
Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti
Zitat:
MfG Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz