Autor Beitrag
sengerllach
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 05.01.05 13:15 
ich möchte versuchen die einen kreis in einem image mittels pfeiltasten zu steuern. da dies im formular geschehen soll hatte ich keypreview des formulars auf "true" gesetzt.
nur stand in der delphi hilfe unter keypreview: "Die Einstellung bezieht sich nicht auf Navigationstasten (TAB, Pfeiltasten usw.), da diese keine Tastaturereignisse auslösen. "

meine erste frage ist daher, wie man die pfeiltasten durch onkeydown erreichen kann.



als kompromiss habe ich mich dann eben für die tasten "pos1", "entf", "ende" und "bild runter" entschieden. aber auch hier funktioniert onkewdown nicht.
schritt für schritt durch drücken von F7 nachfollziehend, habe ich rausgefunden, dass die onkeydown-prozedur nicht einmal erreicht wird.
mein quelltext sieht ungefähr so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview:=True;
end;

procedure TForm1.FormKeydown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin  
if key = vk_home then ellipse(x1,y1-1,x2,y2-1);
if key = vk_end then ellipse(x1,y1+1,x2,y2+1);
if key = vk_next then ellipse(x1+1,y1,x2+1,y2);
if key = vk_delete then  ellipse(x1-1,y1,x2-1,y2);
end;



ich denke aber, dass das problem eher an den eigenschaften der form liegt. anscheinend ist die form trotz keypreview nicht aktiviert. denn sobald ich bei programmstart ehemalig die pfeiltasten gedrückt hatte zeigte das programm nicht etwa einen fehler an, sondern wählte durch diese tasten ledigtlich andere buttons aus.

wie kann ich diesen fehler beheben?

_________________
sólo nos queda la esperanza y la esperanza nos hace solos
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 05.01.05 13:25 
ich habe grade mal ein Mini-Programm erstellt mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    showmessage('Tada')
end;
und egal, was ich drücke, es kommt die Meldung. Vermutlich leigt der Fehler bei dir daran, dass der Focus auf einem Element der Form liegt, z.B. einem Image, oder einem Button. Dann wird beim Ereignis OnKeyDown die Prozedur für dieses Element aufgerufen, nicht das der Form.
Um das zu beheben, könntest du z.B. bei allen Komponenten deiner Form die OnKEyDown-Prozedur der Form angeben.

Edit: Ach, hatte ich noch vergessen: :welcome:

_________________
We are, we were and will not be.
sengerllach Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 05.01.05 21:19 
hallo gausi, danke erstmal für deine antwort und speziell für das welcome.

aber ich kann doch nicht in allen componenten mein onkeydown plaziernen. es geht mir nicht nur darum, dass das programm funtioniert, sondern es muss auch ökonoisch sein.
zum rumprobiernen erscheint wir dein 'tada' sehr gut. werd mal n paar experimente damit starten. vielleicht finde ich dadurch auch die lösung für meine pfeiltasten-frage.
allerdings habe ich schon öfter kontrolliert wo der fokus liegen muss und wo er liegt.
wo er liegen muss habe ich damit bestimmt, dass ich die onkeydown funktion in tform1 gelegt habe.
und wo er liegen soll habe ich bestimmt indem ich durch keypreview:=true der tform1 für die key-funktionen vorrang gegeben habe.
so denke ich zumindest. wenn da irgendwo ein fehler vorliegt bitte ich mich zu berichtigen.

okydoky, dann noch einen schönen abend.