Wie die Position des Mauszeigers ermitteln?
-
Wie gesagt das ist für mich neuland.
Habe vorher 1 Jahr mit Delphi gearbeitet und will mir nun c++ aneignen.Wie bekomme ich TMouse nun eigentlich hin?
Ich meine wenn ich mit dem Mauszeiger auf meinem Desktop bin.Was muss ich machen damit mein Programm 3 sekunden wartet und dann erst weiter macht?
-
Was hat das denn bitte mit C++ zu tun? VCL ist VCL.
Und wie du TMouse hinbekommst... hmm... könntest ja einfach mal "Mouse" schreiben und nen Pfeil dahinter machen. Ach, schick mir doch einfach dein Projekt, dann mach ich das schon für dich. Ach nein, lass nur, ich hols besser gleich ab.

Mit nem Timer?
-
Entschuldige die dummen Fragen.
Danke, das mit Mouse-> funktioniert ja aber wie kann ich das auf meinen Desktop beziehen?
Zurzeit bekomme ich es nur mit OnMouseMove hin.
Hier mal meinen Quelltext.//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { Edit1->Text = IntToStr(Mouse->CursorPos.x); Edit2->Text = IntToStr(Mouse->CursorPos.y); } //---------------------------------------------------------------------------Wie gesagt ich will lernen und verstehen.
-
Oh sorry das OnMouseMove bezieht sich auf die Form1.
-
Du brauchst ja eigentlich kein Mausbewegungs-Ereignis. Kannst auch nen Timer mit nem 100er-Intervall oder so nehmen. Da könntest du dann auch das 3-Sekunden-Problem einbauen
-
Ich will meine Form1 verstecken (visible=false). Und erst dann anzeigen, wenn der Mauszeiger auf dem Desktop mindestens 3 sekunden bei X oder Y 0 steht.
Für die Form1 bekomme ich das ja ohne Probleme hin, aber das sich die Cursorposition auf den Desktop bezieht ist für mich als Anfänger das schwierige.Hat vieleicht jemand einen Hinweis oder ein beispiel Quellcode?
Die Hilfe von Broland bringt mich auch nicht weiter, da steht zwar viel aber nicht genau wie ich es anwenden muss.
-
Hi!
Gehts wenn du die Form der Größe deines Desktops angleichst und im Hintergrund verschwinden lässt, also durchsichtig machst? Dann müsste es eigentlich gehen, oder?
mfg
Tom
-
Das wäre ja eine der aufwendigsten Möglichkeiten die ich mir vorstellen kann. HEZ hat ja schon eine vernünftige Variante genannt (TTimer und TMouse)
-
Könntet Ihr mir mal halfen.
Mit TMouse komme ich sch klar.
Aber wo soll ich denn die Abfrage der Position reinschreiben.
Ich denke es mir ungefähr so:-Aller 1 sekunde prüfen ob X oder Y position von Mauszeiger 0 ist
-Wenn JA dann warte 3 sekunden und überprüfe dies nochmal
-Wenn dann immer noch X oder Y 0 ist
-dann Zeige Fenster an.Nach diesem ansatz bräuchte ich dann zwei Timer oder?
Wie muss ich mit dem Timer arbeiten, kleiner beispielcode wäre nicht schlecht.
Und muss sich TMouse auf den Desktop beziehen wenn ja wie?
-
Also ich hab es geschafft.
Doch leider fehlen mir noch die drei sekunden zum warten.//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { TPoint pt; GetCursorPos(&pt); // X-Position als Integer: Edit1->Text=IntToStr(pt.x); // Y-Position als Integer: Edit2->Text=IntToStr(pt.y); if ((pt.x==0) || (pt.y==0)) { Label1->Visible=true; } else Label1->Visible=false; } //---------------------------------------------------------------------------Der Timer1 ist auf 100 gesetzt.
Bitte helft mir.
-
Versuchs mal so:
Du hast 2 Timer. Beide stellst du auf 3000 ms (=3 Sek.)
Bei Timer1 speicherst du die pos.x und pos.y in den Variablen X und Y und dann im Timer1-Event immernoch, wird dann Timer2 gestartet (der ja ebenfalls auf 3000 ms gestellt ist).
Timer 2 wird dann nach 3 Sek. die Variablen X und Y mit den aktuellen pos.x und pos.< Werten vergleichen (if
) und wenn die dann übereinstimmen, dann öffnet sich das Fenster.