Autor |
Beitrag |
1012178
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 07:26
Hallo. Habe da ein Problem:
Och möchte gerne in Pascal (Delphi) eine Taste auf einen Buttpon legen. Also wenn ich z.B. auf die "1" drücke soll irgend ein Button ausgelöst werden. Soll irgendwie mit onkeydown oder KeyPress funktionieren, ich weiß aber nicht wie...
Wäre fein, wenn mir einer ein Stück Quellcode geben könnte, da ich absolut nicht weiß, wie ich das umsetzen soll.
Danke!
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 23.10.02 08:43
Morgen,
du könntest es wie folgt machen: Du setzt als erstes die Eigenschaft KeyPreview der Form auf True. Dann benutzt Du das OnKeyPress Event mit folgenden Code:
Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin If Key = '1' Then Button1.Click; end; |
Gruß
TINO
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 09:45
Sieht ja ganz gut aus. Schonmal Danke!!
Nur habe ich folgendes Problem:
Wie kann ich der Variablen Key durch Tastendruck einen Wert zuweisen? Wenn ich jetzt auf die 1 drücke, passiert nämlich genau gar nichts :-/
Habe schon versucht da diese Virtuellen Tastencodes reinzusetzen und die dazugehörigen Nummern aber irgnedwie klappt das nicht...
Oder habe ich da nen Fehler gemacht?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Eins: TButton; Zwei: TButton; Drei: TButton; Vier: TButton; Fuenf: TButton; Sechs: TButton; Sieben: TButton; Acht: TButton; Neun: TButton; Null: TButton; Clear: TButton; addition: TButton; Subtraktion: TButton; Multiplikation: TButton; Division: TButton; istgleich: TButton; Anzeige: TEdit; Undo: TButton; Ende: TButton; Vorzeichenwechsel: TButton; Dezimaltrennzeichen: TButton; Label1: TLabel; procedure EinsClick(Sender: TObject); procedure ZweiClick(Sender: TObject); procedure DreiClick(Sender: TObject); procedure VierClick(Sender: TObject); procedure FuenfClick(Sender: TObject); procedure SechsClick(Sender: TObject); procedure SiebenClick(Sender: TObject); procedure AchtClick(Sender: TObject); procedure NeunClick(Sender: TObject); procedure NullClick(Sender: TObject); procedure ClearClick(Sender: TObject); procedure additionClick(Sender: TObject); procedure SubtraktionClick(Sender: TObject); procedure MultiplikationClick(Sender: TObject); procedure DivisionClick(Sender: TObject); procedure istgleichClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure EndeClick(Sender: TObject); procedure UndoClick(Sender: TObject); procedure DezimaltrennzeichenClick(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char);
private { Private declarations } public { Public declarations } end;
var Form1: TForm1; auszufuehrende_operation: 0..4; Zahl_1:real; Zahl_2:real; Anzeigeninhalt:string;
implementation
{$R *.dfm}
{**Zahlenbuttons Anfang**}
procedure TForm1.NullClick(Sender: TObject); begin if (Anzeige.text='0') then {keine Aktion} else Anzeige.text:=Anzeige.Text+'0'; end;
procedure TForm1.EinsClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='1' else Anzeige.text:=Anzeige.Text+'1'; end;
procedure TForm1.ZweiClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='2' else Anzeige.text:=Anzeige.Text+'2'; end;
procedure TForm1.DreiClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='3' else Anzeige.text:=Anzeige.Text+'3'; end;
procedure TForm1.VierClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='4' else Anzeige.text:=Anzeige.Text+'4'; end;
procedure TForm1.FuenfClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='5' else Anzeige.text:=Anzeige.Text+'5'; end;
procedure TForm1.SechsClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='6' else Anzeige.text:=Anzeige.Text+'6'; end;
procedure TForm1.SiebenClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='7' else Anzeige.text:=Anzeige.Text+'7'; end;
procedure TForm1.AchtClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='8' else Anzeige.text:=Anzeige.Text+'8'; end;
procedure TForm1.NeunClick(Sender: TObject); begin if (Anzeige.text='0') then Anzeige.text:='9' else Anzeige.text:=Anzeige.Text+'9'; end;
{**Zahlenbuttons Ende**}
{**Rechenoperationen Anfang**}
procedure addieren (var x,y:real; var z:string); begin case auszufuehrende_operation of 0:begin x:=strtofloat(z); z:='0'; auszufuehrende_operation:=1; end;
1:begin y:=strtofloat(z); x:=x+y; z:='0'; auszufuehrende_operation:=1; end;
2:begin y:=strtofloat(z); x:=x-y; z:='0'; auszufuehrende_operation:=1; end;
3:begin y:=strtofloat(z); x:=x*y; z:='0'; auszufuehrende_operation:=1; end;
4:begin y:=strtofloat(z); x:=x / y; z:='0'; auszufuehrende_operation:=1; end; end; end;
procedure subtrahieren (var x,y:real; var z:string); begin case auszufuehrende_operation of
0:begin x:=strtofloat(z); z:='0'; auszufuehrende_operation:=2; end;
1:begin y:=strtofloat(z); x:=x+y; z:='0'; auszufuehrende_operation:=2; end;
2:begin y:=strtofloat(z); x:=x-y; z:='0'; auszufuehrende_operation:=2; end;
3:begin y:=strtofloat(z); x:=x*y; z:='0'; auszufuehrende_operation:=2; end;
4:begin y:=strtofloat(z); x:=x / y; z:='0'; auszufuehrende_operation:=2; end; end; end;
procedure multiplitzieren (var x,y:real; var z:string); begin case auszufuehrende_operation of
0:begin x:=strtofloat(z); z:='0'; auszufuehrende_operation:=3; end;
1:begin y:=strtofloat(z); x:=x+y; z:='0'; auszufuehrende_operation:=3; end;
2:begin y:=strtofloat(z); x:=x-y; z:='0'; auszufuehrende_operation:=3; end;
3:begin y:=strtofloat(z); x:=x*y; z:='0'; auszufuehrende_operation:=3; end;
4:begin y:=strtofloat(z); x:=x / y; z:='0'; auszufuehrende_operation:=3; end; end; end;
procedure dividieren (var x,y:real; var z:string); begin case auszufuehrende_operation of
0:begin x:=strtofloat(z); z:='0'; auszufuehrende_operation:=4; end;
1:begin y:=strtofloat(z); x:=x+y; z:='0'; auszufuehrende_operation:=4; end;
2:begin y:=strtofloat(z); x:=x-y; z:='0'; auszufuehrende_operation:=4; end;
3:begin y:=strtofloat(z); x:=x*y; z:='0'; auszufuehrende_operation:=4; end;
4:begin y:=strtofloat(z); x:=x / y; z:='0'; auszufuehrende_operation:=4; end; end; end;
procedure berechnen (var x,y:real; var z:string); begin case auszufuehrende_operation of
0:begin x:=strtofloat(z); z:=floattostr(x); auszufuehrende_operation:=0; end;
1:begin y:=strtofloat(z); x:=x+y; z:=floattostr(x); auszufuehrende_operation:=0; end;
2:begin y:=strtofloat(z); x:=x-y; z:=floattostr(x); auszufuehrende_operation:=0; end;
3:begin y:=strtofloat(z); x:=x*y; z:=floattostr(x); auszufuehrende_operation:=0; end;
4:begin y:=strtofloat(z); x:=x / y; z:=floattostr(x); auszufuehrende_operation:=0; end; end; end;
procedure TForm1.AdditionClick(Sender: TObject); begin Anzeigeninhalt:=Anzeige.text; addieren(Zahl_1,Zahl_2,Anzeigeninhalt); Anzeige.text:=Anzeigeninhalt; end;
procedure TForm1.SubtraktionClick(Sender: TObject); begin Anzeigeninhalt:=Anzeige.text; subtrahieren(Zahl_1,Zahl_2,Anzeigeninhalt); Anzeige.text:=Anzeigeninhalt; end;
procedure TForm1.MultiplikationClick(Sender: TObject); begin Anzeigeninhalt:=Anzeige.text; multiplitzieren(Zahl_1,Zahl_2,Anzeigeninhalt); Anzeige.text:=Anzeigeninhalt; end;
procedure TForm1.DivisionClick(Sender: TObject); begin Anzeigeninhalt:=Anzeige.text; dividieren(Zahl_1,Zahl_2,Anzeigeninhalt); Anzeige.text:=Anzeigeninhalt; end;
procedure TForm1.istgleichClick(Sender: TObject); begin Anzeigeninhalt:=Anzeige.text; berechnen(Zahl_1,Zahl_2,Anzeigeninhalt); Anzeige.text:=Anzeigeninhalt; end;
{**Rechenoperationen Ende**}
{**Allgemeines Anfang**}
{Clear} procedure TForm1.ClearClick(Sender: TObject); begin Anzeige.text:='0'; auszufuehrende_operation:=0; Zahl_1:=0; Zahl_2:=0; Anzeigeninhalt:=' '; end;
{Fenstereigenschaften} procedure TForm1.FormCreate(Sender: TObject); begin ShowWindow(Application.Handle, SW_HIDE); Form1.Height:=300; Form1.Width:=290; end;
{Schließen} procedure TForm1.EndeClick(Sender: TObject); begin close; end;
{Rückgängig (Zahl aus Fenster löschen)} procedure TForm1.UndoClick(Sender: TObject); begin Anzeige.text:='0'; end;
{Komma} procedure TForm1.DezimaltrennzeichenClick(Sender: TObject); begin Anzeige.text:=Anzeige.Text+'.'; end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin If Key = '1' Then eins.click; end;
end. |
Zuletzt bearbeitet von 1012178 am Mi 23.10.02 13:15, insgesamt 1-mal bearbeitet
|
|
wwerner
      
Beiträge: 185
|
Verfasst: Mi 23.10.02 10:26
Tip: Schau die die Antwort von Tino noch mal an und untersuche dann deinen Quellcode, was du geschrieben hast. Siehst du den Unterschied?
_________________ Gruß
Wolfgang
----------
zu hause ist es doch am schönsten
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 13:17
Wenn du auf die "1"(die ich nochmal flott reineditiert habe) anspielst, die ich vergessen habe, nach ein paar Versuchen, daran lag's irgendwie nicht. Auch wenn ich die 1 einfüge passiert nichts....
|
|
wwerner
      
Beiträge: 185
|
Verfasst: Mi 23.10.02 14:22
Frage1: Wie hast du das FormKeyPress eingebaut?
Frage2: Hast du mal den Debugger benutzt?
_________________ Gruß
Wolfgang
----------
zu hause ist es doch am schönsten
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 15:49
Irgendwie stehe ich auf dem Schlauch.
Und Debugger, was ist das, bzw. wie benutzt man den? Sowas wird uns in der Schule nicht beigebracht, weil unsere Lehrer selbst keine Ahnung haben... 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 23.10.02 16:01
Debugger:
F7: Einzelschritte, Delphi hält bei jeder Anweisung an
F4: Delphi hält in der Zeile bei der Ausführung an, in der der Cursor steht, weiter mit Einzelschritten oder F9 zum weiteren Ausführen des Codes
Strg+F8: Prozedur, Funktion überspringen
Und wenn der Debugger anhält, kannst du den Inhalt von Variablen überprüfen, in dem du den Cursor über die Variable hältst.
Hast du Form1.KeyPreview auf TRUE gestellt?
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 16:18
Danke! Ja, im Objektinspector steht KeyPreview auf true.
Wenn ich jetzt mit dem Debugger einzelne Schritte mache erreiche ich trotzdem nie die Keypress prozedur. erhalte aber auch vom Programm keine Fehlermeldung, dass irgendetwas nicht stimmt. Also das Programm läuft, aber wenn ich auf die Tasten drücke muckst sich nix 
|
|
wieczo
      
Beiträge: 48
D6 Pers, TP 7.0
|
Verfasst: Mi 23.10.02 17:17
Hallo,
jetzt mal einen Tip mit dem Holzhammer:
Wo ist bei dir ein TButton?
Heißt der TButton bei dir Button1 wie in Tinos Code?
Und jetzt noch mal überlegen.
Viel Spaß Thomas 
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 17:30
Bin ich eigentlich ganz bescheuert oder warum verstehe ich euch nicht?
@wieczo: Nein. Mein Button heißt nicht "Button1" sondern "eins". Also stimmt es doch wenn ich statt "Button1" einfach "eins" einsetze!?
Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin If Key = '1' Then eins.click; end; |
|
|
wieczo
      
Beiträge: 48
D6 Pers, TP 7.0
|
Verfasst: Mi 23.10.02 17:42
Tadaaa, you've got it man!!! 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 23.10.02 17:51
1012178 hat folgendes geschrieben: |
Bin ich eigentlich ganz bescheuert oder warum verstehe ich euch nicht?
|
Ich kapiere es auch nicht.
@wieczo: aber das ist doch das, was er die ganze Zeit dort stehen hat! Oder habe ich da was übersehen oder habe ich mein Hirn in der Bahn liegen lassen?
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 17:52
@ wieczo: Ja nu! Wenn du aber mal in meinem 1. Quelltextpost geguckt hast, dann steht das so da drin und trotzdem gehts net.
Edit: Hätte ich ein wenig gewartet, dann hätte ich mit Peter L. ja nur anschließen brauchen... 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 23.10.02 17:55
Eigentlich würde ich das nicht fragen, aber ich sehe keine andere Fehlerquelle mehr: hast Du vielleicht vergessen, dem OnKeyPress-Ereignis die betreffende Prozedur zuzuweisen?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 18:03
Durchaus möglich. Weißt du wie das geht? Habe von Pascal nämlich irgendwie nicht so richtig den Durchblick.
Einfach mal sagen was ich wo hin schreiben muss. Habe nämlich so langsam keine Lust mehr...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 23.10.02 18:06
Hi!
Im Object Inspector von Delphi kannst Du ja die Eigenschaften der Form anzeigen. Aber auch die Ereignisse (andere "Lasche"). Dort gibt es das Ereignis "OnKeyPress". In der Drop-Down-Liste wählst Du dann die Prozedur aus, die für dieses Ereignis zuständig sein soll, in diesem Fall also die Prozedur, die Tino gepostet und Du abgewandelt hast!
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 18:16
|
|
1012178 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 23.10.02 18:23
Aber die Enter-Taste kann ich nicht so einfach da integrieren, oder gibbet da ne Spezialnummer für?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 23.10.02 18:31
Doch, das geht dann so:
Quelltext 1: 2: 3: 4:
| procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if key = #13 then ShowMessage('Hallo'); end; |
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|