hi,
Tom hat geschrieben:Wie willst Du diese Handles dann einsetzen? Die Xbase-Doku sagt, dass Handles auf der Xbase-Sprachebene nicht verwendet werden können.
Code: Alles auswählen
// Diese Zeile "übersetzt" XbpTabpage => HX_Tabpage
//
#xtranslate XbpTabpage => HX_Tabpage
//
// Tabcontrol Manager need as "Parent"
//
oTab := HX_Tab():new(oDlg:drawingArea,,{0,0}, {600,480-50} )
oTab:create()
//
// here are the (HX_)Tabpages
//
FOR i := 1 TO 26
oXbp := XbpTabpage():new(oTab , , {0, 10}, {600-100,480-150} )
oXbp:caption := " &"+CHR(i+64)+" "
oXbp:Icon := "star32.ico"
oXbp:create()
NEXT
SetAppWindow(oDlg)
SetappFocus(oDlg)
// Event loop = Programmsteuerung
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:HandleEvent( nEvent, mp1, mp2 )
ENDDO
so das ist das Demo. und hier nun die Class
Code: Alles auswählen
// Tabcontrol Manager need as "Parent"
//
CLASS HX_Tab FROM XbpActiveXControl
...
METHOD HX_Tab:Init(oParent, oOwner, aPos, aSize, aPP, lVisible)
::XbpActiveXControl:Init(oParent,oOwner, aPos, aSize)
::CLSID := "{5BB60DA3-2838-4538-A28E-B114BD160290}"
::License := "Suite Controls Copyright (c) 2003-2009 Codejock Software"+ Chr(13)+Chr(10) +;
"PRODUCT-ID: Codejock.Controls.ActiveX.v13.0"+ Chr(13)+Chr(10) +;
"VALIDATE-CODE: NSR-VTA-EXQ-TPT"
::lfirst := .T.
RETURN self
METHOD HX_Tab:Create(oParent, oOwner, aPos, aSize, aPP, lVisible)
::XbpActiveXControl:Create(oParent,oOwner, aPos, aSize)
//
// define MapEvent
//
::DefEvent()
RETURN self
*********************************************************************
//
// here now TabPAGE
//
CLASS HX_TabPage FROM XbpActiveXControl
EXPORTED:
CLASS VAR oTabControl
CLASS VAR nIndex
CLASS METHOD initClass()
METHOD Init()
METHOD Create()
METHOD DefEvent()
//
// Property from original XbParts ASSIGN METHOD
//
VAR TabActivate // Xbase++
METHOD Tab2Activate()
VAR Caption // Xbase++
VAR x_Caption // Gets or sets the text associated with this control.
ASSIGN METHOD _Caption() VAR x_Caption
VAR Icon // Xbase++ NEW
VAR x_Icon2 // Gets or sets the Icon associated with this control.
ASSIGN METHOD _IPicture() VAR x_Icon2
VAR AutoSize
ASSIGN METHOD _AutoSize VAR AutoSize
VAR HX_Tab // Instance of activeX
ENDCLASS
CLASS METHOD HX_TabPage:initClass()
::nIndex := 0
RETURN self
METHOD HX_TabPage:Init(oParent, oOwner, aPos, aSize, aPP, lVisible)
::oTabControl := oParent
//
// das geht hier NICHT
//
* ::XbpActiveXControl:Init()
* ::XbpActiveXControl:Init(oParent, oOwner, aPos, aSize)
* ::CLSID := "{DC8335FD-F292-4A6B-9CAF-4E8EBDC5BB55}"
//
// also über die Class VAR ::HX_TAB
//
::HX_Tab := XbpActiveXControl():New(::oTabControl,,{0,0},{0,0})
::HX_Tab:CLSID := "{DC8335FD-F292-4A6B-9CAF-4E8EBDC5BB55}"
* ::HX_Tab:CLSID := "Codejock.TabControlPage"+HX_VERSION()
RETURN self
METHOD HX_TabPage:Create(oParent, oOwner, aPos, aSize, aPP, lVisible)
LOCAL oTab
LOCAL hWnd := 0
LOCAL h1Wnd := 0
LOCAL oXbp
IF ::Icon == NIL
::Icon := "DUMMY.ICO"
ENDIF
IF ::Caption == NIL
::Caption := ""
ENDIF
//
// hier nun das :Create
//
::HX_Tab:create()
//
// und davon das Handle. beide sind gleich laut Logfile
//
hWnd := ::HX_Tab:hWnd
h1Wnd := ::HX_Tab:GethWnd()
SET ALTER ON
SET CONSOLE OFF
? hWnd,h1Wnd
SET CONSOLE ON
SET ALTER OFF
//
// SubscribeEvent() EvSelectedChanged abschalten
//
::oTabControl:lfirst := .T.
//
// add Tabpage to TabControl
//
oTab := ::oTabControl:insertItem(::nIndex ,;
::Caption,;
hWnd,;
1 )
//
// SubscribeEvent() EvSelectedChanged anschalten
//
::oTabControl:lfirst := .F.
oTab:enabled := .T.
oTab:EnsureVisible()
::nIndex++
::AutoSize := .F.
// Color for TabPAGE "Body"
*::HX_Tab:setProperty('backColor',AutomationTranslateColor(GraMakeRGBColor({153,200,255}),.f.))
*::HX_Tab:setProperty('backColor',AutomationTranslateColor( GRA_CLR_YELLOW,.f.))
//
// hier eine XbpStatic in "GRÜN"
//
oXbp := XbpStatic():new(::HX_Tab, ,{200+(::nIndex*10),100},{100,100},{{XBP_PP_BGCLR,GRA_CLR_GREEN }} )
oXbp:caption := "Button "+::Caption
oXbp:create():Show()
//
// after Create call ASSIGN Method
//
::x_Icon2 := ::Icon
::x_Caption := ::Caption
RETURN self
METHOD HX_TabPage:DefEvent()
* ::SubscribeEvent( EvClick , {|oSelf| ::TabActivate() })
RETURN self
es werden also 26 TABs erstellt wozu jeweils eine TabPAGE gehört.
mit ::oTabControl:insertItem(x1,x2,x3,x4) wird das TabControl mit den TABs und TabPAGE
verknüpft. Auf die TabPAGE lege ich nun eine Static "in Grün".
Die Parameter:
x1 laufender Index,begin mit 0
x2 Caption des Tab
x3 Child / Integer -> Hwnd ?!
x4 Icon Nummer. hab hier nur 1
Wenn ich jetzt auf die TABs klicke "schalte" er "intern" um da ich noch keine Events aktiviert habe
Von "B" bis "Z" sehe ich nun kein "Grün", aber wenn ich auf "A" click sehe ich es... warum nur "A"
Es muss auch x3 sein, den wenn ich x3 := 0 setzte sehe ich gar kein "GRÜN".
verwunderlich ist auch das ich über die Class VAR HX_TAB gehen muss weil das activeX sonst
beim :init() schon rausfliegt ... oder ob es da einen Zusammenhang gibt ... ?