ich versuche mich gerade mal näher mit der Eventloop zu beschäftigen und versuche von einem Fenster zum nächsten Nachrichten zu schicken.
Laut Dokumentation muss man dazu "nur" ein neues Event erzeugen und diesem die Absenderadresse des Xbase Parts mitteilen das das Event "empfangen" soll.
Versuche ich das ganze aber mit einem Fenster kommt die Nachricht im Fenster an das Sie loschickt, egal an welches Fenster sie adressiert ist.
Hier mal mein Code:
Code: Alles auswählen
#DEFINE _MyEvent xbeP_User + 1
PROCEDURE APPSYS()
RETURN
PROCEDURE MAIN()
LOCAL ;
nEvent := 0 , ;
mp1 := 0 , ;
mp2 := 0 , ;
oXbp := NIL , ;
oButton := NIL , ;
oLabel := NIL , ;
oLBLMouse := NIL , ;
drawingArea := NIL
* Fenster erzeugen und anzeigen
oDlg := XbpDialog():new( ,, {700,300}, {300,200} )
oDlg:title := "Erstes Fenster"
oDlg:taskList := .T.
oDlg:create()
drawingArea := oDlg:drawingArea
oLabel := XbpStatic():new( drawingArea ,, {50,100}, {180,30} )
oLabel:caption := 'Text Fenster 1'
oLabel:create()
oButton := XbpPushButton():new( drawingArea ,, {50,50}, {180,30} )
oButton:caption := "Fenster öffnen"
oButton:create()
oButton:activate := {|| fenster( @oDlg) }
oDlg:show()
* Event loop
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
IF nEvent == _MyEvent
oLabel:setCaption(mp1)
ENDIF
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN
FUNC RegisterXClass
RETURN "****************"
PROCEDURE fenster( oParentEvent)
LOCAL ;
nEvent := 0 , ;
mp1 := 0 , ;
mp2 := 0 , ;
oXbp := NIL , ;
oButton := NIL , ;
drawingArea := NIL
* Fenster erzeugen und anzeigen
oDlg := XbpDialog():new( ,, {200,300}, {300,200} )
oDlg:title := "Zweites Fenster"
oDlg:taskList := .T.
oDlg:create()
drawingArea := oDlg:drawingArea
oButton := XbpPushButton():new( drawingArea ,, {50,50}, {180,30} )
oButton:caption := "Message senden"
oButton:create()
oButton:activate := {|| PostAppEvent( _MyEvent, 'Text aus Fenster 2', ,oParentEvent) }
oDlg:show()
* Event loop
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
IF nEvent == _MyEvent
MsgBox("Doch im Zweiten Fenster gelandet")
ENDIF
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN