Autor Beitrag
wayneschlegel
Hält's aus hier
Beiträge: 11

WIN 7 Ultimate 32-
Delphi 4.0
BeitragVerfasst: Sa 06.08.11 17:31 
Hey !
ich möchte ein onkeypress Ereignis auf ein Objekt erstellen. Es soll allerdings nur stattfinden wenn beim doppelklick zusätzlich strg+alt gedrückt wird.
das kann für die profis hier nicht so schwierig sein. bei mir haperts an der syntax...hat vielleicht jemand ein paar stückchen code für mich ? :-)
vielen dank !
M.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 06.08.11 18:44 
user profile iconwayneschlegel hat folgendes geschrieben Zum zitierten Posting springen:
ich möchte ein onkeypress Ereignis auf ein Objekt erstellen. Es soll allerdings nur stattfinden wenn beim doppelklick zusätzlich strg+alt gedrückt wird.


OnKeyPress findet bei einem Tastaturdruckereignis statt, der Doppelklick ist hingegen ein Mausereignis (OnDblClick). Beides sind getrennte Ereignisse, die sich m.E. nicht so ohne weiteres "mischen" bzw. "vereinen" lassen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 06.08.11 18:47 
user profile iconwayneschlegel hat folgendes geschrieben Zum zitierten Posting springen:
ich möchte ein onkeypress Ereignis auf ein Objekt erstellen. Es soll allerdings nur stattfinden wenn beim doppelklick zusätzlich strg+alt gedrückt wird.
Also du willst ein OnKeyPress benutzen, aber einen Doppelklick abfangen, wenn andere Tasten unten sind? Wie jetzt? :eyecrazy: :nut:

Also mal zur Klarstellung:
OnKeyPress dient zur Reaktion auf einen Tastendruck mit der Tastatur.
OnDblClick dient zur Reaktion auf einen Doppelklick mit der Maus.

So, dann zum Problem:
Du kannst in OnKeyDown auf die Tastendrücke von Strg + Alt reagieren und dir deren Status merken und zurücksetzen, wenn sie in OnKeyUp wieder losgelassen werden. Dann kannst du im Doppeklick Ereignis einfach diesen Status abfragen.

Eine andere Möglichkeit wäre die Abfrage des Tastenstatus mit GetAsyncKeyState, aber das hat den Nachteil, dass eine Verzögerung bei der Doppelklickbehandlung dazu führen kann, dass die Tasten dann schon wieder losgelassen sind. Dafür hat es den Vorteil, dass es auch klappt, wenn beim Drücken der Tasten das Fenster noch nicht den Eingabefokus hatte.
wayneschlegel Threadstarter
Hält's aus hier
Beiträge: 11

WIN 7 Ultimate 32-
Delphi 4.0
BeitragVerfasst: Sa 06.08.11 20:39 
ja genau ! Nur wenn die beiden Tasten shift und crtl zusammen gedrückt sind, dann soll das Ereignis stattfinden.
Das muss doch irgendwie gehen oder? Auf jeden Fall doch mit einer Abfrage beim Doppelklickereignis oder habe ich einen Denkfehler ?

Beipiel:
formKeydown...
if (shift = ([ssCtrl, ssShift]) + blabla then
begin
...
end;

was denkt Ihr ?
M.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 06.08.11 21:28 
Wie ich schon sagte:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst in OnKeyDown auf die Tastendrücke von Strg + Alt reagieren und dir deren Status merken und zurücksetzen, wenn sie in OnKeyUp wieder losgelassen werden. Dann kannst du im Doppeklick Ereignis einfach diesen Status abfragen.
Shift abfragen ist da schon eine gute Idee, nur musst du auch den Status speichern usw.
wayneschlegel Threadstarter
Hält's aus hier
Beiträge: 11

WIN 7 Ultimate 32-
Delphi 4.0
BeitragVerfasst: Sa 06.08.11 22:35 
cool ! hast du evtl. nen demo code oder sowas ?
ein beispiel ?`was glaubst du wohl was ich alles ausprobiert habe... :-(
M.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 06.08.11 22:43 
So schwer ist das eigentlich nun wirklich nicht. :gruebel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
  TFormX = ...
  public
    FKeysPressed: Boolean;

// ...

procedure TFormX.FormDblClick(Sender: TObject);
begin
  if FKeysPressed then
  begin
    FKeysPressed := False; 
      // nötig, wenn wie hier in DblClick etwas passiert, das bewirkt, dass KeyUp nicht ankommt
    ShowMessage('Doppelklick angekommen');
  end;
end;

procedure TFormX.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  FKeysPressed := (ssCtrl in Shift) and (ssAlt in Shift);
end;

procedure TFormX.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  FKeysPressed := FKeysPressed and not ((ssCtrl in Shift) and (ssAlt in Shift));
end;
wayneschlegel Threadstarter
Hält's aus hier
Beiträge: 11

WIN 7 Ultimate 32-
Delphi 4.0
BeitragVerfasst: So 07.08.11 00:28 
hm...und das soll funktionieren ? probier ich gleich morgen mal aus aber ich bin da eher skeptisch ehrlich gesagt.
M.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 07.08.11 00:37 
wäre es nicht eventuell einfach einfach GetAsyncKeystate in der DoubleClick-Procedure abzufragen?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.08.11 08:23 
user profile iconwayneschlegel hat folgendes geschrieben Zum zitierten Posting springen:
hm...und das soll funktionieren ? probier ich gleich morgen mal aus aber ich bin da eher skeptisch ehrlich gesagt.
Ich habe es ausprobiert. ;-)

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
wäre es nicht eventuell einfach einfach GetAsyncKeystate in der DoubleClick-Procedure abzufragen?
Es hat beides Vor- und Nachteile, das habe ich ja oben schon geschrieben. :D
wayneschlegel Threadstarter
Hält's aus hier
Beiträge: 11

WIN 7 Ultimate 32-
Delphi 4.0
BeitragVerfasst: Do 11.08.11 21:47 
Stimmt ! Hat super hingehauen !
Vielen Dank für die Hilfe !!!!