![]() |
Re: Taschenrechner über Tastatur bedienen
Nee, das will ich nicht machen.
Es soll ja so eine Art Easteregg (vom Programmierer versteckte Funktion) sein. Also sollen nur eingeweihte diese Funktion finden. Deshalb würde ich das gerne mit Tastenkombinationen lösen. Gruß Stefan |
Re: Taschenrechner über Tastatur bedienen
Hallo Stefan,
EasterEggs kannst du über die KeyPreview der Form realisieren. Dazu deklarierst du eine private Form-Variable EasterEgg als String, fügst jedes eingegebene Zeichen hinzu und löschst alles, sobald eine falsche Taste gedrückt wurde. Sobald ein von dir erwarteter Text in der Varaible steht kannst du die zugehörige Aktion starten. Freundliche Grüße |
Re: Taschenrechner über Tastatur bedienen
Erstmal danke für deine Antwort, aber ich hab Probleme mit der Umsetzung.
Hier mein bisheriger Quellcode:
Code:
Hoffe ihr findet meinen Fehler und danke schonmal im Voraus.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
var kombi:string; begin kombi:=''; if key='1' then button1.click; if key='2' then button2.click; if key='3' then button3.click; if key='4' then button4.click; if key='5' then button5.click; if key='6' then button6.click; if key='7' then button7.click; if key='8' then button8.click; if key='9' then button9.click; if key='0' then button10.click; if (key=',') or (key='.') then button11.click; if key='n' then button12.click; if key=chr(13) then button13.click; if key='-' then button14.click; if key='+' then button15.click; if key='*' then button16.click; if key='/' then button17.click; if key=chr(8) then button19.click; if key='h' then kombi:='h'; if (kombi='h') and (key='e') then kombi:='he'; <==== an der Stelle hapert es wohl :wall: if kombi='he' then showmessage('huhu') else kombi:=''; end; Gruß Stefan |
Re: Taschenrechner über Tastatur bedienen
Hallo Stefan,
schau dir mal ![]() Die IF-Anweisungen könntest du übrigens durch eine ![]() ![]() Gruß Hawkeye |
Re: Taschenrechner über Tastatur bedienen
Hallo Hawkeye219,
vielen Dank für die Seite, ist alles super erklärt. Aber wie mach ich das denn mit einer Case-Anweisung, das geht doch nur mit ordinalen Typen, oder? Gruß Stefan |
Re: Taschenrechner über Tastatur bedienen
Zitat:
Delphi-Quellcode:
Der Vorteil der CASE-Lösung besteht darin, daß nur ein Zweig durchlaufen wird - bei deinem Code werden immer alle IF-Anweisungen abgearbeitet. Ein CASE kann die ebenfalls mögliche (aber unübersichtliche) Schachtelung von "IF..THEN..ELSE IF"-Strukturen ersetzen.
case key of
'1': button1.click; '2': button2.click; '3': button3.click; ... ',', '.': button11.click; ... else // sonstige Tasten end; Gruß Hawkeye |
Re: Taschenrechner über Tastatur bedienen
genauso könntenst du es machen, dann in den else-teil so etwas wie
Delphi-Quellcode:
Ohne Garantie ;)
easterstring:=easterstring+key;
if Copy('GEHEIMERTEXT', 1, Length(easterstring))<>easterstring then easterstring:=''; |
Re: Taschenrechner über Tastatur bedienen
@Hawkeye219: Ups, stand wohl etwas auf dem Schlauch... :mrgreen: :wall:
@inherited: Auch ne gute Lösung, aber 1. funktioniert es bei mir leider nicht und 2. ist die jetztige Lösung viel schöner :P , nichts für ungut... :) Gruß Stefan |
Re: Taschenrechner über Tastatur bedienen
:gruebel:
Mein beitrag bezog sich doch auf hawkeye, ich habe nur den von ihm ausgelassenem else-teil beschrieben |
Re: Taschenrechner über Tastatur bedienen
Hallo inherited,
mir war schon klar, dass du den else-Teil meintest aber irgendwie funktioniert deine Lösung trotzdem nicht. Mit der anderen Lösung meinte ich, die mir von Hawkeye219 empfohlene Seite, auf der ein Tutorial zum Programmieren eines Eastereggs war. Aber es wäre trotzdem cool, deine Lösung umzusetzen, schon allein der Einfachheit halber. Egal, hier auf jeden Fall mein Quelltext:
Code:
Wahrscheinlich hab ich den Copy-Befehl missverstanden, denn jetzt kommt die Botschaft schon allein, wenn ich nur t drücke.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
var easterstring:string; begin easterstring:=''; case key of '1' : button1.click; '2' : button2.click; '3' : button3.click; '4' : button4.click; '5' : button5.click; '6' : button6.click; '7' : button7.click; '8' : button8.click; '9' : button9.click; '0' : button10.click; ',' : button11.click; '.' : button11.click; 'n' : button12.click; chr(13) : button13.click; '-' : button14.click; '+' : button15.click; '*' : button16.click; '/' : button17.click; chr(8) : button19.click; 'p' : button20.click; 'w' : button21.click; 'q' : button22.click; 'r' : button23.click; else begin easterstring:=easterstring+key; if Copy('test', 1, Length(easterstring))<>easterstring then easterstring:='' else showmessage('hey'); end; end; end; Danke schonmal im Voraus für die Lösung des Problems... :mrgreen: Gruß Stefan |
Re: Taschenrechner über Tastatur bedienen
Mal zur erläuterung was deine Methode macht:
Du setzt easterstring auf '' dann ergänzt du die gedrückte Taste zu deinem String, z.B: 'T' dann vergleichst du Das erste Zeichen des Strings (es ist ja nur ein Zeichen drin) mit dem String selber, und das ergibt natürlich immer true, also wird die message ausgegeben |
Re: Taschenrechner über Tastatur bedienen
Hm... dann weiss ich nicht, wie ichs richtig machen soll. Ich meine, wenn ichs mit ner If-Abfrage löse, klappts auch nicht:
Code:
Ich kriegs einfach nicht hin. :wall:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
var easterstring:string; begin easterstring:=''; case key of '1' : button1.click; '2' : button2.click; '3' : button3.click; '4' : button4.click; '5' : button5.click; '6' : button6.click; '7' : button7.click; '8' : button8.click; '9' : button9.click; '0' : button10.click; ',' : button11.click; '.' : button11.click; 'n' : button12.click; chr(13) : button13.click; '-' : button14.click; '+' : button15.click; '*' : button16.click; '/' : button17.click; chr(8) : button19.click; 'p' : button20.click; 'w' : button21.click; 'q' : button22.click; 'r' : button23.click; else begin easterstring:=easterstring+key; if Copy('test', 1, Length(easterstring))<>easterstring then easterstring:=''; if easterstring='test' then showmessage('hui'); end; end; end; Gruß Stefan |
Re: Taschenrechner über Tastatur bedienen
Hallo Stefan,
die Variable easterstring mußt du im private Teil des Formulars unterbringen, damit ihr Inhalt mehrere Aufrufe der FormKeyPress-Routine überlebt. Der Löschbefehl zu Beginn der Routine schadet auch nur, oder? Probiere es einmal so:
Delphi-Quellcode:
Wenn der MAGICTEXT auch Zeichen enthalten soll, die für die Bedienung der Buttons benötigt werden, dann solltest du die Überprüfung aus dem ELSE-Zweig herausnehmen und hinter die CASE-Anweisung verschieben.
type
TForm1 = class (TForm) ... private easterstring : string; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: char); const MAGICTEXT = 'test'; begin case key of '1' : button1.click; ... 'r' : button23.click; else easterstring := easterstring + key; if (easterstring <> Copy(MAGICTEXT, 1, Length(easterstring)) then easterstring := '' else if (easterstring = MAGICTEXT) then begin showmessage('hui'); easterstring := ''; end; end; end; Gruß Hawkeye |
Re: Taschenrechner über Tastatur bedienen
Ups, nicht zu fassen wie blöd ich manchmal bin :oops: . Jetzt kann ich es aber nicht mehr auf den armen Schlauch schieben... :mrgreen:
Naja, ich danke dir auf jeden Fall für die Hilfe. Gruß Stefan Edit: Aber nur mal so aus reiner Neugier, wie würde es denn funktionieren, wenn man auf Tasten reagieren will, die gleichzeitig gedrückt werden? Ich meine, dass z.B. wenn man t,e,s und t gleichzeitig drückt, wird eine Messagebox aufgerufen. Oder ist das zu komplex? |
Re: Taschenrechner über Tastatur bedienen
Da ich immer noch auf Antwort warte, nehme ich mal an, dass ihr diesen Thread vergessen habt.
Hier die noch offene Frage: Zitat:
Bitte um Verständnis und baldige Antwort. Gruß Stefan |
Re: Taschenrechner über Tastatur bedienen
Das solltest du dann am Besten mit einem Timer machen und
![]() |
Re: Taschenrechner über Tastatur bedienen
Ok, vielen Dank, ich werd mich dann mal schlau machen.
Gruß Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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