Delphi-PRAXiS
Seite 1 von 2  1 2      

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr.
Seite 1 von 2  1 2      

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