AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TStringGrid - Zelle wie mit zweifachem Mausklick selektieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringGrid - Zelle wie mit zweifachem Mausklick selektieren

Ein Thema von HolgerCW · begonnen am 25. Feb 2010 · letzter Beitrag vom 26. Feb 2010
Antwort Antwort
HolgerCW

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

TStringGrid - Zelle wie mit zweifachem Mausklick selektieren

  Alt 25. Feb 2010, 10:41
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
  Mit Zitat antworten Zitat
s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#2

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 25. Feb 2010, 14:45
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.
Gruß
s-off
  Mit Zitat antworten Zitat
HolgerCW

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

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 25. Feb 2010, 15:03
So habe ich es nun auch gelöst.

Ich löse F2 aus, nachdem die oben oder unten Pfeiltaste gedrückt wird.

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;
 
end;
Dachte nur da gibt es eine besser Lösung ?

Gruss

Holger
  Mit Zitat antworten Zitat
s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 25. Feb 2010, 15:28
Du kannst auch hier natürlich wieder auf den InplaceEditor zugreifen, und dann mit SelLength := 0; die Markierung aufheben.
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.
Gruß
s-off
  Mit Zitat antworten Zitat
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, 07: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
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 26. Feb 2010, 08:09
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 26. Feb 2010, 08:14
Zitat von xZise:
Moin,
bei der Methode STG1KeyDown solltest if-elseif-else verwenden
Oder gleich case
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#8

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 26. Feb 2010, 08:26
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.
Gruß
s-off
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: TStringGrid - Zelle wie mit zweifachem Mausklick selekti

  Alt 26. Feb 2010, 08:37
Zitat von DeddyH:
Zitat von xZise:
Moin,
bei der Methode STG1KeyDown solltest if-elseif-else verwenden
Oder gleich case
Stimmt, da bietet sich ein case wirklich sehr an!

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz