![]() |
Timer blocken -.-
hallo hab da noch eine frage
un zwar
Delphi-Quellcode:
das funktioniert ja wunderbar =)
procedure TForm1.Timer1Timer(Sender: TObject);
begin if taste =1 then else begin if (GetASYNCKeyState ($31) <> 0)then begin keybd_event(VKKeyScan('t'),0,0,0); text :=Edit1.Text; EnterText(text); keybd_event(239, 0, KEYEVENTF_KEYUP, 0); sendkeys('{ENTER}',true); end; ...... dieses "t" ist dafür da dass man ingame ein text eingeben kann << nur zur info so wenn ich jetzt nun ingame einen manuellen text eingeben will sprich ich drücke "t" un dann ein text z.b. hallo test1. dann führt er mir den Code oben aus. da habe ich mir gedacht unterbinden wir das mal =)
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case key of Ord('T'): begin Timer1.Enabled:=false;taste:=1; end; Ord(VK_Return): begin timer1.Enabled:=True;taste:=0 end; end; nun drücke ich "t" gebe einen text ein zb "hallo herr1" führt er mir den code nicht aus (siehe oben) aber sobald ich dann "enter" drücke führt er mir den aus =( meine frage ist ob man irgendwie den timer bzw den binder blocken kann wenn ich "t" drücke und dann text+zahl!? [edit=Matze]Delphi-Code von zu viel Copy&Paste-Text bereinigt. Bitte zukünftig vor dem Absenden die Vorschaufunktion nutzen. MfG, Matze[/edit] |
Re: Timer blocken -.-
Wenn Du den Timer ausschaltet ist ja klar, dass der Code im Timer nicht ausgeführt wird, Du musst den Timer schon laufen lassen.
|
Re: Timer blocken -.-
hi,
ich verstehe leider nicht was du willst. Erkläre doch mal, was du überhaupt genau vorhast, und was du mit ingame meinst? Ingame in einem x-beliebigen spiel, oder programmierst du gerade ein spiel und ist das der Source aus dem Projekt?? Einen Timer an der automatischen Ausführung hindern kann man mit
Delphi-Quellcode:
@Muhkuh: ich bin mir nciht sicher, ob er das meint ;)
Timer.Enabled := False;
Zitat:
Gruß Ansgar |
Re: Timer blocken -.-
vll falsch ausgedrückt
ok ich programmiere ein keybinder für ein Spiel! wenn ich dort ingame(im spiel) die taste "t" drücke öffnet sich eine eingabebox wo man einen text reinschreiben kann zb " hallo du " oder befehle zb "/muha". um mir und anderen gamern eine hilfe zuschaffen lege ich die befehle auf die tasten 1-0, sprich ich drücke ingame die taste 1 dann soll er zb "/muha" senden mein problem ist allerdings das man ja auch manuel schreiben kann "hallo 1" sprich ich drücke erst "t" dann meinen text << beinhaltet der der text allerdings eine zahl die ich über die tasten 1- 0 eingebe und nicht über die numpad tasten dann führt er mir dies aus:
Delphi-Quellcode:
dies ausführen
if (GetASYNCKeyState ($31) <> 0)then begin
keybd_event(VKKeyScan('t'),0,0,0); text :=Edit1.Text; EnterText(text); keybd_event(239, 0, KEYEVENTF_KEYUP, 0); sendkeys('{ENTER}',true); end; deswegen dachte ich gut sage ich wenn ich "t" drücke soll er mir den Timer deaktivieren um die eingaben nicht mehr zu registrieren. aber dies macht er nicht =( der Code:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case key of Ord('T'): begin Timer1.Enabled:=false;taste:=1; end; Ord(VK_Return): begin timer1.Enabled:=True;taste:=0 end; end; |
Re: Timer blocken -.-
ok da ich es nicht hinbekommen habe :D habe ich es etwas anders gemacht.
un zwar : habe ich nur 7 Buttons, in jedem Button ändert sich text := Edit1.text um 1, also ..:=edit1, edit2, edit3 etc.
Delphi-Quellcode:
nun noch 2 Timer
procedure TForm1.Button1Click(Sender: TObject);
begin if taste = 1 then begin keybd_event(VKKeyScan('t'),0,0,0); text :=Edit1.Text; EnterText(text); sendkeys('{ENTER}',true); taste:=0; exit; end; end; procedure TForm1.Button2Click(Sender: TObject); begin if taste = 1 then else begin keybd_event(VKKeyScan('t'),0,0,0); text :=Edit2.Text; EnterText(text); sendkeys('{ENTER}',true); taste:=0; exit; end; end; .... procedure TForm1.Button3Click(Sender: TObject); procedure TForm1.Button7Click(Sender: TObject);
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin if (GetASYNCKeyState ($31) <> 0)then begin button1.Click; end; if (GetASYNCKeyState ($32) <> 0)then begin button2.Click; end; if (GetASYNCKeyState ($33) <> 0)then begin button3.Click; end; if (GetASYNCKeyState ($34) <> 0)then begin button4.Click; end; if (GetASYNCKeyState ($35) <> 0)then begin button5.Click; end; if (GetASYNCKeyState ($36) <> 0)then begin button6.Click; end; if (GetASYNCKeyState ($37) <> 0)then begin button7.Click; end; end; procedure TForm1.Timer2Timer(Sender: TObject); begin if (GetASYNCKeyState (VK_return) <> 0) then begin taste:=0; end; if (GetASYNCKeyState (Ord('T')) <> 0)then begin taste:=1; end; alles geht wunderbar bis Button6 bzw. bis Taste 6 sobald ich taste7 drücke oder button7 hängt sich alles auf, er gibt mir dann irgendwie button1 aus un das immer hintereinander bis ich das programm dann schließe. weiß jemand wieso das so ist? |
Re: Timer blocken -.-
ok der fehler liegt darin das wenn in einem edit eine zahl steht erkennt der timer diese un führt dann den dazugehörigen button aus =(
kann man dies verhindern also das wenn im edit eine zahl steht das der timer das nicht erkennt? |
Re: Timer blocken -.-
1. du brauchst nur einen Timer. Dieser Timer wird nur bei Spielende gestoppt.
2. Du musst dir einen Automaten entwerfen. 3. Du nimmst dir eine Zustandsspeicher z.B. eine Variable vom Aufzählungstyp oder wenn du mehrere Zustände paralell hast vom Mengentyp .
Delphi-Quellcode:
so kannst du im Timer je nach spielstatus unterschiedlich reagieren.
type tgamestate=(gsPause, gsPlaying, gsChatstartet );
Delphi-Quellcode:
case gamestate of
gsPause:; //do nothing gsPlaying: Begin ;//Spiellogik (*z.b. warten das t gedrückt wird und dann gamestate anpassen *) end; gsChatstartet: Begin ;//texteingaben entgegen nehmen oder z.b. auf ENTER warten und dann gamestate anpassen end; end; |
Re: Timer blocken -.-
Anmerkung: Den ganzen Thread gibt's
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 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