Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi KeyDown: welches Zeichen steht hinter "Key" (https://www.delphipraxis.net/84622-keydown-welches-zeichen-steht-hinter-key.html)

Helmi 19. Jan 2007 00:56


KeyDown: welches Zeichen steht hinter "Key"
 
Hallo,

bei OnKeyDown wird das gedrückte Zeichen in " Key: Word" angegeben.

Nur, wie komm ich im OnKeyDown an dieses Zeichen dran:

Mit "Chr(Key)" komm ich zwar dran, nur sind die daraus resulitierenden Zeichen immer groß geschrieben

Was mach ich falsch?

Robert Marquardt 19. Jan 2007 04:43

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Das Verstaendnis der Vrogaenge ist falsch. Taste ist nicht Buchstabe.

Sunlight7 19. Jan 2007 06:06

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Moin!

So könnte man das machen:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   Case Char(Key) of
      'A'..'Z': If (ssShift in Shift) then Label1.Caption:=Char(Key) else Label1.Caption:=LowerCase(Char(Key));
      '0'..'9': Label1.Caption:=LowerCase(Char(Key));
      '+', '-', '*', '/': Label1.Caption:=Char(Key);
      else Label1.Caption:='Nicht dabei :(';
   end;
end;
Über Sinn und Unsinn sag' ich lieber nix :mrgreen:

Grüßle!

Helmi 19. Jan 2007 08:44

Re: KeyDown: welches Zeichen steht hinter "Key"
 
mmh,

dann hab ich ein Problem,

ich würd ja gerne OnKeyPress verwenden - nur dort erhalt ich z. B. die Entf-Taste nicht

marabu 19. Jan 2007 09:08

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Hallo,

wenn es dir um die Entf-Taste geht:

Delphi-Quellcode:
procedure TDemoForm.StringGridKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  with Sender as TStringGrid do
  begin
    case Key of
      VK_DELETE: Cells[Col, Row] := '';
      else Exit;
    end;
    Key := 0;
  end;
end;
Freundliche Grüße

Helmi 19. Jan 2007 10:12

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Hallo,

ich möcht mein Problem nochmal schildern - denn ich denke, dass ich es nicht wirklich richtig rübergebracht habe:

wie in meinem anderen Thread hervorgeht, will ich eine Zelle beim Tippen weiterspringen.

Das funktioniert auch bestens.

Dies mach ich im OnKeyPress so:
Delphi-Quellcode:
procedure TForm2.StringGridKeyPress(Sender: TObject; var Key: Char);
var
  Zeile : Integer;
  Spalte: Integer;

begin
  with StringGrid do
    begin
      //
      Zeile  := Selection.Top;
      Spalte := Selection.Left;
     
      If (Key in [#13]) then
        exit;

      If Key = #8 then
        begin
          If (Pred(Spalte) > 0) then
            Spalte := Spalte - 1
          else
            If (Spalte = 1) and (Zeile > 1) then
              begin
                Zeile  := Zeile - 1;
                Spalte := 40;
              end;

          StringGrid.Cells[Spalte, Zeile] := '';
          StringGrid.Col                 := Spalte;

          StringGrid.Row                 := Zeile;

          exit;
        end;

      If (Zeile > 0) and (Spalte > 0) then
        begin
          StringGrid.Cells[Spalte, Zeile] := Key;

          If Spalte < 40 then
            StringGrid.Col               := Spalte + 1
          else
            If Zeile <= 3 then
              begin
                StringGrid.Col           := 1;
                StringGrid.Row           := Zeile + 1;
              end;
        end;
    end;
end;
Soweit so gut, es wird also jede Taste angenommen bis auf die Entertaste (#13).
Nur, soll neben der Entertaste auch auf die Entf-Taste, Tab-Taste geprüft werden, ob diese gedrückt wurden, wenn ja, dann die Procedure beenden.

Leider gibt Key in OnKeyPress für die entf und Tab-Taste nichts zurück, deshalb kann ich nicht einfach darauf prüfen.

Es würde im OnKeyDown funktionieren, nur da hab ich das Problem, dass Key kein Char ist und ich deshalb nicht weiss, welches Zeichen gedrückt wurde.
Ich brauch dies ja hier:
Delphi-Quellcode:
      If (Zeile > 0) and (Spalte > 0) then
        begin
          StringGrid.Cells[Spalte, Zeile] := Key; //<----

marabu 19. Jan 2007 10:22

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Ich dachte, du würdest in meinem Code erkennen, dass du auf virtual keys testen musst: VK_DELETE, VK_TAB, ...

QuickAndDirty 19. Jan 2007 10:35

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Ausser dem must du den Code Aufteilen.
Alle Steuerzeichen holst du dir aus dem Onkeydown
on alle anderen aus dem KeyPress

Helmi 19. Jan 2007 10:38

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Zitat:

Zitat von marabu
Ich dachte, du würdest in meinem Code erkennen, dass du auf virtual keys testen musst: VK_DELETE, VK_TAB, ...

Hallo Marabu,
das hab ich schon erkannt - nur leider löst dies nicht mein Problem.
Ich kann natürlich mit den viertual keys auf die "Sondertasten" prüfen, nur muss ich irgendwann auch mal das Key in die Zelle schreiben, nämlich hier:

Delphi-Quellcode:
If (Zeile > 0) and (Spalte > 0) then
        begin
          StringGrid.Cells[Spalte, Zeile] := Key; //<----
In OnKeyPress ist Key ein Char - also kein Problem, da wird das in die Zeile geschrieben, das ich auch gedrückt habe.
Nur im In KeyDown ist Key ein Word und kein Char und da funktioniert das nicht mehr wie im OnKeyPress.
Mit chr(Key) erhalt ich nur Schwachsinn.

Anders gesagt:
In OnKeyPress erhalt ich das Key als Char aber keine virtual keys
Im OnKeyDown erhalt ich zwar die virtual keys, aber Key nicht als char sondern als word

Muetze1 19. Jan 2007 11:00

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Zitat:

Zitat von Helmi
Mit chr(Key) erhalt ich nur Schwachsinn.

Was logisch ist, oder kennst du ein Symbol für die TAB oder DEL Taste? Es gibt keine - daher kannst du es schlecht als Zeichen ausgeben. Du könntest dir aber statt dessen einen String in das StringGrid eintragen (DEL, ESC, TAB, ...), weil das nunmal Steuercodes/-tasten sind. Es gibt nunmal keine Übersetzung in Zeichen.

Schreib doch mal lieber, warum du überhaupt das Zeichen in das StringGrid packen willst. Was ist der Sinn dahinter? Und warum trennst du nicht die Daten von der Oberfläche?

passsy 19. Jan 2007 11:01

Re: KeyDown: welches Zeichen steht hinter "Key"
 
versuchs ma mit getkeystate

Delphi-Quellcode:
  begin
   if GetKeyState($41) < 0 then
    begin
    [...]
    end;
   end;
if GetKeyState(%41) >= 0 then
  begin
  [...]
  end;
musst halt nen timer verwnden

Helmi 19. Jan 2007 11:17

Re: KeyDown: welches Zeichen steht hinter "Key"
 
Zitat:

Zitat von marabu
Ich dachte, du würdest in meinem Code erkennen, dass du auf virtual keys testen musst: VK_DELETE, VK_TAB, ...

Sorry, I´m so sorry, Marabu!

Jetzt hab ich es erst verstanden, was du damit meintest!

Ich reagier auf die Sondertasten im OnKeyDown und führ dort auch gleich den Code aus, was diese Sondertaste machen soll, alles andere lass ich im OnKeyPress!

So hab ich es gemacht und so funktioniert es auch!

Sorry nochmals - irgendwie stand ich auf einer sehr großen Leitung :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 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-2025 by Thomas Breitkreuz