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 |
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 |
Re: Tastenbestätigung in Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei die restlichen Tastaturcodes
|
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 |
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:
Die Entertaste =#13 springt zum nächsten Feld.
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 Rücktaste =#8 springt auf das vorherige Feld, ist aber im Beispiel auskommentiert |
Re: Tastenbestätigung in Delphi
Delphi-Quellcode:
{Fehler:
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. 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] |
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.
|
Re: Tastenbestätigung in Delphi
Ich bin gerade etwas sozial, also habe ich dir deinen Code mal etwas angepasst.
Delphi-Quellcode:
Das mit dem KeyPreview scheinst du etwas falsch verstanden zu haben. OI -> Form -> Eigenschaften -> KeyPreview und dann die Combobox daneben auf TRUE stellen.
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. Bernhard |
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 |
Re: Tastenbestätigung in Delphi
Delphi-Quellcode:
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.
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. 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 01:02 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