MouseDown-Problem mit Bild-Öffnen-Dialog
Übersicht

![]() |
GinaBetreff: MouseDown-Problem mit Bild-Öffnen-Dialog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Ihr Lieben,
ich bräuchte mal bitte Eure Hilfe. Für mein aktuelles kleines Projektchen (geschrieben mit Blitz3D) war ich auf der Suche nach einem Bild-Öffnen/Speichern-Dialog und wurde über das Forum hier fündig bei EPS. Der Aufruf funktioniert einwandfrei. Nachdem jedoch der Dialog wieder geschlossen wird (egal mit welchem Button), ist in meinem Programm MouseDown(1) aktiv. Und zwar so lange, bis ich mit der Maus irgendwo hinklicke. Ich speichere MouseDown(1) bei jedem Schleifendurchlauf ganz brav in einem Feld. Dieses Feld auf 0 zu setzen, nützt leider gar nichts. Es ist so, als wenn meine Maustaste klemmen würde. Ich habe auch schon FlushMouse() probiert. Erfolglos. ![]() Als erstes habe ich natürlich den Aufruf des Dialogs einzeln getestet, um eigene Fehler auszuschließen. Ihr müsst Euch also nicht mit meinem kompletten Quellcode zur Erstellung von Häkelmustern rumquälen... ![]() BlitzBasic: [AUSKLAPPEN] If GfxModeExists(1024,768,32) Then (Die Deklaration der verwendeten Variablen habe ich mir mal gespart, damits nicht zu lang wird ![]() Die auskommentierte Zeile ruft den Datei-Dialog mit Blitz+ auf, aber da geht meine Framerate so extrem runter. Ansonsten funktioniert dieser ohne MouseDown-Problem. Den Autor der dll habe ich bereits kontaktiert und wir mussten feststellen, dass er unter Win7 dieses Problem nicht hat und wir haben beide keine Idee, woran das liegen könnte. Ich benutze Win 8.1. In meiner Verzweiflung habe ich in mühevoller Kleinstarbeit selbst eine dll in Delphi geschrieben, die mir die Dialoge zur Verfügung stellt. Als sie dann endlich lief, musste ich leider feststellen, das mit ihr das gleiche MouseDown-Problem auftritt. Seine und auch meine dll benutzen den gleichen klassischen Dialog der WinApi (den aus XP-Zeiten, nicht den neuen seit Vista). Meine Vermutung ist daher, dass es irgendetwas mit der Kombination dieses "alten" Dialoges auf Win 8.1 in Verbindung mit Blitz3D zu tun hat. Hat jemand von Euch schonmal das gleiche Problem gehabt und kennt eine Lösung dafür? Oder hat irgendeine Idee, die ich noch ausprobieren könnte? Oder kennt jemand eine dll, die mir den "neuen" (Vista,Win7/8) Bild-Öffnen/Speichern-Dialog liefern würde? Ich danke Euch ganz dolle. Bis bald. LG, Gina. |
||
www.jk-spiele.de |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde das Fenster nach dem Schließen des Dialogs wieder per WinAPI aktivieren (oder ein Mausklick senden, wenn es anders nicht geht). | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Xeres,
Danke für Deine schnelle Antwort. Wie meinst Du das mit dem Fenster aktivieren bitte? Soll ich in der dll noch etwas hinzufügen, das mein BlitzBasic-Programm-Fenster wieder aktiviert? Dazu müsste ich wohl erstmal herausfinden "wer" die dll aufgerufen hat... Oder soll ich im BlitzBasic-Code noch etwas hinzufügen, was das erledigt? Das mit dem simulierten Mausklick habe ich auch schon überlegt. So ganz wohl ist mir dabei jedoch nicht. Schließlich scheint ja irgendetwas nicht in Ordnung zu sein und ob der Klick wirklich alles wieder ins Reine bringt...? Das würde ich als allerletzten Ausweg in Betracht ziehen. LG, Gina. |
||
www.jk-spiele.de |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest ein Maus-Loslassen simulieren.
Bei dem Befehl der den Mausklick simuliert musst du ja zuerst einen Mausdruck simulieren und dann ein Mausloslassen. Probier mal ob es reicht in der DLL nur das Mausloslassen zu simulieren. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich dachte an sowas wie SetActiveWindow (msdn) - aber du kennst dich mit der WinAPI besser aus.
Entweder wird die Mausinput nur richtig abgefragt, wenn das Fenster aktiv ist, oder ein Mausklick-event bringt - was auch immer da aus dem Lot gerät - wieder in Ordnung. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi DAK,
vielen Dank für Deinen Tipp. Ich habe das gleich mal ausprobiert, nur leider zeigt das keine Wirkung. Das Problem scheint zeitlich erst danach aufzutreten, so dass ich es mit diesem Trick nicht lösen kann. ![]() Hi Xeres, ah, ok, danke. Ich hab mich mal ein wenig dazu belesen und bin doch tatsächlich auf einen Artikel gestoßen, der genau mein Problem beschreibt. Mit meinen alten Suchbegriffen wäre ich nie dort gelandet. Es scheint etwas mit dem Wechsel des Focus zu tun zu haben. Ein Konflikt entsteht immer genau dann, wenn ein "manueller" Focuswechsel mit einem "automatischen" zusammen trifft. Win 8.1 scheint ja in einigen Dingen sehr empfindlich zu sein und mein Bauchgefühl sagt mir, dass das bei mir zutrifft. Deshalb wirkt auch der Tipp von DAK nicht, weil der zweite Focuswechsel erst nach dem Schließen des Dialogs auftritt und damit nach Verlassen der dll. Wenn ich den Focus an das aufrufende Programm zurück geben will, brauche ich dessen Namen. Ich könnte den Namen natürlich fix vorgeben oder ihn als Parameter anfordern... hmmm... *grübel* Ich muss mir die vorgeschlagene Lösung im o.g. Artikel nochmal genau durch den Kopf gehen lassen. Jetzt bin ich dafür zu müde. War ein anstrengender Arbeitstag und es ist ja auch schon spät... ![]() Herzlichen Dank Euch beiden. Ich meld mich wieder. Für weitere Vorschläge bin ich natürlich immer zu haben... ![]() LG, Gina. |
||
www.jk-spiele.de |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannstas doch eh sauber aus dem BB-Code raus machen. Mach in BB eine Art Wrapper-Funktion, die zuerst den Dialog über die DLL aufruft und direkt danach den Maustrick macht. Im Programm selbst rufst du dann immer die Wrapper-Funktion auf, und nicht die DLL-Funktion. Das sollte eigentlich eh sauber genug sein.
Ich hab das auch immer so gemacht, wenn ich was mit DLLs machen wollte, wo ich mit Blitz in Konflikt geraten bin. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group