Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Taschenrechner über Tastatur bedienen (https://www.delphipraxis.net/84048-taschenrechner-ueber-tastatur-bedienen.html)

Stefan92 13. Jan 2007 13:55

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

marabu 13. Jan 2007 14:06

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

Stefan92 14. Jan 2007 10:47

Re: Taschenrechner über Tastatur bedienen
 
Erstmal danke für deine Antwort, aber ich hab Probleme mit der Umsetzung.
Hier mein bisheriger Quellcode:
Code:
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;
Hoffe ihr findet meinen Fehler und danke schonmal im Voraus.

Gruß

Stefan

Hawkeye219 14. Jan 2007 11:07

Re: Taschenrechner über Tastatur bedienen
 
Hallo Stefan,

schau dir mal diese Seite an.

Die IF-Anweisungen könntest du übrigens durch eine Delphi-Referenz durchsuchenCASE-Anweisung ersetzen. Eine mögliche Alternative ist die Verwendung der Komponente Delphi-Referenz durchsuchenTAction. Eine Action kann mit mehreren Auslösern (z.B. TButton, TMenuItem) verbunden werden und gestattet auch die Definition eines Shortcuts.

Gruß Hawkeye

Stefan92 14. Jan 2007 13:11

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

Hawkeye219 14. Jan 2007 13:27

Re: Taschenrechner über Tastatur bedienen
 
Zitat:

Zitat von Stefan92
Aber wie mach ich das denn mit einer Case-Anweisung, das geht doch nur mit ordinalen Typen, oder?

char _ist_ ein ordinaler Typ.

Delphi-Quellcode:
case key of
  '1': button1.click;
  '2': button2.click;
  '3': button3.click;
  ...
  ',', '.': button11.click;
  ...
else
  // sonstige Tasten
end;
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.

Gruß Hawkeye

inherited 14. Jan 2007 15:00

Re: Taschenrechner über Tastatur bedienen
 
genauso könntenst du es machen, dann in den else-teil so etwas wie
Delphi-Quellcode:
  easterstring:=easterstring+key;
  if Copy('GEHEIMERTEXT', 1, Length(easterstring))<>easterstring then
    easterstring:='';
Ohne Garantie ;)

Stefan92 14. Jan 2007 17:15

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

inherited 14. Jan 2007 19:21

Re: Taschenrechner über Tastatur bedienen
 
:gruebel:
Mein beitrag bezog sich doch auf hawkeye, ich habe nur den von ihm ausgelassenem else-teil beschrieben

Stefan92 15. Jan 2007 07:04

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:
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;
Wahrscheinlich hab ich den Copy-Befehl missverstanden, denn jetzt kommt die Botschaft schon allein, wenn ich nur t drücke.
Danke schonmal im Voraus für die Lösung des Problems... :mrgreen:

Gruß

Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 Uhr.
Seite 5 von 6   « Erste     345 6      

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