Delphi-PRAXiS

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 Abfragen, ob Mouse down (https://www.delphipraxis.net/17321-abfragen-ob-mouse-down.html)

barnti 3. Mär 2004 10:23


Abfragen, ob Mouse down
 
Hi,

ich möchte unabhängig von den Mouseevents abfragen, ob ein Mousebutton zur Zeit gedrückt wird. Kann mir jemand verraten, ob und wie das zu bewerkstelligen ist?

Danke und Gruß,

Barnti

Pseudemys Nelsoni 3. Mär 2004 10:26

Re: Abfragen, ob Mouse down
 
du könntest im onmousedown des Form's eine globale Variable auf "true" setzen wenn dem so ist und im onmouse down halt False und diese fragst du ab


oder meinst du auch ausserhalb des programms?

barnti 3. Mär 2004 10:33

Re: Abfragen, ob Mouse down
 
Hi,

nein ich meinte schon im Programm. Dazu folgendes:

ich starte einen Drag-Vorgang folgendermaßen:

Delphi-Quellcode:
procedure TForm_Main.DBGridColEnter(Sender: TObject);
begin
  // hier soll hin 'wenn rechte mousetaste gedrückt dann...'
  DBGrid_Master.BeginDrag(false);
end;
ich realisiere so ein drag and drop im DBGrid...

Eine globale Variable würde ich gern vermeiden...

Gruß,

Barnti

AlphaBug 3. Mär 2004 11:00

Re: Abfragen, ob Mouse down
 
@barnti

Wie wär´s damit:

Delphi-Quellcode:
if GetAsyncKeyState(VK_RBUTTON) <> 0 then
  // Key ist down

barnti 3. Mär 2004 11:14

Re: Abfragen, ob Mouse down
 
HI,

kannst Du mir dazu ein paar ausführlichere Zeilen schreiben. Ich habe das mal so übernommen. Leider passiert gar nichts mehr. Der Drag-Vorgang wird gar nicht mehr gestartet. Noch habe ich die Doku dazu nicht gelesen...

Jetzt aber!
Folgendes geändert:
Delphi-Quellcode:
procedure TForm_Main.DBGrid_MasterColEnter(Sender: TObject);
begin
  if (GetAsyncKeyState(VK_LBUTTON )<> 0) then
    begin
      DBGrid_Master.BeginDrag(false);
    end;
end;
Das Funktioniert nur solange ich den linken Mousebutton noch nicht betätigt habe. Danach wird auch nach einem beliebigen Tastendruck (z.B. Navigation im DBgrid)der drag-Vorgang begonnen. Ich möchte das ja aber nur, wenn die linke Mousetaste gehalten wird. Daas Ereignis AsyncKeyState müsste also wieder auf Null gesetzt werden...?!

So geht es nocht nicht richtig. Weiß jemand etwas weiter?

Gruß,

Barnti

AlphaBug 3. Mär 2004 11:32

Re: Abfragen, ob Mouse down
 
@barnti

Also bei mir startet er, aber die Zelle kann nirgendwo abgelegt werden.

Delphi-Quellcode:
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
  if GetAsyncKeyState(VK_RBUTTON) <> 0 then
    DBGrid1.BeginDrag(false);
end;

barnti 3. Mär 2004 11:40

Re: Abfragen, ob Mouse down
 
Hi,

das ist ja auch nicht das Problem. Siehe mein letztes Edit.

Ich möchte das der Drag-Vorgang NUR startet wenn beim OnColEnterEreignis die linke Mousetaste gedrückt wird sonst nicht. So wie es ist funktioniert es nicht, da die 'if-Bedingung' nach dem ersten Betätigen der linken mousetaste immer true liefert...

Weitere Ideen?

Gruß und Danke,

Barnti

AlphaBug 3. Mär 2004 11:43

Re: Abfragen, ob Mouse down
 
@barnti

Die Probleme tauchen bei mir nicht auf !?

Wenn ich das richtig verstehe,
versuchst du also eine Zelle des Grid per Drag&Drop zu verschieben ?

AlphaBug 3. Mär 2004 11:57

Re: Abfragen, ob Mouse down
 
@barnti

Und wenn du anstelle von GetAsyncKeyState() GetKeyState() verwendest ?

Delphi-Quellcode:
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
  if GetKeyState(VK_LBUTTON) <> 0 then
    DBGrid1.BeginDrag(false);
end;

barnti 3. Mär 2004 12:00

Re: Abfragen, ob Mouse down
 
Hi,

habe ich bereits probiert. Leider kein Erfolg...

Gruß,

Barnti

barnti 3. Mär 2004 13:42

Re: Abfragen, ob Mouse down
 
Hallo,

ich habe folgendes herausgefunden.

Ist einmal der linke Mousebutton betätigt worden, bleibt GetAsyncKeyState(VK_LBUTTON) immer auf true.

Erst nachdem ich nocheinmal mit links in das Grid klicke, liefert die funktion wieder den Wert false.

Wie kann ich erreichen, dass nach dem abgeschlossenen 'Drag-drop-Vorgang' der Button-State wieder zurüchgesetzt wird?

Habe folgendes versucht, leider ohne Erfolg:

Delphi-Quellcode:
procedure TForm_Main.DBGrid_MasterColEnter(Sender: TObject);
var mousedown: Smallint;
begin
  mousedown:= GetAsyncKeyState(VK_LBUTTON);
  if mousedown<> 0 then
    begin
      DBGrid_Master.BeginDrag(false);
    end;
end;

Tyrael Y. 3. Mär 2004 13:49

Re: Abfragen, ob Mouse down
 
Vielleicht hilft dir ja mouse_event aus der Win SDK weiter...

The mouse_event function synthesizes mouse motion and button clicks.

VOID mouse_event(

DWORD dwFlags, // flags specifying various motion/click variants
DWORD dx, // horizontal mouse position or position change
DWORD dy, // vertical mouse position or position change
DWORD dwData, // amount of wheel movement
DWORD dwExtraInfo // 32 bits of application-defined information
);

..guck mal weiter in der Hilfe

barnti 3. Mär 2004 14:05

Re: Abfragen, ob Mouse down
 
Hi,

habe ich mal so gemacht:

Delphi-Quellcode:
procedure TForm_Main.DBGrid_MasterEndDrag(Sender, Target: TObject; X,
  Y: Integer);
begin
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
...
Leider keine Änderung. Die If-Bedingung liefert weiterhin nur 'true'.

Ich weiß leider nicht weiter. Noch Ideen? Wie kann man dafür sorgen, dass 'GetAsyncKeyState(VK_LBUTTON)<>0'
nicht mehr 'true' liefert?!

Danke für eure Hilfe!

Gruß,

Barnti


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr.

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