![]() |
Probleme mit Memo und Tastendruck
Hallo zusammen,
ich versuche gerade ein Klickadventure zu schreiben. Die Dialoge werde in einem Memofeld dargestellt.Wenn man die ENTER-Taste drückt, soll der Dialog fortgeführt werden. Leider funktioniert das ganze aber gar nicht so, wie ich das haben will :wall: Anstatt immer nachfolgende Textzeilen auszugeben, wird immer wieder nur die erste textzeile erneut ausgegeben, wenn man die ENTER-Taste drückt. Habt ihr eine Idee woran das liegen könnte?
Code:
procedure memo1keypress(Sender: Tobject; var key: char);
begin if key = #13 then begin weiter:= true; end; end;
Code:
Ich bin langsam echt am Verzweifeln. Vielleicht bin ich auch auf nem ganzen falschen Weg. Bitte um Hilfe.
procedure personklick (Sender: Tobject);
begin weiter:= false; memo1.lines.add('hallo'); while weiter = false do begin delay(1); end; weiter:= false; memo1.lines.add('hiho'); while weiter = false do begin delay(1); end; weiter := false; memo1.lines.add('was geeeeeeht?'); while weiter = false do begin delay(1); end; weiter := false; {..und so weiter das Ganze...} end; Schon mal Danke im Voraus! Gruß Beatmaster |
Re: Probleme mit
Hai Beatmaster S,
bitte geben deiner Frage einen etwas aussagekräftigeren Titel. Danke :-D |
Re: Probleme mit Memo und Tastendruck
Versuch es mal statt Delay mit Application.ProcessMessages.
Dieser Befehl sorgt dafür, dass die Nachrichten des Programmes weiter verarbeitet werden. |
Re: Probleme mit Memo und Tastendruck
Servus,
also irgendwie gefällt mir der Code so nicht wirklich wie du das machst, irgendwas streubt sich da in mir wenn ich das sehe, kanns aber nicht wirklich sagen was?! Naja schau dir mal die Möglichkeit an, vieleicht hilft dir die auch weiter:
Code:
Hat noch die ein oder andere Macke, nur vom Ansatz find ich's halt en bissl effizienter (ich wette irgendjemand fällt dazu noch was um einiges besseres ein... :wink: )
...
var DialogPos: Integer; //Irgendwo in nem Public bereich deklarieren, so dass die entsprechende //Prozedur und dass Tastenereignis darauf zugreifen können! ... procedure Dingsbums; begin case DialogPos of 1: memo1.lines.add('blablbu'); 2: memo1.lines.add('lalala'); 3: memo1.lines.add('hgfhgf'); 4: memo1.lines.add('hgsgjdgh'); 5: memo1.lines.add('jdhgjgdhjhgd'); end; end; ... procedure TastenDingsbums; begin Wenn Tastencode = 13 dann //Keine Ahnung wie das jetz heißt inc(DialogPos); //inkrementiere um 1 end; Kannst mir aber mal erklären was des Delay macht? Hab das in der Hilfe nicht gefunden! Hält es das System für ne Sekunde an oder was? *greetZ* Sile P.S.: Wenn dein Adventure fertig ist, musst du es unbedingt hier posten!!! :-D //Edit: Wow, da war Stevie schneller... also hält Delay das System an (immer sehr übel)! |
Re: Probleme mit Memo und Tastendruck
Hai Beatmaster S,
warum nicht einfach so:
Delphi-Quellcode:
var
icount : Integer; sl : TStringList; procedure TForm1.FormCreate(Sender: TObject); begin sl := TStringList.Create; sl.Add('Hallo'); sl.Add('Halli'); sl.Add('*blubb*'); icount := 0; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil (sl); end; procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); begin if key = #13 then begin if (icount < sl.Count) then begin Memo1.Lines.Add(sl.Strings[icount]); INC (icount); end; end; end; |
Re: Probleme mit Memo und Tastendruck
Zitat:
Delphi-Quellcode:
P.S.: Der Ansatz von Beatmaster scheint mir auch ein wenig "pascallastig" zu sein... :roll:
procedure Delay(cardinal: ms);
var Ticks: cardinal; begin Ticks := GetTickCount; while GetTickCount < (Ticks + ms) do Application.ProcessMessages; end; |
Re: Probleme mit Memo und Tastendruck
Das der Quellcode total Banane war, wusste ich. Ich hatte es kurz darauf auch (wegen der Übersichtlichkeit) in eine Case-Abfrage geschrieben. Mittlerweile hab ich sogar geherausgefunden waran es genau lag, dass es nicht funktioniert hat :stupid:
Das Prob is nämlich, dass wenn das Memofeld nicht ausgewählt ist auch die ENTER-Taste nicht "aktiviert" ist. Gibt es denn irgendetwas, dass Tasten immer aktiviert sind, egal wo man sich befindet? Das Delay gibt es bei meinem Deplhi auch nich mehr. Aber da ich das noch wo anderst brauche hab ich das Eingefügt. Vielen Dank für die schnelle Hilfe. Ich werde wohl eine Stringlist fahren (wie mein IT-Lehrer immer zu sagen pflegt :thuimb:). Am Übersichtlichsten und da es ja mindestens 40 verschiedene Gespräche gibt, geht das so schneller. :-D Danke nochmal. PS: Wäre aber nett, wenn mir jemand noch obige Frage beantworten könnte :oops: |
Re: Probleme mit Memo und Tastendruck
Zitat:
|
Re: Probleme mit Memo und Tastendruck
Setze KeyPreview deiner Form auf true, dann werden alle Tastendrücke erst in den Formevents verarbeitet.
Auf Tasten wie Enter, Tab usw. wird nicht im KeyPress-Event sondern reagiert in KeyDown/KeyUP! Cu Simon |
Re: Probleme mit Memo und Tastendruck
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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