AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Tastenbestätigung in Delphi

Ein Thema von TucTuc · begonnen am 14. Mai 2010 · letzter Beitrag vom 24. Jun 2010
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#1

Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 13:51
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
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 13:57
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 14:05
Anbei die restlichen Tastaturcodes
Angehängte Dateien
Dateityp: txt vkkonst2_133.txt (5,7 KB, 30x aufgerufen)
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#4

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 15:49
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
  Mit Zitat antworten Zitat
Benutzerbild von Kurt56
Kurt56

Registriert seit: 6. Apr 2005
Ort: Wedemark
47 Beiträge
 
Delphi XE8 Professional
 
#5

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 15:54
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
Kurt
  Mit Zitat antworten Zitat
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#6

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 16:59
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]

Geändert von Matze (25. Jun 2010 um 05:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 17:04
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.
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
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 18:36
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#9

Re: Tastenbestätigung in Delphi

  Alt 14. Mai 2010, 19:23
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

Grüße

TucTuc
  Mit Zitat antworten Zitat
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#10

Re: Tastenbestätigung in Delphi

  Alt 15. Mai 2010, 16:59
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...
liegt das an der Win32 Anwendung von Delphi 2007 oder woran liegt das nun :'-(

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

Geändert von Matze (25. Jun 2010 um 05:13 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:27 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