Re: Studio Controls for COM via ActivX einbinden?
Verfasst: So, 10. Aug 2014 18:08
Danke, so funktioniert es.Wolfgang Ciriack hat geschrieben:Dann mal vielleicht:
oTest:ActiveXControl1:SetProperty("ColumnWidth",1,50)
Das deutschsprachige Forum für Entwickler in der Xbase-Welt, ein Angebot des Deutschsprachige Xbase-Entwickler e. V.
https://www.xbaseforum.de/
Danke, so funktioniert es.Wolfgang Ciriack hat geschrieben:Dann mal vielleicht:
oTest:ActiveXControl1:SetProperty("ColumnWidth",1,50)
Code: Alles auswählen
oTest:ActiveXControl1:SetProperty("DayNames","Mo;Di;Mi;Do;Fr;Sa;So")
oTest:ActiveXControl1:SetProperty("StartWeekDay",1) // Montag beginnen
oTest:ActiveXControl1:SetProperty("WeekendDates",.t.)
oTest:ActiveXControl1:SetProperty("MilitaryTime",.t.) //24 Stunden anzeige
oTest:ActiveXControl1:SetProperty("DateStart",Date()-1 - CTOD("1/1/1900") )
oTest:ActiveXControl1:SetProperty("DateEnd",Date()+7 - CTOD("1/1/1900") )
Code: Alles auswählen
oTest:ActiveXControl1:SetProperty("TimeScroll",38718 ,600 ) //Werte extra aus Hilfebeispiel übernommen
Code: Alles auswählen
Public Sub TimeScroll( _
ByVal lDate As Long, _
ByVal lTime As Long _
)
Example
The following will adjust the horizontal scroll bar so that 10 am on January 1, 2006 starts the view.
[Visual Basic and Access]
Me.ctSchedule.TimeScroll 38718, 600
[Visual FoxPro]
thisform.ctSchedule.TimeScroll(38718, 600)
Code: Alles auswählen
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "c:\dev\DevSrc\Test ActiveX\sample.exe" Datum: 11.08.2014 00:10:49
Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows 7 06.02 Build 09200
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: TimeScroll
-> VALTYPE: N VALUE: 38718
-> VALTYPE: N VALUE: 600
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Typenkonflikt.
Parameter hat falschen Typ
oError:filename : NIL
oError:genCode : NIL
oError:operation : setProperty
oError:osCode : -2147352571
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 1
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from MAIN(130)
Code: Alles auswählen
oTest:ActiveXControl1:SetProperty("TimeScroll",1,38718 ,600 )
Code: Alles auswählen
myID:= oTest:ActiveXControl1:getIDsOfNames("TimeScroll")
oTest:ActiveXControl1:SetProperty(myID,38718 ,600 ) //Fehler
Code: Alles auswählen
oTest:ActiveXControl1:CallMethod("TimeScroll",38718 ,600 )
Code: Alles auswählen
oDlg:AXCScheduler:CallMethod("TimeScroll",Date()- CTOD("1/1/1900") ,0 )
oDlg:AXCScheduler:SetProperty("TimeType",0) // 0 = Stunden, 1= Tag // 2 = Woche 3 Monat 4 Jahr
Code: Alles auswählen
Description
Occurs when the schedule area of the control is clicked on.
Syntax
Visual Basic
Public Event ScheduleClick( _
ByVal nxPoint As Integer, _
ByVal nyPoint As Integer, _
ByVal nButton As Integer _
)
Parameters
nxPoint
Returns a number that specifies the current x location of the mouse pointer.
nyPoint
Returns a number that specifies the current y location of the mouse pointer.
nButton
Returns an integer that identifies the button that was pressed to cause the event. The button argument is a bit field with bits corresponding to the left button (bit 0), right button (bit 1), and middle button (bit 2). These bits correspond to the values 1, 2, and 4, respectively. Only one of the bits is set, indicating the button that caused the event.
Remarks
Code: Alles auswählen
DO WHILE ! lExit
nEvent := AppEvent(@mp1,@mp2,@oXbp)
oXbp:handleEvent(nEvent,mp1,mp2)
ENDDO
Code: Alles auswählen
oDlg:keyBoard := {|nKey| DEkeys(nKey,oDlg,aSpcl,@lExit, oAppMenu, oAppDlg)}
Code: Alles auswählen
Syntax
Visual Basic
Public Event MouseDown( _
ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal x As Long, _
ByVal y As Long _
)
Button
Returns an integer that identifies the button that was pressed to cause the event. The button argument is a bit field with bits corresponding to the left button (bit 0), right button (bit 1), and middle button (bit 2). These bits correspond to the values 1, 2, and 4, respectively. Only one of the bits is set, indicating the button that caused the event.
Shift
Returns an integer that corresponds to the state of the SHIFT, CTRL, and ALT keys when the button specified in the button argument is pressed or released. A bit is set if the key is down. The shift argument is a bit field with the least-significant bits corresponding to the SHIFT key (bit 0), the CTRL key (bit 1), and the ALT key (bit 2 ). These bits correspond to the values 1, 2, and 4, respectively. The shift argument indicates the state of these keys. Some, all, or none of the bits can be set, indicating that some, all, or none of the keys are pressed. For example, if both CTRL and ALT were pressed, the value of shift would be 6.
x
Returns a number that specifies the current x location of the mouse pointer.
y
Returns a number that specifies the current y location of the mouse pointer.
Code: Alles auswählen
xVar := oDlg:AXCScheduler:isEventPublished("MouseDown")
IF xVar <> Nil
oDlg:AXCScheduler:SubscribeEvent( "MouseDown", {|Button,Shift,X,Y| oDlg:My_MouseDown(Button,Shift,X,Y) })
ENDIF
Code: Alles auswählen
METHOD VOBWORK:CalBlock(o,nAction)
LOCAL oActiveView
LOCAL oHitInfo
LOCAL cName
LOCAL nNo
DEFAULT nAction TO 0
IF o = NIL
RETURN .F.
ENDIF
oActiveView := o:ActiveView()
IF oActiveView = NIL
RETURN .F.
ENDIF
cName := oActiveView:interfaceName
IF EMPTY(cName)
RETURN .F.
ELSEIF cName == "CalendarDayView"
ELSEIF cName == "CalendarWeekView"
ELSEIF cName == "CalendarMonthView"
ELSE
RETURN .F.
ENDIF
//
// when Click me make a :HitTest()
//
oHitInfo := oActiveView:HitTest()
//
// now let see what :HitCode() we have
//
nNo := oHitInfo:HitCode()
DO CASE
CASE nNo = 8224 // in ":DayView" update a Entry
::CalEditCell(oHitInfo,nAction)
...
Code: Alles auswählen
::oDialogs := CreateObject( "Codejock.CalendarDialogs"+HX_VERSION() )
Im Moment noch absolut ok, ich habe aber nur einige Beispieleinträge, ca. 20 Ressourcen und 5 Termine dazu. Im Moment kommen die Daten auch noch nicht aus der DB, das sollte sich aber auf die Performance nicht auswirken.Jan hat geschrieben:Markus,
da das hier ein Thema war: Wie ist denn die Performance?
Jan
optisch so was mit einer Timeline von links nach rechts ? Das ist nun ein Array in einem Browse ( ohne Ownerdraw )satmax hat geschrieben:Ich brauche eine Ressourcen Ansicht, also in der linken Spalte die Ressourcen, rechts davon die Stunden oder Tage.
irgendwie bekomme ich bei der Website nur schlecht eine Verbingung ...satmax hat geschrieben:Solutions Schedule for COM trifft das ziemlich genau: http://www.dbi-tech.com/ProductPage.aspx
wenn du Sample postest können wir dir helfensatmax hat geschrieben:Leider gibt es keine für mich verwendbaren Beispiele, nur VB6 und Foxpro.
So is es, und wie immer, der Teufel steckt im Detail. Rufe ich aus dem ActiveX Control ein tdMsg() auf erhalte ich nur einen leeren Dialog. ein MsgBox() hingegen arbeitet einwandfrei.Jan hat geschrieben:815 € für einen Kalender, das ist eine Ansage.
Wenn es im Süden Deutschlands liegt (München/Nürnberg bis Passau) eventuell...Jan hat geschrieben: Vielleicht kannst Du beim nächsten Forentreffen (April 2015) oder anderswo mal kurz zeigen, was dabei rumkommt. Und in Ansätzen, wie Du das erledigt hast. Ich denke, das da einige sind die sich dafür interessieren könnten.
Jan
So ungefähr, dein Beispiel ist schon ein ganz guter Ansatz.AUGE_OHR hat geschrieben:optisch so was mit einer Timeline von links nach rechts Das ist nun ein Array in einem Browse ( ohne Ownerdraw )
Das sieht schon fast perfekt aus. Ich brauche halt 2-3 verschiedenen Ansichten (1-5 Tage, Wochen und Monatsansicht). Mir ist bei der Aufwandsschätzung nicht ganz wohl, auf einmal vergehen da gleich 2-3 Monate bis ich das grob beisammen habe, das kann ich mir dann nicht leisten... Andererseits wird würde man so am meisten Flexibilität erreichen...Wolfgang Ciriack hat geschrieben:Hier ist auch mal eine kleine Ansicht mit Browse und Ownerdraw (Urlaubsplaner), den man sicher noch optimieren kann, aber für meine Bedürfnisse reicht er so.
Da brauchst du nur verschieden zu "malen", ich versuche mal, etwas Code dazu zu posten.Ich brauche halt 2-3 verschiedenen Ansichten (1-5 Tage, Wochen und Monatsansicht)
Code: Alles auswählen
aPP:={ ;
{XBP_PP_COMPOUNDNAME,12.Arial Fett" }, ;
{XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK }, ;
{XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE}, ;
{XBP_PP_HILITE_FGCLR, GRA_CLR_BLACK }, ;
{XBP_PP_HILITE_BGCLR, GraMakeRGBColor({255,204,153}) }, ;
{XBP_PP_COL_HA_COMPOUNDNAME, "10.Arial Fett Kursiv" } ;
{XBP_PP_COL_HA_HEIGHT, 56 };
{XBP_PP_COL_DA_ROWHEIGHT, 28 };
{XBP_PP_COL_DA_CELLHEIGHT, 28 } }
@5.4,1 DCBROWSE oBrowse ;
DATA aAktBrw ;
SIZE br, ho ;
HEADLINES 2 ;
PRESENTATION aPP ;
TABSTOP ;
FREEZELEFT {1} ;
SUBCLASS 'XbpBrowseUrlaub()' ;
EVAL {|o| o:UseVisualStyle:=.F. }
DCBROWSECOL ELEMENT i HEADER ntocmonth(i)+";1-31" ;
WIDTH int((br-20-12*2)/12) PARENT oBrowse EVAL {|o|o:DataArea:DrawMode := XBP_DRAW_OWNER,o:Heading:DrawMode := XBP_DRAW_OWNER}
Code: Alles auswählen
{{Name, ....., Monatstring1, Monatstring2....,...,Monatstring12},
{Name2,... }}
Code: Alles auswählen
#define T_OHNE chr(113) /* kein Termin*/
#define T_FEST chr(114) /* Fester Urlaub */
#define T_PLAN chr(98) /* geplanter Urlaub */
#define T_WE chr(103) /* Wochenende */
Code: Alles auswählen
***************************************
CLASS XbpBrowseUrlaub FROM DC_XbpBrowse
***************************************
PROTECTED:
VAR oFontMonat
VAR oFontTage
EXPORTED:
INLINE METHOD destroy
*********************
::DC_XbpBrowse:destroy()
RETURN self
INLINE METHOD init( oParent, oOwner, aPos, aSize, aPP, lVisible, oGetList )
*****************************************************************
::DC_XbpBrowse:init( oParent, oOwner, aPos, aSize, aPP, lVisible, oGetList )
::drawMode:= XBP_DRAW_OWNER
::oFontMonat := XbpFont():New():Create("12.Arial Fett")
::oFontTage := XbpFont():New():Create("6.Arial")
RETURN self
INLINE METHOD create( oParent, oOwner, aPos, aSize, aPP, lVisible )
*******************************************************************
::DC_XbpBrowse:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
RETURN self
INLINE METHOD customDrawCell( oPS, aInfo )
******************************************
LOCAL xData, nFound, aPP, pos, ep, i, tagbreite
IF aInfo[XBP_DRAWINFO_AREA] == aInfo[XBP_DRAWINFO_COLUMN]:Heading
*** Header
xData:= aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] )
if xData=="1-31"
* 2. Headerzeile mit Tagesnummern
tagbreite:=(aInfo[ XBP_DRAWINFO_RECT, 3 ]-aInfo[ XBP_DRAWINFO_RECT, 1 ])/31
oPs:SetFont(::oFontTage)
oPs:SetColor(GRA_CLR_WHITE)
i:=1
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "1", XBPALIGN_LEFT+XBPALIGN_BOTTOM )
i:=9
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "10", XBPALIGN_HCENTER+XBPALIGN_BOTTOM )
i:=19
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "20", XBPALIGN_HCENTER+XBPALIGN_BOTTOM )
i:=29
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "30", XBPALIGN_HCENTER+XBPALIGN_BOTTOM )
else
** Monatsname
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ], aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ]}
oPs:SetFont(::oFontMonat)
oPs:SetColor(GRA_CLR_WHITE)
GraCaptionStr( oPS, pos, ep, xData, XBPALIGN_HCENTER )
endif
RETURN .F.
ELSE
******* Zelle
aPP := aInfo[ XBP_DRAWINFO_COLUMN ]:presArray
nFound := AScan(aPP,{|a|Valtype(a[1])=='N'.AND. ;
(a[1]==XBP_PP_COL_DA_ROWHEIGHT .OR. ;
a[1]==XBP_PP_COL_DA_CELLHEIGHT) } )
IF nFound == 0
aPP := ::setPresParam()
nFound := AScan(aPP,{|a|Valtype(a[1])=='N'.AND. ;
(a[1]==XBP_PP_COL_DA_ROWHEIGHT .OR. ;
a[1]==XBP_PP_COL_DA_CELLHEIGHT) } )
ENDIF
* get column data
xData:= aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] )
IF xData <> nil
if len(xData)=31
tagbreite:=(aInfo[ XBP_DRAWINFO_RECT, 3 ]-aInfo[ XBP_DRAWINFO_RECT, 1 ])/31
for i:=1 to len(xData)
if xData[i]=T_OHNE
oPs:SetColor(GRA_CLR_WHITE)
elseif xData[i]=T_WE
oPs:SetColor(GRA_CLR_LIGHTGRAY)
elseif xData[i]=T_FEST
oPs:SetColor(GRA_CLR_DARKGREEN)
elseif xData[i]=T_PLAN
oPs:SetColor(GRA_CLR_GREEN)
endif
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraBox(oPS, pos,ep,GRA_FILL)
next
RETURN .F.
endif
endif
ENDIF
RETURN .T.
ENDCLASS
Code: Alles auswählen
Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows 7 06.02 Build 09200
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: O CLASS: XbpColumn
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Member-Variable ist fr dieses Objekt unbekannt
oError:filename :
oError:genCode : 26
oError:operation : presArray
oError:osCode : 0
oError:severity : 2
oError:subCode : 2240
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von XBPBROWSEURLAUB:CUSTOMDRAWCELL(184)
Aufgerufen von XBPBROWSE:HANDLEEVENT(1566)
Aufgerufen von FORWARDCUSTOMDRAWCELL(1522)
Aufgerufen von (B)XBPCOLUMN:CREATE(502)
Aufgerufen von (B)XBPBROWSE:FORCESTABLE(1176)
Aufgerufen von XBPBROWSE:FORCESTABLE(1176)
Aufgerufen von XBPBROWSE:HANDLEEVENT(1536)
Aufgerufen von XBPBROWSE:SHOW(3281)
Aufgerufen von MAIN(88)
Code: Alles auswählen
#include "Appevent.ch"
#include "Common.ch"
#include "Gra.ch"
#include "Xbp.ch"
#pragma Library( "XppUi2.lib" )
#define T_OHNE chr(113) /* kein Termin*/
#define T_FEST chr(114) /* Fester Urlaub */
#define T_PLAN chr(98) /* geplanter Urlaub */
#define T_WE chr(103) /* Wochenende */
STATIC aData
STATIC nLastRec
STATIC nRecno
PROCEDURE AppSys
RETURN
FUNCTION Main()
LOCAL oDlg, oBrowse, oColumn, oXbp, mp1, mp2, nEvent
LOCAL aPP:={ ;
{XBP_PP_COMPOUNDNAME,"12.Arial Fett" }, ;
{XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK }, ;
{XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE}, ;
{XBP_PP_HILITE_FGCLR, GRA_CLR_BLACK }, ;
{XBP_PP_HILITE_BGCLR, GraMakeRGBColor({255,204,153}) }, ;
{XBP_PP_COL_HA_COMPOUNDNAME, "10.Arial Fett Kursiv" }, ;
{XBP_PP_COL_HA_HEIGHT, 56 },;
{XBP_PP_COL_DA_ROWHEIGHT, 28 },;
{XBP_PP_COL_DA_CELLHEIGHT, 28 } }
// Beipieldaten
// {{Name, ....., Monatstring1, Monatstring2....,...,Monatstring12},
// {Name2,... }}
aData := {{'Name 1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},;
{'Name 2',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},;
{'Name 3',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},;
{'Name 4',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},;
{'Name 5',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},;
{'Name 6',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}}
nRecno := 1
nLastRec := Len(aData)
oDlg := XbpDialog():new(,,,,, .F. )
oDlg:taskList := .T.
oDlg:clientSize := { 800, 600 }
oDlg:drawingArea:clipChildren := .T.
oDlg:title := 'Beispiel Kalender'
oDlg:create()
oDlg:drawingArea:setFontCompoundName( '9.Arial' )
CenterControl( oDlg )
SetAppWindow( oDlg )
oBrowse := XbpBrowseUrlaub():new( oDlg:drawingArea,, { 0, 0 }, oDlg:drawingArea:currentSize(),, .F. )
oBrowse:SkipBlock := {|nSkip,oBrowse| DoSkip(nSkip,oBrowse) }
oBrowse:GoBottomBlock := {|| nRecno := Len(aData) }
oBrowse:GoTopBlock := {|| nRecno := 1 }
oBrowse:PosBlock := {|| nRecno }
oBrowse:PhyPosBlock := {|| nRecno }
oBrowse:LastPosBlock := {|| Len(aData) }
oBrowse:FirstPosBlock := {|| 1 }
// oBrowse:CursorMode := XBPBRW_CURSOR_ROW
oBrowse:SetPresParam(aPP)
oBrowse:create()
oColumn := oBrowse:AddColumn( {|| aData[nRecno,1]}, 10, "Name" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,2]}, 10, "J" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,3]}, 20, "F" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,4]}, 20, "M" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,5]}, 20, "A" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,6]}, 20, "M" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,7]}, 20, "J" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,8]}, 20, "J" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,9]}, 20, "A" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,10]},20, "S" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,11]},20, "O" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,12]},20, "N" )
oColumn := oBrowse:AddColumn( {|| aData[nRecno,13]},20, "D" )
oBrowse:show()
oDlg:show()
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
QUIT
RETURN NIL
FUNCTION DoSkip( nSkip )
LOCAL nCanSkip
IF nRecno + nSkip < 1 // "BoF"
nCanSkip := 1 - nRecno
ELSEIF nRecno + nSkip > nLastRec // "EoF"
nCanSkip := nLastRec - nRecno
ELSE
nCanSkip := nSkip
ENDIF
nRecno += nCanSkip
RETURN nCanSkip
****************************************************************************************
*
****************************************************************************************
***************************************
CLASS XbpBrowseUrlaub FROM XbpBrowse
***************************************
PROTECTED:
VAR oFontMonat
VAR oFontTage
EXPORTED:
INLINE METHOD destroy
*********************
::XbpBrowse:destroy()
RETURN self
INLINE METHOD init( oParent, oOwner, aPos, aSize, aPP, lVisible, oGetList )
*****************************************************************
::XbpBrowse:init( oParent, oOwner, aPos, aSize, aPP, lVisible, oGetList )
::drawMode:= XBP_DRAW_OWNER
::oFontMonat := XbpFont():New():Create("12.Arial Fett")
::oFontTage := XbpFont():New():Create("6.Arial")
RETURN self
INLINE METHOD create( oParent, oOwner, aPos, aSize, aPP, lVisible )
*******************************************************************
::XbpBrowse:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
RETURN self
INLINE METHOD customDrawCell( oPS, aInfo )
******************************************
LOCAL xData, nFound, aPP, pos, ep, i, tagbreite
IF aInfo[XBP_DRAWINFO_AREA] == aInfo[XBP_DRAWINFO_COLUMN]:Heading
*** Header
xData:= aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] )
if xData=="1-31"
* 2. Headerzeile mit Tagesnummern
tagbreite:=(aInfo[ XBP_DRAWINFO_RECT, 3 ]-aInfo[ XBP_DRAWINFO_RECT, 1 ])/31
oPs:SetFont(::oFontTage)
oPs:SetColor(GRA_CLR_WHITE)
i:=1
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "1", XBPALIGN_LEFT+XBPALIGN_BOTTOM )
i:=9
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "10", XBPALIGN_HCENTER+XBPALIGN_BOTTOM )
i:=19
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "20", XBPALIGN_HCENTER+XBPALIGN_BOTTOM )
i:=29
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+2*tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraCaptionStr( oPS, pos, ep, "30", XBPALIGN_HCENTER+XBPALIGN_BOTTOM )
else
** Monatsname
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ], aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ]}
oPs:SetFont(::oFontMonat)
oPs:SetColor(GRA_CLR_WHITE)
GraCaptionStr( oPS, pos, ep, xData, XBPALIGN_HCENTER )
endif
RETURN .F.
ELSE
******* Zelle
aPP := aInfo[ XBP_DRAWINFO_COLUMN ]:presArray
nFound := AScan(aPP,{|a|Valtype(a[1])=='N'.AND. ;
(a[1]==XBP_PP_COL_DA_ROWHEIGHT .OR. ;
a[1]==XBP_PP_COL_DA_CELLHEIGHT) } )
IF nFound == 0
aPP := ::setPresParam()
nFound := AScan(aPP,{|a|Valtype(a[1])=='N'.AND. ;
(a[1]==XBP_PP_COL_DA_ROWHEIGHT .OR. ;
a[1]==XBP_PP_COL_DA_CELLHEIGHT) } )
ENDIF
* get column data
xData:= aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] )
IF xData <> nil
if len(xData)=31
tagbreite:=(aInfo[ XBP_DRAWINFO_RECT, 3 ]-aInfo[ XBP_DRAWINFO_RECT, 1 ])/31
for i:=1 to len(xData)
if xData[i]=T_OHNE
oPs:SetColor(GRA_CLR_WHITE)
elseif xData[i]=T_WE
oPs:SetColor(GRA_CLR_YELLOW /*GRA_CLR_LIGHTGRAY*/)
elseif xData[i]=T_FEST
oPs:SetColor(GRA_CLR_DARKGREEN)
elseif xData[i]=T_PLAN
oPs:SetColor(GRA_CLR_GREEN)
endif
pos:={ aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite,aInfo[ XBP_DRAWINFO_RECT, 2 ]}
ep:= { aInfo[ XBP_DRAWINFO_RECT, 1 ]+(i-1)*tagbreite+tagbreite, aInfo[ XBP_DRAWINFO_RECT, 4 ]}
GraBox(oPS, pos,ep,GRA_FILL)
next
RETURN .F.
endif
endif
ENDIF
RETURN .T.
ENDCLASS