![]() |
Tabstop & Pfeiltasten
Hallo, folgendes Problem:
ich habe ein Formular auf dem versch. Controls angeordnet sind. Dieses Formular steuert eine Maschine mit den Pfeiltasten... (Links/rechts,Hoch/Runter) Das funktioniert auch immer bis der Benutzer z.B. eine RadioGroup anklickt. Dann verarbeitet diese z.B. die PfeilHoch/PfeilRunter Events obwohl TabStop auf False steht und im Formular KeyPreview = True ist. Die Tasten werden in Form1.OnKeyDown vararbeitet und dannach mit Key = 0 als "behandelt" gesetzt. Dennoch wird dieser Event an das Control mit dem Fokus weitergeleitet. Muss ich hier im Form1 die WM_KEYDOWN überschreiben oder geht das auch einfacher? Gruss Thomas |
Re: Tabstop & Pfeiltasten
'ne RadioGroup hat leider keine KeyEvents, sonst hätt ich vorgeshclagen diese auch auszuwerten.
Aber als einfache Lösung könntest du Change-Event solcher Controls einem anderem Control die Kontrolle übergeben, welches nicht das nötigen Key-Events "klaut".
Delphi-Quellcode:
{Control}.SetFocus;
//oder {Form.}ActiveControl := nil; |
Re: Tabstop & Pfeiltasten
Herzlich willkommen in der Delphi-PRAXiS, Thomas!
Du könntest das Ereignis ![]() ![]() Gruß Hawkeye |
Re: Tabstop & Pfeiltasten
Habe ich alles schon probiert...
Wenn das Formular erscheint funktioniert die Abfrage der Pfeiltasten einwandfrei -> d.h. Motion.HandleKeyWord (siehe unten) wird mit dem TastenCode aufgerufen... procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = vk_Escape) or (Key = VK_F1) then ToggleEStop; case Key of vk_F3: SetUserMode(umRun); vk_F4: SetUserMode(umJog); vk_F5: SetUserMode(umMDI); end; if (FUserMode = umJog) then begin Motion.HandleKeyWord(Key); end; Key:= 0; end; jetzt klickt der Benutzer in ein Radio-Control und ab dann wird die Funktion (Motion...) nicht mehr aufgerufen da das Radio-Control ja die Pfeiltasten abfängt. |
Re: Tabstop & Pfeiltasten
Habe das mal getestet:
ein Formular mit 3 Edit.Controls + 1 RadioGroup mit 2 Items Form1.KeyPreview:= True; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_LEFT then Beep; if Key = VK_Right then Beep; Key:= 0; { Key was handled } end; Wenn ein Edit-Control den Focus hat kommt dort kein KeyDown an und es ertönt der Beep! Wie gewünscht! Wenn die Radio-Group den Fokus hat schaltet die bei VK_LEFT/RIGHT um und es kommt kein Beep. D.h. der KeyDown Event wird scheinbar VOR OnKeyDown des Formulars von der RadioGroup verarbeitet... Wie kann ich das lösen? |
Re: Tabstop & Pfeiltasten
Hallo Thomas,
Zitat:
Gruß Hawkeye |
Re: Tabstop & Pfeiltasten
Jo, funktioniert! Das kommt davon wenn man nicht richtig lesen kann... :-)
Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 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