XbpBrowse optische Trennlinie horizontal?
Moderator: Moderatoren
XbpBrowse optische Trennlinie horizontal?
Hallo
gibt es in XbpBrowse eine (einfache) Möglichkeit eine horizontale Trennung einzubauen?
Es sollen für den Benutzer eine optische Gruppierung von Werten in der dargestellten Tabelle sein. Wie z.B. die Trennlinien im Hauptmenü.
Habe schon mit farbigen Zeilen experimentiert, ist aber nicht so richtig das was ich möchte, ist irgendwie zu ungewohnt und zu viel Farbe. Auch mit einer Leerzeile habe ich es schon probiert, ist wieder zu viel Abstand...
gibt es in XbpBrowse eine (einfache) Möglichkeit eine horizontale Trennung einzubauen?
Es sollen für den Benutzer eine optische Gruppierung von Werten in der dargestellten Tabelle sein. Wie z.B. die Trennlinien im Hauptmenü.
Habe schon mit farbigen Zeilen experimentiert, ist aber nicht so richtig das was ich möchte, ist irgendwie zu ungewohnt und zu viel Farbe. Auch mit einer Leerzeile habe ich es schon probiert, ist wieder zu viel Abstand...
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: XbpBrowse optische Trennlinie horizontal?
Das geht mit Ownerdrawing vergleichsweise einfach. Ich nehme an, Du meinst so etwas (Bild). Da entscheidet eine wechselnde inhaltliche Eigenschaft (in diesem Fall Spalte 3) darüber, ob eine deutliche(re) Trennlinie gezeichnet werden soll oder nicht.
Herzlich,
Tom
Tom
Re: XbpBrowse optische Trennlinie horizontal?
Hallo Tom
so in der Art.
Mit Ownerdrawing wollte ich bei XbpBrowse noch nicht dran. Da habe ich bei der "normalen" Verwendung von XbpBrowse noch viele Punkte die ich noch machen muss in meinen Programmen.
Aber wenn es nicht anders geht...
so in der Art.
Mit Ownerdrawing wollte ich bei XbpBrowse noch nicht dran. Da habe ich bei der "normalen" Verwendung von XbpBrowse noch viele Punkte die ich noch machen muss in meinen Programmen.
Aber wenn es nicht anders geht...
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: XbpBrowse optische Trennlinie horizontal?
Hallo, Roland.
Du musst ja nicht alles selbst zeichnen, das ist ein Vorteil des Ownerdrawings. Ich schaue mal, ob sich eines meiner Ownerdrawing-Beispiele so verbiegen lässt, dass es Deinen Erwartungen entspricht.
Du musst ja nicht alles selbst zeichnen, das ist ein Vorteil des Ownerdrawings. Ich schaue mal, ob sich eines meiner Ownerdrawing-Beispiele so verbiegen lässt, dass es Deinen Erwartungen entspricht.
Herzlich,
Tom
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: XbpBrowse optische Trennlinie horizontal?
Das Beispiel ist ein bisschen betagt, aber es funktioniert. Die letzte Spalte enthält eine Trennlinie, wenn der Inhalt wechselt (Manifest!). Wenn man die anderen Malereien aus der Funktion nimmt oder ihr .T. als Rückgabewert verpasst, bleibt alles andere beim Betriebssystem.
Code: Alles auswählen
*******************************************************************
* Ownerdrawing, Beispiel 3: Wir holen uns die Vordergrundfarbe zurck
* CustomDrawCell als Slot von oColumn:DataArea
*******************************************************************
#include "Appevent.ch"
#include "Common.ch"
#include "Gra.ch"
#include "Xbp.ch"
#pragma Library( "XppUi2.lib" )
STATIC aData
STATIC nLastRec
STATIC nRecno
PROCEDURE AppSys; RETURN
FUNCTION Main()
LOCAL oDlg, oBrowse, oColumn, oXbp, mp1, mp2, nEvent, aPres, aColPres
aPres := ;
{ { XBP_PP_COL_DA_ROWHEIGHT, 25 }, ;
{ XBP_PP_COL_DA_CELLHEIGHT, 25 }, ;
{ XBP_PP_COL_DA_ROWSEPARATOR, IF(IsThemeActive(),XBPCOL_SEP_LINE,XBPCOL_SEP_NONE) }, ;
{ XBP_PP_COL_DA_COLSEPARATOR, IF(IsThemeActive(),XBPCOL_SEP_LINE,XBPCOL_SEP_NONE) }, ;
{ XBP_PP_HILITE_BGCLR, GraMakeRGBColor({136,170,214}) }, ;
{ XBP_PP_HILITE_FGCLR, GraMakeRGBColor({255,102,51}) }, ;
{ XBP_PP_COL_DA_CELLFRAMELAYOUT, XBPFRAME_BOX+XBPFRAME_RECESSED }, ;
{ XBP_PP_COL_FA_FRAMELAYOUT, XBPFRAME_BOX+XBPFRAME_RECESSED }, ;
{ XBP_PP_COL_DA_FRAMELAYOUT, XBPFRAME_NONE }, ;
{ XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK } , ;
{ XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE } }
aColPres := aClone(aPres)
aAdd(aPres, { XBP_PP_COL_DA_CELLALIGNMENT, XBPALIGN_LEFT+XBPALIGN_VCENTER })
aAdd(aColPres,{ XBP_PP_COL_DA_CELLALIGNMENT, XBPALIGN_RIGHT+XBPALIGN_VCENTER })
aData := {{1,'grn' ,'Maier' ,'Berlin' },;
{2,'gelb' ,'Mller' ,'Berlin' },;
{3,'blau' ,'Schulze','Berlin' },;
{4,'grn' ,'Albers' ,'Hamburg'},;
{5,'rot' ,'Mayer' ,'Mnchen'},;
{6,'schwarz','Kabel' ,'K”ln' }}
nRecno := 1
nLastRec := Len(aData)
oDlg := XbpDialog():new(,,,,, .F. )
oDlg:taskList := .T.
oDlg:clientSize := { 600, 500 }
oDlg:drawingArea:clipChildren := .T.
oDlg:title := 'Beispiel 3'
oDlg:create()
oDlg:drawingArea:setFontCompoundName( '9.Arial' )
CenterControl( oDlg )
SetAppWindow( oDlg )
oBrowse := XbpBrowse():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(aPres)
oBrowse:create()
* 1. Spalte
oColumn := oBrowse:AddColumn( {|| aData[nRecno,1]}, 10, "Nummer" )
* 2. Spalte, CustomDrawCell
oColumn := oBrowse:AddColumn( {|| aData[nRecno,2]}, 10, "Farbe" )
oColumn:Configure(,,,,aColPres,.T.)
oColumn:ColorBlock := {|x|{MyGetColor(x),GRA_CLR_WHITE}}
oColumn:DataArea:DrawMode := XBP_DRAW_OWNER
oColumn:DataArea:CustomDrawCell := {|oPs,aInfo,oArea|PaintCellWithForeGround(oPs,aInfo,oArea)}
* 3. Spalte, CustomDrawCell
oColumn := oBrowse:AddColumn( {|| aData[nRecno,3]}, 20, "Name" )
oColumn:ColorBlock := {||{GRA_CLR_BLUE,GRA_CLR_YELLOW}}
oColumn:DrawMode := XBP_DRAW_OWNER
oColumn:DataArea:CustomDrawCell := {|oPs,aInfo,oArea|PaintCellWithForeGround(oPs,aInfo,oArea)}
* 4. Spalte
oColumn := oBrowse:AddColumn( {|| aData[nRecno,4]}, 20, "Ort" )
oColumn:ColorBlock := {||{GRA_CLR_BLACK,GRA_CLR_WHITE}}
oColumn:DrawMode := XBP_DRAW_OWNER
oColumn:DataArea:CustomDrawCell := {|oPs,aInfo,oArea|PaintCellWithForeGround(oPs,aInfo,oArea,.T.)}
oBrowse:show()
oDlg:show()
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
QUIT
RETURN NIL
******************************************************
* Hier werden die Zellen gezeichnet
******************************************************
FUNCTION PaintCellWithForeGround(oPs,aInfo,oArea,lLineWhenDifferent)
* Erhebt das Alignment, die Vordergrundfarbe und zeichnet dann den Zellinhalt selbst
LOCAL xData, nFgCol, nAlign := XBPALIGN_VCENTER+XBPALIGN_HCENTER, aPP, nFound, xThisLine, xNextLine, lPaintBottomLine := .F.,;
aPaintPos, aLineAttrs
DEFAULT lLineWhenDifferent TO .F.
* Zellinhalt erheben:
xData:= oArea:GetCell( aInfo[ XBP_DRAWINFO_ITEM ] )
IF xData = nil .or. !32 $ aInfo[ XBP_DRAWINFO_ACTION ] // nur selbst zeichnen, wenn Inhalt vorhanden und Vordergrund gezeichnet werden muss!
RETURN .T.
ENDIF
* Vordergrundfarbe erheben:
oArea:GetCellColor( aInfo[ XBP_DRAWINFO_ITEM ],@nFgCol )
* und fr den Presentation Space setzen:
oPs:SetColor(nFgCol)
* Alignment der Spalte erheben:
aPP := oArea:SetParent():SetPresParam()
nFound := AScan(aPP,{|a|Valtype(a[1])=='N' .AND. a[1]==XBP_PP_COL_DA_CELLALIGNMENT } )
IF nFound > 0 .and. aPP[nFound,2] <> nil
nAlign := aPP[nFound,2]
ENDIF
IF lLineWhenDifferent // vergleich den Inhalt dieser Spalte mit der vorigen und zeichnet eine durchgehende Linie, wenn diese NICHT gleich sind und die Folgezeile nicht leer ist
xThisLine := oArea:GetCell( aInfo[ XBP_DRAWINFO_ITEM ] )
xNextLine := oArea:GetCell( aInfo[ XBP_DRAWINFO_ITEM ]+1 )
IF xNextLine # nil .and. xThisLine # nil .and. !AllTrim(Var2Char(xNextLine)) == AllTrim(Var2Char(xThisLine)) .and. Len(AllTrim(Var2Char(xNextLine)))>0
lPaintBottomLine := .T.
ENDIF
ENDIF
* Text anzeigen (der eigentliche Kern der Angelegenheit):
GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], { aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData, nAlign )
IF lPaintBottomLine
aPaintPos := oArea:CellRect( aInfo[ XBP_DRAWINFO_ITEM ] )
aLineAttrs := ARRAY( GRA_AL_COUNT )
aLineAttrs[ GRA_AL_WIDTH ] := GRA_LINEWIDTH_NORMAL
aLineAttrs[ GRA_AL_COLOR ] := GRA_CLR_DARKGRAY
aLineAttrs[ GRA_AL_TYPE ] := GRA_LINETYPE_SOLID
GraSetAttrLine( oPS, aLineAttrs )
GraLine(oPs,{ aPaintPos[ 1 ],aPaintPos[ 2 ] }, { aPaintPos[ 3 ], aPaintPos[ 2 ] } )
* GraLine(oPs,{ aInfo[ XBP_DRAWINFO_RECT,1 ]-3,aInfo[ XBP_DRAWINFO_RECT,2 ]-3},{aInfo[ XBP_DRAWINFO_RECT,3 ]+3,aInfo[ XBP_DRAWINFO_RECT,2 ]-3 } )
endif
* Rckgabe .T. wrde bewirken, dass die Zelle berzeichnet wird! (Einfach mal ausprobieren!)
RETURN .F.
******************************************************
STATIC FUNCTION MyGetColor(x)
DO CASE
CASE x = 'grn'
RETURN GRA_CLR_GREEN
CASE x = 'gelb'
RETURN GRA_CLR_YELLOW
CASE x = 'blau'
RETURN GRA_CLR_BLUE
CASE x = 'rot'
RETURN GRA_CLR_RED
CASE x = 'schwarz'
RETURN GRA_CLR_BLACK
ENDCASE
RETURN GRA_CLR_BLACK
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
Herzlich,
Tom
Tom
Re: XbpBrowse optische Trennlinie horizontal?
Hallo Tom
hier ein Bild von meier Tabelle. Abgeleitet aus den Alaska-Samples.
Da sehen die Felder anders aus, da muss ich vermutlich anders vorgehen.
hier ein Bild von meier Tabelle. Abgeleitet aus den Alaska-Samples.
Da sehen die Felder anders aus, da muss ich vermutlich anders vorgehen.
- Dateianhänge
-
- XbpBrowse1.JPG (111.68 KiB) 5505 mal betrachtet
Re: XbpBrowse optische Trennlinie horizontal?
Das ist das Wichtigste. Werde mir das später genauer anschauen und ausprobieren.
(nachher kommt Unitymedia - Umstellung Internetzugang)
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: XbpBrowse optische Trennlinie horizontal?
Nö. Wenn Du Ownerdrawing für eine Spalte aktivierst und meine Funktion dranklemmst, sollten sich die Linien zeigen (letzter Parameter auf .T.). Falls nichts sichtbar ist - spiel mal mit der Linienstärke (aLineAttrs).
Herzlich,
Tom
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: XbpBrowse optische Trennlinie horizontal?
Ach so, wenn Du in allen Spalten Trennlinien willst, musst Du natürlich für alle das Merkmal setzen - und zusätzlich mitteilen, welche Spalte das Vergleichskritierium enthält. Das ginge dann in etwa so (geändert sind die Zeichenfunktion und ihre Aufrufe):
Code: Alles auswählen
*******************************************************************
* Ownerdrawing, Beispiel 3: Wir holen uns die Vordergrundfarbe zurck
* CustomDrawCell als Slot von oColumn:DataArea
*******************************************************************
#include "Appevent.ch"
#include "Common.ch"
#include "Gra.ch"
#include "Xbp.ch"
#pragma Library( "XppUi2.lib" )
STATIC aData
STATIC nLastRec
STATIC nRecno
PROCEDURE AppSys; RETURN
FUNCTION Main()
LOCAL oDlg, oBrowse, oColumn, oXbp, mp1, mp2, nEvent, aPres, aColPres
aPres := ;
{ { XBP_PP_COL_DA_ROWHEIGHT, 25 }, ;
{ XBP_PP_COL_DA_CELLHEIGHT, 25 }, ;
{ XBP_PP_COL_DA_ROWSEPARATOR, IF(IsThemeActive(),XBPCOL_SEP_LINE,XBPCOL_SEP_NONE) }, ;
{ XBP_PP_COL_DA_COLSEPARATOR, IF(IsThemeActive(),XBPCOL_SEP_LINE,XBPCOL_SEP_NONE) }, ;
{ XBP_PP_HILITE_BGCLR, GraMakeRGBColor({136,170,214}) }, ;
{ XBP_PP_HILITE_FGCLR, GraMakeRGBColor({255,102,51}) }, ;
{ XBP_PP_COL_DA_CELLFRAMELAYOUT, XBPFRAME_BOX+XBPFRAME_RECESSED }, ;
{ XBP_PP_COL_FA_FRAMELAYOUT, XBPFRAME_BOX+XBPFRAME_RECESSED }, ;
{ XBP_PP_COL_DA_FRAMELAYOUT, XBPFRAME_NONE }, ;
{ XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK } , ;
{ XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE } }
aColPres := aClone(aPres)
aAdd(aPres, { XBP_PP_COL_DA_CELLALIGNMENT, XBPALIGN_LEFT+XBPALIGN_VCENTER })
aAdd(aColPres,{ XBP_PP_COL_DA_CELLALIGNMENT, XBPALIGN_RIGHT+XBPALIGN_VCENTER })
aData := {{1,'grn' ,'Maier' ,'Berlin' },;
{2,'gelb' ,'Mller' ,'Berlin' },;
{3,'blau' ,'Schulze','Berlin' },;
{4,'grn' ,'Albers' ,'Hamburg'},;
{5,'rot' ,'Mayer' ,'Mnchen'},;
{6,'schwarz','Kabel' ,'K”ln' }}
nRecno := 1
nLastRec := Len(aData)
oDlg := XbpDialog():new(,,,,, .F. )
oDlg:taskList := .T.
oDlg:clientSize := { 600, 500 }
oDlg:drawingArea:clipChildren := .T.
oDlg:title := 'Beispiel 3'
oDlg:create()
oDlg:drawingArea:setFontCompoundName( '9.Arial' )
CenterControl( oDlg )
SetAppWindow( oDlg )
oBrowse := XbpBrowse():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(aPres)
oBrowse:create()
* 1. Spalte
oColumn := oBrowse:AddColumn( {|| Str(aData[nRecno,1],3,0)}, 10, "Nummer" )
oColumn:Configure(,,,,aColPres,.T.)
oColumn:ColorBlock := {||{GRA_CLR_BLUE,GRA_CLR_WHITE}}
oColumn:DataArea:DrawMode := XBP_DRAW_OWNER
oColumn:DataArea:CustomDrawCell := {|oPs,aInfo,oArea|PaintCellWithForeGround(oPs,aInfo,oArea,oBrowse,4)}
* 2. Spalte, CustomDrawCell
oColumn := oBrowse:AddColumn( {|| aData[nRecno,2]}, 10, "Farbe" )
oColumn:ColorBlock := {|x|{MyGetColor(x),GRA_CLR_WHITE}}
oColumn:DataArea:DrawMode := XBP_DRAW_OWNER
oColumn:DataArea:CustomDrawCell := {|oPs,aInfo,oArea|PaintCellWithForeGround(oPs,aInfo,oArea,oBrowse,4)}
* 3. Spalte, CustomDrawCell
oColumn := oBrowse:AddColumn( {|| aData[nRecno,3]}, 20, "Name" )
oColumn:ColorBlock := {||{GRA_CLR_BLUE,GRA_CLR_YELLOW}}
oColumn:DrawMode := XBP_DRAW_OWNER
oColumn:DataArea:CustomDrawCell := {|oPs,aInfo,oArea|PaintCellWithForeGround(oPs,aInfo,oArea,oBrowse,4)}
* 4. Spalte
oColumn := oBrowse:AddColumn( {|| aData[nRecno,4]}, 20, "Ort" )
oColumn:ColorBlock := {||{GRA_CLR_BLACK,GRA_CLR_WHITE}}
oColumn:DrawMode := XBP_DRAW_OWNER
oColumn:DataArea:CustomDrawCell := {|oPs,aInfo,oArea|PaintCellWithForeGround(oPs,aInfo,oArea,oBrowse,4)}
oBrowse:show()
oDlg:show()
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
QUIT
RETURN NIL
******************************************************
* Hier werden die Zellen gezeichnet
******************************************************
FUNCTION PaintCellWithForeGround(oPs,aInfo,oArea,oBrowse,nLineWhenDifferent)
* Erhebt das Alignment, die Vordergrundfarbe und zeichnet dann den Zellinhalt selbst
LOCAL xData, nFgCol, nAlign := XBPALIGN_VCENTER+XBPALIGN_HCENTER, aPP, nFound, xThisLine, xNextLine, lPaintBottomLine := .F.,;
aPaintPos, aLineAttrs
DEFAULT nLineWhenDifferent TO 0
* Zellinhalt erheben:
xData:= oArea:GetCell( aInfo[ XBP_DRAWINFO_ITEM ] )
IF xData = nil .or. !32 $ aInfo[ XBP_DRAWINFO_ACTION ] // nur selbst zeichnen, wenn Inhalt vorhanden und Vordergrund gezeichnet werden muss!
RETURN .T.
ENDIF
* Vordergrundfarbe erheben:
oArea:GetCellColor( aInfo[ XBP_DRAWINFO_ITEM ],@nFgCol )
* und fr den Presentation Space setzen:
oPs:SetColor(nFgCol)
* Alignment der Spalte erheben:
aPP := oArea:SetParent():SetPresParam()
nFound := AScan(aPP,{|a|Valtype(a[1])=='N' .AND. a[1]==XBP_PP_COL_DA_CELLALIGNMENT } )
IF nFound > 0 .and. aPP[nFound,2] <> nil
nAlign := aPP[nFound,2]
ENDIF
* Text anzeigen (der eigentliche Kern der Angelegenheit):
GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], { aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData, nAlign )
IF nLineWhenDifferent > 0 // vergleich den Inhalt dieser Spalte mit der vorigen und zeichnet eine durchgehende Linie, wenn diese NICHT gleich sind und die Folgezeile nicht leer ist
xThisLine := oBrowse:GetColumn(nLineWhenDifferent):DataArea:GetCell(aInfo[ XBP_DRAWINFO_ITEM ] )
xNextLine := oBrowse:GetColumn(nLineWhenDifferent):DataArea:GetCell(aInfo[ XBP_DRAWINFO_ITEM ] + 1 )
IF xNextLine # nil .and. xThisLine # nil .and. !AllTrim(Var2Char(xNextLine)) == AllTrim(Var2Char(xThisLine)) .and. Len(AllTrim(Var2Char(xNextLine)))>0
aPaintPos := oArea:CellRect( aInfo[ XBP_DRAWINFO_ITEM ] )
aLineAttrs := ARRAY( GRA_AL_COUNT )
aLineAttrs[ GRA_AL_WIDTH ] := GRA_LINEWIDTH_NORMAL
aLineAttrs[ GRA_AL_COLOR ] := GRA_CLR_DARKGRAY
aLineAttrs[ GRA_AL_TYPE ] := GRA_LINETYPE_SOLID
GraSetAttrLine( oPS, aLineAttrs )
GraLine(oPs,{ aPaintPos[ 1 ],aPaintPos[ 2 ] }, { aPaintPos[ 3 ], aPaintPos[ 2 ] } )
ENDIF
ENDIF
* Rckgabe .T. wrde bewirken, dass die Zelle berzeichnet wird! (Einfach mal ausprobieren!)
RETURN .F.
******************************************************
STATIC FUNCTION MyGetColor(x)
DO CASE
CASE x = 'grn'
RETURN GRA_CLR_GREEN
CASE x = 'gelb'
RETURN GRA_CLR_YELLOW
CASE x = 'blau'
RETURN GRA_CLR_BLUE
CASE x = 'rot'
RETURN GRA_CLR_RED
CASE x = 'schwarz'
RETURN GRA_CLR_BLACK
ENDCASE
RETURN GRA_CLR_BLACK
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
Herzlich,
Tom
Tom