AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastenbestätigung in Delphi

Ein Thema von TucTuc · begonnen am 14. Mai 2010 · letzter Beitrag vom 24. Jun 2010
Antwort Antwort
TucTuc

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

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
TucTuc

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

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 13:03
So es funktioniert ich war nur zu doof bzw. zu schwer von kapische...
Wie auch immer nocheinmal zusammengefasst für all die aderen die was ähnliches versuchen:

-Ziel war eine "Unsichtbare Tastenabfrage"

-Man klickt auf das Formular, so das es den Fokus hat
links im Objektinspektor müssten nun die Eigenschaften von TForm1 oder wie ihr es auch immer genannt habt stehen
=> dort klickt ihr auf Ereignisse/Aktions je nach Delphiversion und scrollt ein Stück herunter:

Dort findet ihr:

OnKeyDown Taste := wurde runter gedrückt
OnKeyPress Taste := wird gedrückt gehalten
OnKeyUP Taste := wird losgelassen

OnKeyPress hat als Wertebereich lediglich ein paar Asci-codes und unterscheidet dementsprechen auch nicht das Num_Pad von den Zahlen über den Buchstaben für meine Zwecke zu wenig verschiedene Tasten...

OnKeyUp und Down haben den selben Wertebereich und können im Prinzip jede Taste der Tastatur unterscheiden

einfach neben eins der 3 Events doppelklicken und es wird automatisch eine Prozedur in der Unit erstellt und nun könnt ihr mit den Tastencodes aus der Hilfe spieln

kleiner Auszug:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
      turnscore := 0;
//Inner-Bull Ring1:
      if key = vk_end then label1.caption := 'end';
      if key = vk_delete then turnscore := 50;
//Outer-Bull Ring2:
      if key = vk_delete then turnscore := 25;
//innen-einfach Ring3:
      if key = vk_delete then turnscore := 1;
      if key = vk_delete then turnscore := 2;
      if key = vk_delete then turnscore := 3;
      if key = vk_delete then turnscore := 4;
      if key = vk_delete then turnscore := 5;
      if key = vk_delete then turnscore := 6;
      if key = vk_delete then turnscore := 7;
      if key = vk_delete then turnscore := 8;
      if key = vk_delete then turnscore := 9;
      if key = vk_delete then turnscore := 10;
      if key = vk_delete then turnscore := 11;
      if key = vk_delete then turnscore := 12;
      if key = vk_delete then turnscore := 13;
      if key = vk_delete then turnscore := 14;
      if key = vk_delete then turnscore := 15;
      if key = vk_delete then turnscore := 16;
      if key = vk_delete then turnscore := 17;
      if key = vk_delete then turnscore := 18;
      if key = vk_delete then turnscore := 19;
      if key = vk_delete then turnscore := 20;

wen wundert was das sein soll nach dem ich bei meinem letzten projekt 3 pics zerschossen habe habe ich mir überlegt das Funkmodul einer kaputten logitechtastatur zu missbrauchen meiner meinung nach einfach wie genial jeder ausgelesene wert wird zu einem buchstaben oder buchstabensalat und kann dann zurückübersetzt werden und das auch noch kabellos...

viel spaß damit hoffe ist ne anregung für andere

viele grüße

TucTuc

PS: ja ich weiss groß kleinschreibung und rechtschreibung aber das wir überbewertet

Geändert von TucTuc (23. Jun 2010 um 20:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 17:45
Zitat:
wen wundert was das sein soll nach dem ich bei meinem letzten projekt 3 pics zerschossen habe habe ich mir überlegt das Funkmodul einer kaputten logitechtastatur zu missbrauchen meiner meinung nach einfach wie genial jeder ausgelesene wert wird zu einem buchstaben oder buchstabensalat und kann dann zurückübersetzt werden und das auch noch kabellos...
Irgendwie verstehe ich genau NICHTS von dem Satz der scheinbar nicht mal ein Satz ist.

Warum verwendest du in deinem Quelltext nicht
Delphi-Quellcode:
begin
  [...]
end;
?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 17:51
Kompiliert dieser Code fehlerfrei?

Konstrukte wie dieses if key = vk_delete then turnscore := 50 and ring := 1; habe ich noch nie gesehen.

Oder meinst du

Delphi-Quellcode:
if key = vk_delete then
begin
  turnscore := 50;
  ring := 1;
end;
Wobei dein ganzer Code chaotisch aussieht und für mich überhaupt keinen Sinn ergibt.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

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

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 17:52
if key = vk_delete then turnscore := 2 and ring := 3;
Also wenn du da keinen Syntaxfehler bekommst, glaub ich, dass deine Syntaxprüfung irgendwie defekt ist. Der Compiler müsste hier mecjern, weil er ein ":=" statt einem ";" gefunden hat. Er führt nämlich nicht bei Anweisung1 and Anweisung2 beide Anweisungen aus, sondern der Zahlenprüfer springt ein und erkennt ein turnscore := 2 and ring mit unbestimmtem Ergebnis. Dann kommt der Compiler an die stelle mit dem := 3; und wird meckern.
Wie also mein Vorredner schon gesagt hat: Um begin[...]end wirst du nicht drum rum kommen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!

Geändert von rollstuhlfahrer (23. Jun 2010 um 17:52 Uhr) Grund: Beginn im Englischen hat nur 1 n
  Mit Zitat antworten Zitat
TucTuc

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

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 20:47
man seid ihr kritisch sollte lediglich ne erklärung sein was ich mit meinem programm bezwecke
ja und ihr habt recht das mit then...and...; hab ich auch festgestellt
verzweifle gerade an der lösung möchte nocht jedes mal begin...end
hat da wer ne ahnung?
Zitat:
wen wundert was das sein soll nach dem ich bei meinem letzten projekt 3 pics zerschossen habe habe ich mir überlegt das Funkmodul einer kaputten logitechtastatur zu missbrauchen meiner meinung nach einfach wie genial jeder ausgelesene wert wird zu einem buchstaben oder buchstabensalat und kann dann zurückübersetzt werden und das auch noch kabellos...
so für unsere syntax liebhaber: ( )
also das sollte ja wie gesagt den zweck des programms erklären:
ich habe schlechte erfahrungen mit dem programieren von pics gemacht
also habe ich ein logitech funkmodul aus einer alten tastatur ausgebaut
meine auswerte einheit daran angeschlossen und bekomme jetzt die jeweiligen 1/0 werte jedes kanals als buchstaben
den buchstaben ordne ich dann den punktwert und die ringordnung zu
ich lese damit eine elektrische dartscheibe aus

=> ich hoffe ich habe alle klarheiten beseitigt
  Mit Zitat antworten Zitat
TucTuc

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

AW: Tastenbestätigung in Delphi

  Alt 24. Jun 2010, 19:23
nun der fuktionierende code:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
      turnscore := 0;
      ring := 0;
//Inner-Bull Ring1:
      if key = 112 then
      begin
        turnscore := 50 ; ring := 1;
      end;
//Outer-Bull Ring2:
      if key = 113 then
      begin
         turnscore := 25 ; ring := 2;
      end;
//innen-einfach Ring3:
      if key = 114 then
      begin
      turnscore := 1 ; ring := 3;
      end;
      if key = 115 then
      begin
      turnscore := 2 ; ring := 3;
      end;
      if key = 116 then
      begin
      turnscore := 3 ; ring := 3;
      end;
      if key = 117 then
      begin
      turnscore := 4 ; ring := 3;
      end;
      if key = 118 then
      begin
      turnscore := 5 ; ring := 3;
      end;
      if key = 119 then
      begin
      turnscore := 6 ; ring := 3;
      end;
      if key = 120 then
      begin
      turnscore := 7 ; ring := 3;
      end;
      if key = 121 then
      begin
      turnscore := 8 ; ring := 3;
      end;
      if key = vk_F11 then
      begin
      turnscore := 9 ; ring := 3;
      end;
      if key = vk_F12 then
      begin
      turnscore := 10 ; ring := 3;
      end;
      if key = 220 then
      begin
      turnscore := 11 ; ring := 3;
      end;
      if key = 49 then
      begin
      turnscore := 12 ; ring := 3;
      end;
      if key = 50 then
      begin
      turnscore := 13 ; ring := 3;
      end;
      if key = 51 then
      begin
      turnscore := 14 ; ring := 3;
      end;
      if key = 52 then
      begin
      turnscore := 15 ; ring := 3;
      end;
      if key = 53 then
      begin
      turnscore := 16 ; ring := 3;
      end;
      if key = 54 then
      begin
      turnscore := 17 ; ring := 3;
      end;
      if key = 55 then
      begin
      turnscore := 18 ; ring := 3;
      end;
      if key = 56 then
      begin
      turnscore := 19 ; ring := 3;
      end;
      if key = 57 then
      begin
      turnscore := 20 ; ring := 3;
      end;
//dreifach Ring4:
      if key = 48 then
      begin
      turnscore := 1 ; ring := 4;
      end;
      if key = 219 then
      begin
      turnscore := 2 ; ring := 4;
      end;
      if key = 221 then
      begin
      turnscore := 3 ; ring := 4;
      end;
      if key = 8 then
      begin
      turnscore := 4 ; ring := 4;
      end;
      if key = 45 then
      begin
      turnscore := 5 ; ring := 4;
      end;
      if key = 36 then
      begin
      turnscore := 6 ; ring := 4;
      end;
      if key = 33 then
      begin
      turnscore := 7 ; ring := 4;
      end;
      if key = 111 then
      begin
      turnscore := 8 ; ring := 4;
      end;
      if key = 106 then
      begin
      turnscore := 9 ; ring := 4;
      end;
      if key = 109 then
      begin
      turnscore := 10 ; ring := 4;
      end;
      if key = 81 then
      begin
      turnscore := 11 ; ring := 4;
      end;
      if key = 87 then
      begin
      turnscore := 12 ; ring := 4;
      end;
      if key = 69 then
      begin
      turnscore := 13 ; ring := 4;
      end;
      if key = 82 then
      begin
      turnscore := 14 ; ring := 4;
      end;
      if key = 84 then
      begin
      turnscore := 15 ; ring := 4;
      end;
      if key = 90 then
      begin
      turnscore := 16 ; ring := 4;
      end;
      if key = 85 then
      begin
      turnscore := 17 ; ring := 4;
      end;
      if key = 73 then
      begin
      turnscore := 18 ; ring := 4;
      end;
      if key = 79 then
      begin
      turnscore := 19 ; ring := 4;
      end;
      if key = 80 then
      begin
      turnscore := 20 ; ring := 4;
      end;
//außen-einfach Ring5:
      if key = 186 then
      begin
      turnscore := 1 ; ring := 5;
      end;
      if key = 187 then
      begin
      turnscore := 2 ; ring := 5;
      end;
      if key = 46 then
      begin
      turnscore := 3 ; ring := 5;
      end;
      if key = 35 then
      begin
      turnscore := 4 ; ring := 5;
      end;
      if key = 34 then
      begin
      turnscore := 5 ; ring := 5;
      end;
      if key = 36 then
      begin
      turnscore := 6 ; ring := 5;
      end;
      if key = 38 then
      begin
      turnscore := 7 ; ring := 5;
      end;
      if key = 33 then
      begin
      turnscore := 8 ; ring := 5;
      end;
      if key = 107 then
      begin
      turnscore := 9 ; ring := 5;
      end;
      if key = 65 then
      begin
      turnscore := 10 ; ring := 5;
      end;
      if key = 83 then
      begin
      turnscore := 11 ; ring := 5;
      end;
      if key = 68 then
      begin
      turnscore := 12 ; ring := 5;
      end;
      if key = 70 then
      begin
      turnscore := 13 ; ring := 5;
      end;
      if key = 71 then
      begin
      turnscore := 14 ; ring := 5;
      end;
      if key = 72 then
      begin
      turnscore := 15 ; ring := 5;
      end;
      if key = 74 then
      begin
      turnscore := 16 ; ring := 5;
      end;
      if key = 75 then
      begin
      turnscore := 17 ; ring := 5;
      end;
      if key = 76 then
      begin
      turnscore := 18 ; ring := 5;
      end;
      if key = 192 then
      begin
      turnscore := 19 ; ring := 5;
      end;
      if key = 222 then
      begin
      turnscore := 20 ; ring := 5;
      end;
//doppel Ring6:
      if key = 191 then
      begin
      turnscore := 1 ; ring := 6;
      end;
      if key = 37 then
      begin
      turnscore := 2 ; ring := 6;
      end;
      if key = 12 then
      begin
      turnscore := 3 ; ring := 6;
      end;
      if key = 39 then
      begin
      turnscore := 4 ; ring := 6;
      end;
      if key = 226 then
      begin
      turnscore := 5 ; ring := 6;
      end;
      if key = 89 then
      begin
      turnscore := 6 ; ring := 6;
      end;
      if key = 88 then
      begin
      turnscore := 7 ; ring := 6;
      end;
      if key = 67 then
      begin
      turnscore := 8 ; ring := 6;
      end;
      if key = 86 then
      begin
      turnscore := 9 ; ring := 6;
      end;
      if key = 66 then
      begin
      turnscore := 10 ; ring := 6;
      end;
      if key = 78 then
      begin
      turnscore := 11 ; ring := 6;
      end;
      if key = 77 then
      begin
      turnscore := 12 ; ring := 6;
      end;
      if key = 188 then
      begin
      turnscore := 13 ; ring := 6;
      end;
      if key = 190 then
      begin
      turnscore := 14 ; ring := 6;
      end;
      if key = 189 then
      begin
      turnscore := 15 ; ring := 6;
      end;
      if key = 35 then
      begin
      turnscore := 16 ; ring := 6;
      end;
      if key = 40 then
      begin
      turnscore := 17 ; ring := 6;
      end;
      if key = 34 then
      begin
      turnscore := 18 ; ring := 6;
      end;
      if key = 96 then
      begin
      turnscore := 19 ; ring := 6;
      end;
      if key = 110 then
      begin
      turnscore := 20 ; ring := 6;
      end;

    begin
          if turnscore > 0 then label1.Caption := FloatTostr(turnscore);
          if ring > 0 then label2.Caption := FloatTostr(ring);
          
    end;
end;
nun ein neues Problem:

ich habe festgestellt das numlock aktiviert sein muss um die numlock tasten benutzen zu können
ja ich weiss wer hätte es gedacht aber gibt es einen weg die numlocktasten dauerhaft zu aktivieren?
  Mit Zitat antworten Zitat
TucTuc

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

AW: Tastenbestätigung in Delphi

  Alt 24. Jun 2010, 19:29
hab das problem schon selbst gelöst:

taste tastenadresse Sodertastenadresse
num1 35 VK_NUMPAD1
num2 40 VK_NUMPAD2
num3 34 VK_NUMPAD3
num 0 96 VK_NUMPAD0
num, 110 VK_DECIMAL

die abfragen mit vk_ wie vk_esc oder eben vk_numpad1 werden offensichtlich direkt unabhängig von shift, numlock... abgefragt

die komplette tabelle für mein programm:

Wert Zeichen Code alternative
Mitte
50 F1 112 VK_F1
Ring
25 F2 113 VK_F2
Einzel-Innen
1 F3 114 VK_F3
2 F4 115 VK_F4
3 F5 116 VK_F5
4 F6 117 VK_F6
5 F7 118 VK_F7
6 F8 119 VK_F8
7 F9 120 VK_F9
8 F10 121 VK_F10
9 F11 VK_F11
10 F12 VK_F12
11 ^ 220
12 1 49
13 2 50
14 3 51
15 4 52
16 5 53
17 6 54
18 7 55
19 8 56
20 9 57
Trippel
2 0 48
4 ß 219
6 ´ 221
8 löschen 8 VK_CLEAR
10 einfg 45 VK_INSERT
12 pos1 36 VK_HOME
14 bild auf 33 VK_PRIOR
16 num/ 111 VK_DIVIDE
18 num* 106 VK_MULTIPLY
20 num- 109 VK_SUBTRACT
22 q 81
24 w 87
26 e 69
28 r 82
30 t 84
32 z 90
34 u 85
36 i 73
38 o 79
40 p 80
Einzel-Außen
1 ü 186
2 + 187
3 entf 46 VK_DELETE
4 ende 35 VK_END Taste
5 bild ab 34 VK_NEXT
6 num7 36 VK_NUMPAD7
7 num8 38 VK_NUMPAD8
8 num9 33 VK_NUMPAD9
9 num+ 107 VK_ADD
10 a 65
11 s 83
12 d 68
13 f 70
14 g 71
15 h 72
16 j 74
17 k 75
18 l 76
19 ö 192
20 ä 222
Doppel
3 # 191
6 num4 37 VK_NUMPAD4
9 num5 12 VK_NUMPAD5
12 num6 39 VK_NUMPAD6
15 < 226
18 y 89
21 x 88
24 c 67
27 v 86
30 b 66
33 n 78
36 m 77
39 , 188
42 . 190
45 - 189
48 num1 35 VK_NUMPAD1
51 num2 40 VK_NUMPAD2
54 num3 34 VK_NUMPAD3
57 num 0 96 VK_NUMPAD0
60 num, 110 VK_DECIMAL

fail enter 13 VK_RETURN
Abbrechen ESC 27 VK_ESCAPE
Pause Pause 19 VK_PAUSE
fail leer 32

muss das jetzt mal alles im quellcode änder ärgerlich hab extra über showkey alle ausgelesen...

ich weiss unübersichtlich wenn ichs einfüge sieht es noch wie ne tabelle aus wenn ich auf speichern klicke...

Geändert von TucTuc (24. Jun 2010 um 19:42 Uhr)
  Mit Zitat antworten Zitat
TucTuc

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

AW: Tastenbestätigung in Delphi

  Alt 24. Jun 2010, 20:11
num 8, 4, 5, 6, 2 funktionieren trotzdem nicht
irgentwer ne ahnung ich verzweifle...
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

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

AW: Tastenbestätigung in Delphi

  Alt 24. Jun 2010, 19:31
hier kannst du den Numlock anschalten: http://www.delphi-treff.de/tipps/sys...eds-ansteuern/

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:58 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