Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tastenbestätigung in Delphi (https://www.delphipraxis.net/151358-tastenbestaetigung-delphi.html)

TucTuc 14. Mai 2010 13:51


Tastenbestätigung in Delphi
 
Ich möchte gerne z.B. die "Caption" eines Labels mit einem druck einer voher festgelegten Taste änder müssen.

Also im Prinzip if a gedrückt then caption.label1 := 'tasta a wurde gedrückt'.

Letztendlich soll jedem Tastendruck auch ein Wert zugewiesen werden können.
Soll heißen wenn ich die Taste a Drücke soll das Programm eine Variable z.B. den Wert 20 zuweisen.

If a gedrückt then f:= 20.


Ich habe auch eine Liste gefunden in der die einzelnen Tastenbenennungen aufgeführt sind zum Beispiel für Pfeil auf vk_up. Aber leider weiß ich nicht wie ich dies verwenden kann.

Ich würde mich freuen wenn ihr mir weiterhelfen könntet.

MfG

TucTuc

rollstuhlfahrer 14. Mai 2010 13:57

Re: Tastenbestätigung in Delphi
 
also, da gibt es mehrere Möglichkeiten. Ich empfehle die Ereignisbasierte. Du setzt bei deiner Form KeyPreview auf TRUE. Dann nimmst du das Ereignis OnKeyDown (falls irgendetwas nicht stimmt, ist es OnKeyPressed). Hier bekommst du mitgeteilt, welche Taste gedrückt wurde.
Mit Hilfe von den Keycodes (VK_*) kannst du dann ermitteln, welche Taste gedrückt wurde und dann das entsprechende ausführen. Für Buchstaben sind es Ord('A') bis Ord('Z') (<-- NUR GRO?BUCHSTABEN) und für Zahlen sind es Ord('0') bis Ord('9'). Für alle anderen Tasten sind in der Unit Windows entsprechende Konstanten, die alle mit VK_ beginnen definiert.

Bernhard

Wolfgang Mix 14. Mai 2010 14:05

Re: Tastenbestätigung in Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei die restlichen Tastaturcodes

TucTuc 14. Mai 2010 15:49

Re: Tastenbestätigung in Delphi
 
Schon mal vielen Dank für die Antworten aber wie deklariere ich den Bezeichner keypreview ist doch schließlich keine Variable?!

Könntet ihr mir ein Quellcode Beispiel geben?

Grüße

TucTuc

Kurt56 14. Mai 2010 15:54

Re: Tastenbestätigung in Delphi
 
Wenn du in der FORM die Einstellung=Eigenschaft "Keypreview" auf "true" gestellt hast,
kannst du das Ereignis "OnKeyPress" abfragen.

Dort ist der Tastencode, welcher gedrückt wurde.

(Mit dieser Prozedur kannst du die ENTER-Taste abfragen, um zum nächsten Feld zu springen)



Delphi-Quellcode:
procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
   begin
   if not(ActiveControl is TButton) and
      not(ActiveControl is TMemo) and
      not(ActiveControl is Tdbgrid) and
      not(ActiveControl is Tdbcheckbox) and
      not(ActiveControl is TdbMemo) then
        begin
        Key:=#0;
        Perform(WM_NextDlgCtl,0,0);
        end;
     {#8 : begin
        Key:=#0;
        Perform(WM_NextDlgCtl,1,0);
        end;}
   end;
end;
Die Entertaste =#13 springt zum nächsten Feld.
Die Rücktaste =#8 springt auf das vorherige Feld, ist aber im Beispiel auskommentiert

TucTuc 14. Mai 2010 16:59

Re: Tastenbestätigung in Delphi
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    procedure Label2Click(Sender: TObject);
    procedure Label1Caption;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; Taste: Word;

implementation

procedure Label1Caption;
begin
keypreview:=true;

if (Word = ord ('A')) then label1.caption := ('Taste A wurde gedrückt');
if (Word = ord ('B')) then label1.caption := ('Taste B wurde gedrückt');


end;


end.
{Fehler:

Nicht deklariete Bezeichner:

-keypreview
-label1
-caption }
[b]So hatte ich mir das eigentlich ungefähr gedacht aber warum funktioniert das nicht?

Grüße

TucTuc

[Edit=Matze][delphi]-Tags geschlossen. MfG Matze[/edit]

DeddyH 14. Mai 2010 17:04

Re: Tastenbestätigung in Delphi
 
:shock: sry, aber da ist ja fast alles falsch. Nochmal: setze im Objektinspektor die Eigenschaft KeyPreview Deines Formulars auf true. Wechsle dann auf den Reiter "Ereignisse" und mache einen Doppelklick neben "OnKeyPress". In den automatisch generierten Codeblock trägst Du dann den Code von Kurt56 ein.

rollstuhlfahrer 14. Mai 2010 18:36

Re: Tastenbestätigung in Delphi
 
Ich bin gerade etwas sozial, also habe ich dir deinen Code mal etwas angepasst.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    procedure Label2Click(Sender: TObject);
    procedure Form1OnKeyPress(Sender: TObject; *: Word); // Diese Zeile wird von Delphi automatisch generiert: OI -> Form1 -> Ereignisse -> OnKeyPress -> Doppelklick daneben, wie für alle anderen Ereignisse.
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; // Taste muss keine globals Variable sein. Das Ereignis gibt dir ja immer die Taste.

implementation

procedure TForm1.Label2Click(Sender: TObject)
begin
// k.A. was hier hin kommt. Deine Sache
end;

procedure TForm1.Form1OnKeyPress(Sender: TObject, var Key: Word); // Diese Zeile erzeugt Delphi übrigens auch automatisch
begin
  if (Key = ord ('A')) then label1.caption := ('Taste A wurde gedrückt');
  if (Key = ord ('B')) then label1.caption := ('Taste B wurde gedrückt');
end;

end.
Das mit dem KeyPreview scheinst du etwas falsch verstanden zu haben. OI -> Form -> Eigenschaften -> KeyPreview und dann die Combobox daneben auf TRUE stellen.

Bernhard

TucTuc 14. Mai 2010 19:23

Re: Tastenbestätigung in Delphi
 
Vielen Dank euch allen, muss das wenn ich morgen wieder Daheim bin testen. Und ich wusste nicht das man auch daneben Doppelklicken kann, wenn man draufklickt bekommt ja "Onclick" sprich die Aktion wird nur beim draufklicken ausgeführt, deshalb hatte ich das kompliziert. Man kann immer alles so einfach haben :wall:

Grüße

TucTuc

TucTuc 15. Mai 2010 16:59

Re: Tastenbestätigung in Delphi
 
Delphi-Quellcode:
unit Tastendruck_Testprogramm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    procedure Form1OnKeyPress(Sender: TObject; var Key: Word);
    procedure Label2Click(Sender: TObject);
    procedure A(Sender: TObject; var Key: Char); // Diese Zeile wird von Delphi automatisch generiert: OI -> Form1 -> Ereignisse -> OnKeyPress -> Doppelklick daneben, wie für alle anderen Ereignisse.
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; // Taste muss keine globals Variable sein. Das Ereignis gibt dir ja immer die Taste.

implementation

{$R *.DFM}


procedure TForm1.A(Sender: TObject; var Key: Char);
begin
label1.Caption := 'A was pressed';
end;

procedure TForm1.Form1OnKeyPress(Sender: TObject; var Key: Word); // Diese Zeile erzeugt Delphi übrigens auch automatisch
begin
  label1.caption := 'nichts';
  if (Key = ord ('A')) then label1.caption := ('Taste A wurde gedrückt');
  if (Key = ord ('B')) then label1.caption := ('Taste B wurde gedrückt') else label1.caption := ('Keine Taste gedrückt');
  if (Key = vk_up) then label1.caption := ('Taste pfeil hoch wurde gedrückt');
 
end;

procedure TForm1.Label2Click(Sender: TObject);
begin
label1.Caption := 'label2press';
end;

end.
Also wenn ich auf Label 2 klicke wird in Label 1 "label2pressed" angezeigt, wenn ich A drücke wird "A was pressed" angezeigt, die OnKeyPressed Procedure funktioniert allerdings nicht.
Jetzt bin ich absolut ratlos... :gruebel:
liegt das an der Win32 Anwendung von Delphi 2007 oder woran liegt das nun :'-(

[Edit=Matze][delphi]-Tags geschlossen. MfG Matze[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 Uhr.
Seite 1 von 4  1 23     Letzte »    

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