Tooltip Problem
-
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
-
seek1338 schrieb:
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
LOL
Was fehlt dir hier auf "&keyEventThread::waitOnKey"? Es sind die :: das geht nicht, dass musst anders erreichbar machen
-
Thread funktioniert normal das hab ich schon getestet. Nur wenn ich die System::Windows::Input::Keyboard static Methoden instanziere funktioneirts nicht.
Ich bin ein zu großer c++ noob um das so zu lösen. Ich werde einfach ne kleine headerdatei für Hooks schreiben und dann hat sich das problem gelöst.
lg seek
-
guch mal wenn du "The calling thread must be STA, because many UI components require this" in google eingibst findest du schon die Antworten.
-
Du hast wirklich eine Delegate von Keyboard erstellt?
-
Also ich hab dien rat befolgt und folgendes ergänzt:
keyThread->SetApartmentState(ApartmentState::STA);
Der Thread funktioniert jetzt.
Ich hab kein Delegate eingerichtet muss man das wenn ich die abfrage direkt mache mit :
static ref class keyEventThread { public: static void waitOnKey() { while(1) { if(Keyboard::IsKeyDown(Key::Z)) MessageBox::Show("F4 down"); if(Keyboard::IsKeyToggled(Key::Z)) MessageBox::Show("F4 down"); } } };
While(1) der Thread läuft die ganze zeit durch... also müssten auch die abfragen IsKeyEvents erkannt werden... oder nicht?
lg seek
-
Da habe ich voher schon bedenken gehabt! Was heißst while(1) ? mach mal lieber:
do {
...
down = true;
...} while(down == true);
-
Sag mal ich bin mir sicher das die Keyboard Klasse auch Events, wenn eine taste gedrückt wurde, hat.
-
Also
while(1) { //toDo }//endlosschleife
ist das gleiche wie
while(true) { //toDo }//endlosschleife
0 = true
0 = falseDie Klasse hat delegaten aber ich hab kien plan wie man die erstellen und benutzen kann
http://msdn.microsoft.com/de-de/library/system.windows.input.keyeventhandler(VS.85).aspx
lg seek
-
mach mal if(isKeyDown(Key::F4) == true)
-
-
Das Keyboard Event Problem habe ich neu reingepostet http://www.c-plusplus.net/forum/viewtopic-var-p-is-1753093.html#1753093 damit alle mal das durchlesen, ich hoffe das mir geholfen werden kann.
lg seek