satmax hat geschrieben:Es könne durchaus auch 20 oder 100 Ressourcen sein. In einer ersten Version würde mir eine Wochenansicht reichen.
wenn es mehr Rows sind als Platz ist wird ja der Scrollbar von XbpBrowse() aktive.
wenn man o:customDrawCell FROM XbpBrowse verwendet gilt es ja für alle Column und Ownerdraw ist nicht gerade schnell.
bei o:customDrawCell FROM XbpCellGroup würdest du eine spezielle Column Class machen die du in einem normalen XbpBrowse gemischt mit anderen XbpColumn() verwenden kannst.
Code: Alles auswählen
*******************************
CLASS XbpBrowseT FROM XbpBrowse
*******************************
EXPORTED:
INLINE METHOD init( oParent, oOwner, aPos, aSize, aPP, lVisible )
*****************************************************************
::XbpBrowse:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
::drawMode:= XBP_DRAW_OWNER
RETURN self
INLINE METHOD create( oParent, oOwner, aPos, aSize, aPP, lVisible )
*******************************************************************
::XbpBrowse:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::childList()[ 4 ]:type := XBPSTATIC_TYPE_TEXT
::childList()[ 4 ]:setColorBG( -255 )
::childList()[ 4 ]:configure()
RETURN self
INLINE METHOD customDrawCell
****************************
RETURN .T. // nichts weiter !!!
ENDCLASS
*******************************
CLASS XbpColumnT FROM XbpColumn
*******************************
EXPORTED:
INLINE METHOD init( oParent, oOwner, aPos, aSize, aPP, lVisible )
*****************************************************************
::XbpColumn:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
// hier nur ::dataArea
::dataArea:= XbpCellGroupT():new( self )
::drawMode:= XBP_DRAW_OWNER
RETURN self
ENDCLASS
*************************************
CLASS XbpCellGroupT FROM XbpCellGroup
*************************************
INLINE METHOD init( aParent, oOwner, aPos, aSize, aPP, lVisible )
INLINE METHOD destroy
INLINE METHOD setSize( aSize, lPaint )
INLINE METHOD setPos( aPos, lPaint )
INLINE METHOD CalculateOffset
INLINE METHOD scrollDown( nRows, lRepaint )
INLINE METHOD scrollUp( nRows, lRepaint )
...
INLINE METHOD customDrawCell( oPS, aInfo )
*************************************
LOCAL nRow := aInfo[ XBP_DRAWINFO_ITEM ] // Nummer der Zeile, die die Zelle enth„lt
LOCAL nAction := aInfo[ XBP_DRAWINFO_ACTION ] // Aktion, die das Ereignis xbeP_CustomDrawCell ausgel”st hat
LOCAL nState := aInfo[ XBP_DRAWINFO_STATE ] // Aktueller Zustand der Zelle
LOCAL aRect := aInfo[ XBP_DRAWINFO_RECT ] // Ausgaberechteck fr die Zeichenoperation
DO CASE
CASE nAction = XBP_DRAWACTION_SELCHANGE // Der Selektionsstatus einer Zelle hat sich ge„ndert
CASE nAction = XBP_DRAWACTION_DRAWFG // Die Caption innerhalb einer Zelle muss neu gezeichnet werden.
//
// use XBP_DRAW_OWNERADVANCED
//
CASE nAction = XBP_DRAWACTION_ERASEBG // Der Hintergrund wird gel”scht, bevor Zellen neu angezeigt werden
CASE nAction = XBP_DRAWACTION_DRAWBG // Der Hintergrund einer Zelle muss gezeichnet werden.
CASE nAction = XBP_DRAWACTION_DRAWFRAME // Der Rahmen oder die Auswahlmarkierung einer Zelle muss neu gezeichnet werden
ENDCASE
DO CASE
CASE nState = XBP_DRAWSTATE_NORMAL // Zelle ist im Normalzustand
CASE nState = XBP_DRAWSTATE_SELECTED // Zelle ist gegenw„rtig ausgew„hlt
CASE nState = XBP_DRAWSTATE_DISABLED // CellGroup-Objekt ist gegenw„rtig deaktiviert
CASE nState = XBP_DRAWSTATE_FOCUS // CellGroup-Objekt hat gegenw„rtig den Eingabefokus
ENDCASE
// hier die GRA oder oBMP:Draw() Ausgaben
RETURN self
satmax hat geschrieben:Möglicherweise brauche ich für einen Teil der Ressourcen mehr als eine Zeile, das könne dann auch mal 2,3 oder 5 Zeilen für eine Ressource sein.
mich wundert deine letzte Row die höher ist als alle anderen
eigentlich können Rows nur gleich hoch sein ...
klar kann man über eine Cell hinaus malen ... und wie sieht das dann nach einem Refresh aus ?
satmax hat geschrieben:Wie kann ich aus dem Text ein Bitmap machen?
http://www.xbaseforum.de/viewtopic.php?f=16&t=5090
satmax hat geschrieben:Ich habe mir jetzt XbpMultiCellGroup() noch nicht angesehen. Mit dem Browser war das heute nicht allzu schwierig, Tom hat ja da ein super Tutorial erstellt (Ownerdrawing Beispiel 1-6). Gibt es auch wo Beispiele für XbpMultiCellGroup()?
der Header / Footer und die DataArea von XbpColumn() sind XbpCellGroup() dessen Subklasse XbpMultiCellGroup() ist.