Tooltip Problem
-
-
Danke
Wird noch etwas dauern bis ich das angehen kann.
lg silviu
-
Ich hab mir mal deine Links angeschaut und hab folgende Klasse erstellt:
#pragma once using namespace System::Threading; ref class keyEventThread { public: static void waitOnKey() { while(1) { MessageBox::Show("Test Thread"); } } };
Aufgerufen und gestartet wirds mit:
Thread^ keyThread = gcnew Thread( gcnew ThreadStart( &keyEventThread::waitOnKey ) ); keyThread->Start();
Verstehe ich auch, aber ich weis nicht wie ich ohne Hooks systemweit ein Event(delegate) für die Taste F4 anlegen kann. Ich möchte immer wenn die Taste F4 gedrückt wird meine Form->Visible auf true oder false setzten.
Also ne art ein/ausblende mechanismus.
-
Sag mal aber ich würde doch nicht für ein Form(Fenster) Minimieren/Schliessen/Wiederherstellen Visible verwenden sondern Hide() und ShowDialog()
Wegen dem anderen muss auch erstmal suchen welche Schnistelle das in .Net ist die Allgemeine Tasenschläge Informationen immer abrufen kann.
-
-
Hab mich daweil noch nciht so mit Hide() und ShowDialog() beschäftigt dachet ist das gleiche ob Hide() oder Visible = false
Danke das du wegen der Tastaturabfrage suchst ich hab daweil auch gegoogelt aber noch nix gefunden.
lg seek
-
seek1338 schrieb:
Hab mich daweil noch nciht so mit Hide() und ShowDialog() beschäftigt dachet ist das gleiche ob Hide() oder Visible = false
Danke das du wegen der Tastaturabfrage suchst ich hab daweil auch gegoogelt aber noch nix gefunden.
lg seek
http://msdn.microsoft.com/de-de/library/system.windows.input.keyboard.aspx
Na Visible ist, nur nicht dem Benutzer sichtbar machen oder doch, aber es ist nicht dann als Minimiert registriert. Dass kan dann Logische nachfolgende fehler haben, so wird dann ein Event was eintritt wenn das Fenster minimiert wird nicht eintreten, weil es ja, nur nicht dem Benutzer anzeigen ist. Ich denke Hide() behinhaltet aber genauso Visible = false aber eben noch mehr.
-
Danke hab auch das mitm Keybord gefunden, aber...
http://msdn.microsoft.com/de-de/library/system.windows.input.aspx
Ich hab kein sollchen Namespace wie gibts das? Ich find es auch nicht unter Verweise hinzufügen? *g*
Vll weist du wo man das hinzufügen kann. Mein Projekt ist auf .net 3.5 ausgelegt, braucht ma nda vielleicht ein Update?
Danke für deine flotten antworten & hilfe
lg seek
-
Das ist WPF und da wirst Du es schwierig haben mit C++/CLI, da der Designer nur Forms unterstützt.
Also das ist ganz einfach der falsche Anhaltspunkt...
Simon
-
LiGERWooD schrieb:
Ich denke Hide() behinhaltet aber genauso Visible = false aber eben noch mehr.
Die aktuelle Implementation von Show() und Hide() sieht so aus:
public void Show() { this.Visible = true; } public void Hide() { this.Visible = false; }
Simon
-
Also dann weiß ich auch nicht, sorry seek1338. Vielleicht gibt es ja noch eine stelle in der Registrierungsdatenbank von Windows wo immer der letzte Tastenschlag hinterlegt wird. Dann bräuchte man diesen Schlüssel oder Wert immer nur regelmäsig prüfen auf "F4". Aber da könnten jetzt hier eigentlich auch mal die Professionalen in Visual C++ helfen.
-
Also leider hat noch kein c++ Guru geantwortet
Ich hab mal folgendes gemacht ich weis nicht ob das gut is abre ich bekomm keine fehler:
also diese Keyboard Class hat mich interessiert also hab ich die dazugehörige Dll "PresentationCore.dll" als Verweis eingerichtet und die "WindowsBase" um die Key Enumaration zu haben.
Folgenden code habe ich in einem Timer:
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { if(Keyboard::IsKeyDown(Key::F4)) MessageBox::Show("F4 down"); }
Mein Problem ist das reagiert nicht egal ob ich in der Form bin und das drücke oder Fokus außerhalb habe.
Kann mir bitte wer sagen wieso das nicht funktioniert wenn ich die Dll die das zur aufgabe hat und keine Fehler sind?
lg seek
-
Baue dass doch bitte mal in den Thread Process ein, mit einer endlos schleife (while) und dadrinn die prüfung. Also Keyboard::IsKeyDown wiedergibt ein bool (boolean)?
-
Ich denke ich weiß warum es nicht funktioniert: Weil genau die Miliesekunde zu erwischen in der, der User F4 gedrückt hat ist so unwarscheinlich wie groß das Intervall des Timers ist. Also jede 100ms bedeutet min. 99 mal die chanche das es verpasst wird.
-
Gute Idee hab ich schon versucht aber dann bekom mich die Fehlermldung Thread muss STA sei damit es den aufruf machen kann.
Hab leider nix gefunden wie ich das zum STAThread machen kann.
Wegen dem verfehlen hab ich mir auch schon gedacht also hab ich den timer sogar auf 1 runtergestellt und ziemlcih schnell gedrückt außerdem hab ich noch folgendes probiert:
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { if(Keyboard::IsKeyDown(Key::X) > 0) MessageBox::Show("F4 down"); if(Keyboard::IsKeyToggled(Key::X) > 0) MessageBox::Show("F4 toogle"); if(Keyboard::IsKeyUp(Key::X) > 0) MessageBox::Show("F4 UP"); }
Leider reagiert er auf überhaupt keinem Status, anderen Key hab ich auch ausprobiert auch kein erfolg
lg silviu
-
Sorry falsch kopiert:
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { if(Keyboard::IsKeyDown(Key::F4)) MessageBox::Show("F4 down"); if(Keyboard::IsKeyToggled(Key::F4)) MessageBox::Show("F4 toogle"); if(Keyboard::IsKeyUp(Key::F4)) MessageBox::Show("F4 UP"); }
Edit: KeyUp regiert immer... ich sollt zuerst alles doppelt testen bevor ich da was rein schreib
lg
-
Ja der Process für den Thread muss static sein, also mach es eben und ich denke einmal IsKeyDown reicht. Und nur weil du auf 1ms schaltest heißt noch lange nciht das es dann so in der Laufzeit wirklich passiert. Je nach Rechnerleistung eher 25ms. Dazu kommt es werden pro 1ms bestimmt jede menge Taktungen gemacht. Also chanche gleich NULL
-
Also hab mal die klasse static gemacht (ich hoffe das hast du gemient)
Folgender Fehler:
Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in PresentationCore.dll aufgetreten.Zusätzliche Informationen: The calling thread must be STA, because many UI components require this.
Code:
#pragma once using namespace System::Windows; using namespace System::Threading; using namespace System::Windows::Input; static ref class keyEventThread { public: static void waitOnKey() { while(1) { if(Keyboard::IsKeyDown(Key::F4)) //Debug haltepunkt für Fehler MessageBox::Show("F4 down"); } } };
-
seek1338 schrieb:
Also hab mal die klasse static gemacht (ich hoffe das hast du gemient)
Folgender Fehler:
Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in PresentationCore.dll aufgetreten.Zusätzliche Informationen: The calling thread must be STA, because many UI components require this.
Code:
#pragma once using namespace System::Windows; using namespace System::Threading; using namespace System::Windows::Input; static ref class keyEventThread { public: static void waitOnKey() { while(1) { if(Keyboard::IsKeyDown(Key::F4)) //Debug haltepunkt für Fehler MessageBox::Show("F4 down"); } } };
Zeig mir bitte mal den Thread deklartions-/instanzierungssatz.
-
So sieht der aus - 1zu1 MSDN Copy
Thread^ keyThread = gcnew Thread( gcnew ThreadStart( &keyEventThread::waitOnKey ) ); keyThread->Start();
Naja auch egal im Timer müsste wenigsten das Toogle Event funktionieren wenn ichs die ganze zeit gedrückt halte - tuts aber auch ned
lg