Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Shift gedrückt? (https://www.delphipraxis.net/108120-shift-gedrueckt.html)

jjep 7. Feb 2008 11:01


Shift gedrückt?
 
Moin moin

Ich möchte gern wissen ob die Shift-Taste gedrückt ist, aber es funktioniert nicht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var state: TShiftState;
begin
if ssShift in state  then Outputdebugstring('shift ist gedrückt')
                      else Outputdebugstring('shift ist nicht gedrückt');
end;
Wenn ich nun auf den Button1 klicke und dabei shift gedrücke halte, dann zeigts im Debugfenster: 'shift ist nicht gedrückt' :gruebel:
Weiss jemand wieso?

Gruss Jjep

DeddyH 7. Feb 2008 11:04

Re: Shift gedrückt?
 
Versuch es mal in MouseDown.

RavenIV 7. Feb 2008 11:14

Re: Shift gedrückt?
 
Wo wird die Variable state zugewiesen?

Versuch mal Dein Glück in MousDown, MouseUp des Buttons oder des Forms.
Dort heisst der Parameter dann aber Shift.

jjep 7. Feb 2008 11:14

Re: Shift gedrückt?
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var state: TShiftState;
begin
if ssShift in state  then Outputdebugstring('shift ist gedrückt')
                      else Outputdebugstring('shift ist nicht gedrückt');
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if ssShift in Shift  then Outputdebugstring('shift ist gedrückt')
                      else Outputdebugstring('shift ist nicht gedrückt');
end;
Hmm in der MouseDown-Methode funktioniert es einwandfrei. Muss man vieleicht "state" nocht irgendwie vorbereiten?
Leider will ich es umbedingt mit der Button1Click-Methode machen. Wüsste jemand wie das möglich ist?

Corpsman 7. Feb 2008 11:16

Re: Shift gedrückt?
 
Ganz einfach,

Du machst ne "Globale" Variable die du bei Mouse Down Setzt und bei Mouse Up Reset

Dann kannst du die Variable in Click prüfen.

Wenn doch nur alles so einfach wäre ;)

RavenIV 7. Feb 2008 11:17

Re: Shift gedrückt?
 
Zitat:

Zitat von jjep
Hmm in der MouseDown-Methode funktioniert es einwandfrei. Muss man vieleicht "state" nocht irgendwie vorbereiten?
Leider will ich es umbedingt mit der Button1Click-Methode machen. Wüsste jemand wie das möglich ist?

Im OnClick geht das nicht, weil dort der Status der Shift-Taste nicht bekannt ist.
Du MUSST es in MouseDown oder MouseUp machen.

jjep 7. Feb 2008 11:20

Re: Shift gedrückt?
 
Zitat:

Ganz einfach,

Du machst ne "Globale" Variable die du bei Mouse Down Setzt und bei Mouse Up Reset

Dann kannst du die Variable in Click prüfen.

Wenn doch nur alles so einfach wäre
Ja geht scho, wäre aber schöner wenn man gerade im Click denn Status direkt abfragen könnte.

Zitat:

Im OnClick geht das nicht, weil dort der Status der Shift-Taste nicht bekannt ist.
Wieso sollte der Status unbekannt sein?
Kann man vieleicht via WinApi auf den Zustand zugreifen?

RavenIV 7. Feb 2008 11:29

Re: Shift gedrückt?
 
Zitat:

Zitat von jjep
Wieso sollte der Status unbekannt sein?
Kann man vieleicht via WinApi auf den Zustand zugreifen?

Weil der Event-Handler für OnClick das nicht überprüft und weil es ihn auch nicht interessiert.
In dem Moment, wenn Deine Button1OnClick ausgeführt wird, könnte der Status der Shift-Taste schon wieder ein ganz anderer sein. Oder hält der Benutzer die Taste so lange fest, bis Du ihm sagst, dass er sie loslassen darf?

Nur im Event-Handler für OnMouseDown wird die Shift-Taste ausgewertet und an Deine Button1MouseDown kann der Status ausgewertet werden.

Die einzige Möglichkeit ist es, im MouseDown den Status zwischenspeichern und im Click auszuwerten.

Es ist einfach so, es gibt da keine bessere Version.

Das einzige wäre ein MouseHook, aber das willst Du nicht machen, glaub mir.
Das ist sehr viel Aufwand.

jjep 7. Feb 2008 11:34

Re: Shift gedrückt?
 
Oke
Danke an alle

bluesbear 7. Feb 2008 12:01

Re: Shift gedrückt?
 
hallo jjep,
Zitat:

Zitat von jjep
Wieso sollte der Status unbekannt sein?
Kann man vieleicht via WinApi auf den Zustand zugreifen?

guck mal in der Hilfe nach GetKeyState, oder GetKeyboardState.
Gruß,
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz