![]() |
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 |
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? |
Re: Abfragen, ob Mouse down
Hi,
nein ich meinte schon im Programm. Dazu folgendes: ich starte einen Drag-Vorgang folgendermaßen:
Delphi-Quellcode:
ich realisiere so ein drag and drop im DBGrid...
procedure TForm_Main.DBGridColEnter(Sender: TObject);
begin // hier soll hin 'wenn rechte mousetaste gedrückt dann...' DBGrid_Master.BeginDrag(false); end; Eine globale Variable würde ich gern vermeiden... Gruß, Barnti |
Re: Abfragen, ob Mouse down
@barnti
Wie wär´s damit:
Delphi-Quellcode:
if GetAsyncKeyState(VK_RBUTTON) <> 0 then
// Key ist down |
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:
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...?!
procedure TForm_Main.DBGrid_MasterColEnter(Sender: TObject);
begin if (GetAsyncKeyState(VK_LBUTTON )<> 0) then begin DBGrid_Master.BeginDrag(false); end; end; So geht es nocht nicht richtig. Weiß jemand etwas weiter? Gruß, Barnti |
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; |
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 |
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 ? |
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; |
Re: Abfragen, ob Mouse down
Hi,
habe ich bereits probiert. Leider kein Erfolg... Gruß, Barnti |
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; |
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 |
Re: Abfragen, ob Mouse down
Hi,
habe ich mal so gemacht:
Delphi-Quellcode:
Leider keine Änderung. Die If-Bedingung liefert weiterhin nur 'true'.
procedure TForm_Main.DBGrid_MasterEndDrag(Sender, Target: TObject; X,
Y: Integer); begin mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); ... 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 07: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