[MaxGUI] RequestFile ü. Eventhook aufgeruf............GELÖST

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

d-bug

Betreff: [MaxGUI] RequestFile ü. Eventhook aufgeruf............GELÖST

BeitragMo, März 24, 2008 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Gemeinde.

Aus gegebenen Anlass versuche ich gerade über einen EventHook mit RequestFile eine Datei abzuarbeiten. Requestfile wird über einen Menüeintrag abgerufen. Sobald ich das nun ausführe, den Menüeintrag wähle, und dann den folgenden Dateirequester verlasse, sei es nun mit OK oder Cancel, stürzt das Programm ohne BMax-Fehlermeldung ab. Der Systemeigene "Möchten sie den Fehler melden" Blub-Dialog kommt dann aber doch noch. Also nehme ich einfach mal an, dass ich dort irgend einen ungescheiten Mumpitz treibe, der so nicht sein sollte.
Das ganze spielt sich bei mir im übrigen unter OSX 10.5.2 ab. Wenn das auf Windows funktionieren sollte, dann müsste man mal wieder ein ernstes Wort mit Mark reden.

Folgendes ist ein kleines Testprogramm, dass ich zu diesem Zweck schrieb. Das original Programm ist ungleich größer, verursacht aber den gleichen Absturz.

Code: [AUSKLAPPEN]
SuperStrict

Import maxgui.maxgui
Import maxgui.win32maxguiex
Import maxgui.cocoamaxgui
Import maxgui.fltkmaxgui
Import brl.eventqueue

Const MM_FILE_OPEN:Int = $100

Global Window:TGadget = CreateWindow ("Hooktest",100,100,300,300)
Global Menu:TGadget = CreateMenu ("Testmenue", 0, WindowMenu(Window))
Global MenuItem:TGadget = CreateMenu ("Oeffnen",MM_FILE_OPEN,Menu)

AddHook (EmitEventHook, Hook)

Function Hook:Object (ID:Int, Data:Object, Context:Object)
      Local Event:TEvent = TEvent(Data)
      If ID <> EmitEventHook Or Not Event Then Return data
   
      Select Event.ID
         Case EVENT_WINDOWCLOSE
            If Event.Source = Window End

         Case EVENT_MENUACTION
            Select Event.Data
               Case MM_FILE_OPEN
                  Local blubfile:String = Requestfile ("Blablubtestrequester...","irgendwas")
                  'Return Null
            End Select
      End Select

      Return Data
End Function


Repeat
   WaitSystem ()
Forever


Ein wenig Beratung, Hilfe oder einfach Tips wären sehr nett.
Vielen Dank schon mal!

cheers
  • Zuletzt bearbeitet von d-bug am Mo, März 24, 2008 21:58, insgesamt einmal bearbeitet
 

ChristianK

BeitragMo, März 24, 2008 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert wie es soll, unter Windows. Confused
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

d-bug

BeitragMo, März 24, 2008 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ChristianK, aber ich hätte zuerst mal in den bb.com MaxGui-Bugs gucken sollen. Dieser Bug existiert schon seit über einem Jahr und betrifft nur OSX...

Ich bin stolz auf Mark :/

cheers
 

Dreamora

BeitragMo, März 24, 2008 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht ist es auch kein "Bug" sondern einfach die Art wie OSX funktioniert.
Es gibt auch keinen Grund warum man so etwas in einen EventHook packt. Die sind für asyncrone Ausführungen da eigentlich und ein Menü ist eher kernbestandteil.


sprich das hier geht (unter 10.5 zumindest)
Code: [AUSKLAPPEN]

SuperStrict

Import maxgui.maxgui
Import maxgui.win32maxguiex
Import maxgui.cocoamaxgui
Import maxgui.fltkmaxgui
Import brl.eventqueue

Const MM_FILE_OPEN:Int = $100

Global Window:TGadget = CreateWindow ("Hooktest",100,100,300,300)
Global Menu:TGadget = CreateMenu ("Testmenue", 0, WindowMenu(Window))
Global MenuItem:TGadget = CreateMenu ("Oeffnen",MM_FILE_OPEN,Menu)

AddHook (EmitEventHook, Hook)

Function Hook:Object (ID:Int, Data:Object, Context:Object)
      Local Event:TEvent = TEvent(Data)
      If ID <> EmitEventHook Or Not Event Then Return data
   
      Select Event.ID
         Case EVENT_WINDOWCLOSE
            If Event.Source = Window End

      End Select

      Return Data
End Function
Local event:Int

Repeat
   event = WaitEvent ()

   If EventID() = EVENT_MENUACTION
            Select EventData()
               Case MM_FILE_OPEN
                  Local blubfile:String = RequestFile ("Blablubtestrequester...","irgendwas")


            End Select
   EndIf
Forever

Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

d-bug

BeitragDi, März 25, 2008 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, dass das so funktioniert ist nichts neues, allerdings ist das eine unschöne Lösung, wie mir deucht. Zumal das wohl bei Dropdowns nicht anders zu sein scheint. Im Endeffekt heißt das doch nur, dass man auf OSX am besten niemals Eventhooks benutzen sollte. Was ich wiederum lieber mache als eine OnEvent Methode oder ähnliches.

Hab es zwar jetzt auf die Tour gelöst,in dem ich alles aus dem Hook nahm, außer dem Canvas-Paint und der Scrollbar-Action, aber gefallen will mir das nicht. Wenigstens funktioniert es so!

... und das alles nur um einen Canvas via Scrollbar dynamisch scrollen zu können. :/

cheers

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group