Hi,
es ist viel einfacher als gedacht, die Doku verschweigt, dass GetApplication() genauso arbeitet wie SetAppWindow().
In meinen Tests hatte ich allerdings von XppApplication() abgeleitet und nicht von XbpApplication() und dann knallt es bei dem ersten XbpDialog() Fenster in Create(),
weil dieses nämlich in GetApplication():mainForm das Objekt speichern möchte. Diese iVar gibt es aber bei XppApplication() nicht.
Tomas Braun hat den Fehler in meinem Code in der NEWS-Group gefunden ...
Nun geht das alten Beispiel in dem ich die
CLASS VAR Info ins GetApplication() Objekt eingefügt habe
Code: Alles auswählen
///////////////////////////////////////////////////////////////////////////////
//
// Function-oriented code created by the Xbase++ FormDesigner
// Creation date: 08.12.2014 Time: 13:06:40
//
///////////////////////////////////////////////////////////////////////////////
#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Font.ch"
#PRAGMA LIBRARY( "ascom10.lib" )
procedure AppSys
return
CLASS MyApp FROM XbpApplication // NICHT Xpp !!!!
EXPORTED
CLASS VAR Info
ENDCLASS
PROCEDURE Main
LOCAL nEvent, mp1, mp2, aSize
LOCAL oDlg, oXbp, drawingArea, aEditControls := {}
LOCAL nLastEvent, oPB
GetApplication( MyApp() )
MyApp():info := "Test"
msgbox(MyApp():info,"1")
msgbox(GetApplication():info,"2")
IF IsMemberVar(XbpDialog(),"ClientSize") == .T.
aSize := {0,0}
ELSE
aSize := {154,155}
ENDIF
oDlg := XbpDialog():new( AppDesktop(), , {636,703} , aSize, , .F.)
IF aSize[1] == 0 .AND. aSize[2] == 0
oDlg:ClientSize := {300,400}
ENDIF
oDlg:taskList := .T.
oDlg:title := "New form"
oDlg:create()
drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "8.Arial" )
oXbp := XbpMLE():new( drawingArea, , {16,50}, {280,300}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
oXbp:tabStop := .T.
oXbp:editable := .f.
oXbp:wordWrap := .t.
oXbp:horizScroll := .f.
oXbp:create()
logger(oXbp) // Logger initialisieren
oXbp := XbpPushButton():new( drawingArea, , {16,16}, {100,24}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
oXbp:caption := "Pushbutton"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| logger("Activate ***") }
oXbp:lbDblClick := {|| logger("lbDblClick") }
oXbp:lbClick := {|| logger("lbClick") }
oXbp:lbDown := {|| logger("lbDown") }
oXbp:lbUp := {|| logger("lbUp") }
oPB := oXbp
CenterControl(oDlg)
oDlg:show()
SetAppFocus(oDlg)
nEvent := xbe_None
nLastEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
if oXbp = oPB .and. nEvent = xbeP_Activate
if nLastEvent+0.30 > seconds()
nEvent := xbe_None
tone(1000,3)
else
nLastEvent := seconds()
endif
endif
if nEvent # xbe_None
oXbp:handleEvent( nEvent, mp1, mp2 )
endif
ENDDO
RETURN
function logger(cTxt)
static oLog := NIL
if valtype(cTxt)="O"
oLog := cTxt
else
oLog:setData( oLog:editBuffer()+chr(13)+chr(10)+time()+chr(9)+cTxt )
endif
RETURN NIL