komme nicht aus der Event Schleife [erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

komme nicht aus der Event Schleife [erledigt]

Beitrag von AUGE_OHR »

hi,

eine Rebar kann ja ein Chevron enthalten wo ich dann eine Menu habe.
nun benötige, für den ausführenden Codeblock, leider eine PRIVATE und damit eine eigene Event Schleife "in" meinem native Control.
( was kein Top-Level Windows ist wo ich ein Xbase++ Event hin schicken kann )

Code: Alles auswählen

      ::oMenu:PopUp ( ::oMain:drawingArea, aPopPos, 0 , XBPMENU_PU_DEFAULT )

      nEvent := xbe_None
      ::lMenuExit := .F.
      DO WHILE !::lMenuExit
         nEvent := AppEvent ( @mp1, @mp2, @oXbp,100 )
         DO CASE
            CASE nEvent == xbe_None

            CASE nEvent == xbeP_Quit
               QUIT   // AppQuit()
            CASE nEvent == xbeMyRB_Takeit
               EXIT
            CASE nEvent == xbeP_Keyboard .AND. mp1 = xbeK_ESC
               EXIT
         OTHERWISE
            oXbp:HandleEvent ( nEvent, mp1, mp2 )
         ENDCASE
      ENDDO
      ::oMenu:destroy()
      TONE(1234)

   ELSE
      IF lToolbar = .T.
*         Msgbox("Problem mit XbpToolbar()")
         TONE(1234)
      ENDIF
   ENDIF

   // while PRIVATE
   RELEASE oTransfer
   RELEASE nMenuItem

   isRunning := .F.
RETURN oRet

METHOD DXE_ReBar:MenuExit()
   ::lMenuExit := .T.
   PostAppEvent(xbeP_Keyboard, xbeK_ESC,,self)
RETURN self
das ganze funktioniert auch wenn ich einen Menu Eintrag auswähle aber wenn ich mit ESC abbreche ( Popup Menu wird geschlossen ) dann bin ich immer noch "in" der Event Schleife vom native Control.

tatsächlich kommt nun das ESC in der Main Event Schleife an*** aber ohne die Event Schleife im native Control kennt er meine PRIVAT nicht (auch wenn ich die nicht RELEASE).

***
Frage : liegt es daran das ich ::oMain:DrawingArea als Parent vom Popup-Menu benutze ?

Da er in der Main Event Scheife ankommt hab ich die nun so erweitert

Code: Alles auswählen

         CASE nEvent == xbeP_Keyboard .AND. mp1 = xbeK_ESC
            oDlg:oRebar:MenuExit()
ich rufe also die Method oMenuExit() auf welcher mir die iVar ::lMenuExit := .T. setzt ... und versuche auch noch ein ESC zu posten ...

ich muss aber 2 x ESC drücken damit er die Event Schleife verlässt und ich einen TONE() höre ... warum ?
spätestens beim "Timeout" müsste er doch merken das ::lMenuExit = .T. ist und die Schleife verlassen ... oder was übersehe ich ?
Zuletzt geändert von AUGE_OHR am Do, 12. Mär 2015 3:56, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: komme nicht aus der Event Schleife

Beitrag von AUGE_OHR »

AUGE_OHR hat geschrieben:Da er in der Main Event Scheife ankommt hab ich die nun so erweitert...
Irrtum ... weil ich 2 X ESC gedrückt hatte und dachte ...
AUGE_OHR hat geschrieben:ich muss aber 2 x ESC drücken damit er die Event Schleife verlässt und ich einen TONE() höre ... warum ?
also mal Code zum "Problem" damit man es ausprobieren kann

Code: Alles auswählen

#include "Xbp.ch"
#include "Appevent.ch"

PROCEDURE AppSys
RETURN

PROCEDURE MAIN
LOCAL nEvent, mp1, mp2, oXbp
LOCAL oDlg
LOCAL lMenuExit := .F.
LOCAL oMenu
LOCAL aPopPos  := {110,100}

   oDlg         := XbpDialog():new(AppDeskTop() ,, {0,0}, {300,200},,.F. )
   oDlg:taskList := .T.
   oDlg:title   := "RbDown on o:DrawingArea to PopUp Menu"
   oDlg:create()

   oMenu     := XbpMenu():new(oDlg:drawingArea):create()
   oMenu:title  := "PopUp Menu"

   oMenu:addItem( { "~First  Item", {|| Msgbox("First") } } )
   oMenu:addItem( { "~Second Item", {|| Msgbox("Second")} } )

//
// only LbDown seems not to work ?
//
*      XBPMENU_PU_HCONSTRAIN + XBPMENU_PU_VCONSTRAIN + ;
*      XBPMENU_PU_MOUSE_LB   + XBPMENU_PU_MOUSE_RB   + ;
*      XBPMENU_PU_KEYBOARD )

   oDlg:DrawingArea:RbDown := {|| oMenu:PopUp(oDlg:drawingArea,aPopPos,0,XBPMENU_PU_MOUSE_LB ) }

   CenterControl(oDlg)
   oDlg:Show()
   SetAppFocus(oDlg)

   lMenuExit := .F.
   nEvent := xbe_None
   DO WHILE !lMenuExit
      nEvent := AppEvent ( @mp1, @mp2, @oXbp,100 )
      DO CASE
         CASE nEvent == xbe_None
//
// always .F.
//
*             IF oMenu:visible
*             ELSE
*                EXIT
*             ENDIF

         CASE nEvent == xbeP_Quit
            QUIT
//
// need 2 x ESC to work when PopUp Menu is open
//
         CASE nEvent == xbeP_Keyboard .AND. mp1 = xbeK_ESC
            lMenuExit := .T.
            EXIT
      OTHERWISE
         oXbp:HandleEvent ( nEvent, mp1, mp2 )
      ENDCASE
   ENDDO
   oMenu:destroy()
   oDlg:destroy()
   TONE(1234)

RETURN
das was da abläuft ist also "normal" ... aber ich möchte es "anders".
ich suche nach einer Lösung wo ich mit 1 x ESC bis zum TONE() komme wenn der User ein offenes PopUp Menu mit ESC schliesst.

es wäre auch akzeptabel wenn er, in einem offenen Menu, kein ESC annimmt (nur XBPMENU_PU_MOUSE_LB)

irgend jemand eine Idee wie man das hin bekommt ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: komme nicht aus der Event Schleife [erledigt]

Beitrag von AUGE_OHR »

manchmal kann es so einfach sein wenn man in das Help File guckt

Code: Alles auswählen

xbeMENB_EndMenu	Der Anwender hat die Menüauswahl beendet 

Slot 	:endMenu := {| uNIL1, uNIL2, self | ... } 

Methode 	:endMenu () --> self 
gruss by OHR
Jimmy
Antworten