![]() |
Delphi - Versteckte Tastatureingaben
Hallo.
Ich möchte in einem Programm von mir so ne geheimfunktion einbauen. Dazu muss man einfach einen Text eintippen (ohne eingabefeld etc.). Das soll so gehen wie in nem Spiel Cheatcodes. Wie schaffe ich das in Delphi? Ich hatte zwar schonmal folgende Idee, aber die ist nicht gut. 1. Ich hab ein Edit reingemacht. 2. Das edit habe ich dann mit
Delphi-Quellcode:
unsichtbar gemacht und
edit1.visible := true;
dann den Fokus draufgemacht. Aber mit 'nem Klick auf das Formular war dass wieder weg (der Fokus). Wie mache ich dass? :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :coder2: :coder2: :coder2: :coder2: :coder2: :coder2: :coder2: :coder2: :coder2: :coder2: |
Re: Delphi - Versteckte Tastatureingaben
Ich würde eine globale String-Variable anlegen.
Dann solltest du eine OnKeyPress-Prozedur programmieren, sodass in den String immer das neueste Zeichen dazugeschrieben wird. Diese Prozedur stellstz du dann bei allen Komponenten als OnKeyPress-Ereignis ein... Den String kannst du dann auch entweder in der Prozedur auswerten oder alle paar Sekunden per Timer auswerten und dann löschen... Soll ich dir das mal kurz coden? (Falls du's nicht verstanden hast ;)) CK_CK |
Re: Delphi - Versteckte Tastatureingaben
Wäre es dafür nicht sinnvoller, die Tasteneingaben über das KeyDown bzw. KeyUp Event abzufangen, und dann zu prüfen, ob ein entsprechender Buchstabe eingegeben wurde oder eben nicht.
Dazu musst du das KeyPreview der Form auf true stellen, und über KeyDown der Form erhältst du dann die Werte der gedrückten Tasten. Mittels Ord kannst du die dann auf die entsprechenden Buchstaben prüfen.
Delphi-Quellcode:
auf die Atr könntest du ja den ganzen string Buchstaben für Buchstaben durchgehen, ist meinetwegen der Anfangsbuchstaben eingegeben worden, springst du zur nächsten Stelle, ist die nächste Stelle falsch, fängst du bei der nächsten Prüfung wieder von vorne an.
procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var text: string; begin if Ord('A') = Key then //a wurde gedrückt end; //und wieder zu langsam, aber grob das selbe :wink: |
Re: Delphi - Versteckte Tastatureingaben
Zitat:
Und eine unsichtbare Komponente kann den Focus nicht bekommen. Also so würde ich es machen:
Delphi-Quellcode:
Nicht sicher, ob das stimmt. (Kein Delphi zur Hand)...
var text:String='Das_Wort';
var akt_pos:Integer=1; procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = ord(text[akt_pos]) then begin akt_pos:= akt_pos+1; // Wort ist vollständig eingegeben worden if akt_pos = length(text) then begin ShowMessage('Hier deine Funktion'); end; //////// end else begin // Falsch eingegeben, nochmal von Anfang... akt_pos:=1; end; end; |
Re: Delphi - Versteckte Tastatureingaben
Hallo.
@HuXX: Habs Probiert, aber geht nit. Ausserdem verstehe ich den Code nit so. @ck_ck: Da ich nicht grad der beste bin, gerne doch... :oops: Trotzdem Danke für die schnelle Antwort! echt super! mfg Dennis |
Re: Delphi - Versteckte Tastatureingaben
^^was gibts den bei Huxx für ne Fehlermeldung? Sowas hilft heir schließlich weiter, was das Code verstehen angeht, versuch ichs mal zu erklären:
Delphi-Quellcode:
[/quote]
var text:String='Das_Wort';
//enthält dein geheimes Wort welches eingegebn werden soll var akt_pos:Integer=1; //enthält die Position des aktuellen Buchstabens, welcher überprüft wird procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); //Procedure des Forms, welche aufgerufen wird, sobald eine Taste gedrückt wird begin if Key = ord(text[akt_pos]) then begin //prüft, ob die aktuelle Eingabe (Taste) dem Buchstaben an der aktuellen Stelle des Wortes entspricht akt_pos:= akt_pos+1; //ist dies der FAll, wird für die nächste Eingabe zur nächsten Position im Wort gesprungen // Wort ist vollständig eingegeben worden if akt_pos = length(text) + 1 then //(+ 1 ergänzt, da snst der letzte Buchstaben nicht geprüft wird. begin //prüft, ob die aktuelle Position, die ja bei richtigem Buchstabe eins weiter rückt, der Stringlänge entspricht, wenn ja, ist das Wort vollständig ShowMessage('Hier deine Funktion'); //deine Aktion end; //////// end else begin // Falsch eingegeben, nochmal von Anfang... akt_pos:=1; //Sobald die aktuelle Eingabe nicht dem Buchstaben der aktuellen Position im Teststring entspricht, wird die Position auf Begin zurückgesetzt, weil das Wort ja am Stück eingegeben werden muss. end; end; Meiner Meinung nach, ist diese Änderung noch wichtig:
Delphi-Quellcode:
^^ansonsten müsste es stimmen.
if akt_pos = length(text) + 1 then //(+ 1 ergänzt, da snst der letzte Buchstaben nicht geprüft wird.
Nich böse sein, falls ich zu grundlegend rangehe, aber hast du auch die Variablen global deklariert:
Delphi-Quellcode:
Und hast du das entsprechende KeyDown Event der Form belegt und nicht nur den Code kopiert, wenn du ihn nur kopierts, wird er nicht aufgerufen.
var
Form1: TForm1; //da... implementation var //oder da... {$R *.DFM} Übrigens herzlich Willkommen in der DP |
Re: Delphi - Versteckte Tastatureingaben
Also, das hier funktioniert:
1. globale Variablen (vor der ersten Prozedur einfügen:
Code:
2. Den OnKeyPress-Event des Formulars doppelt anklicken und den Code einfügen:
const
geheimwort: String = 'geheimwort'; var tmpstr: String = '';
Code:
3. Alle Komponenten markieren, die auf dem Formular sind und als OnKeyPress-Event "FormKeyPress" auswählen (Drop-Down-Liste)...
//aktuelles Zeichen vergleichen//
tmpstr := tmpstr + key; //ganzes Wort gefungen if Copy(tmpstr,Length(tmpstr)-Length(geheimwort)+1,Length(geheimwort))=geheimwort then begin ShowMessage('GEHEIMWORT EINGETIPPT'); //oder andere Prozedur... tmpstr := ''; end; Bei mir klappt das wunderbar... (die Version oben hat bei mir übrigens auch nicht funktioniert...) Viele Grüße, CK_CK |
Re: Delphi - Versteckte Tastatureingaben
Also:
Die On-Press-Methode hat funktioniert! Vielen dank! @Monta: Habs auch in beiden varianten ausprobiert! :kiss: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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