Browse Owner-Drawing

This forum is for eXpress++ general support.
Post Reply
Message
Author
User avatar
rdonnay
Site Admin
Posts: 4734
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Browse Owner-Drawing

#1 Post by rdonnay »

Tom -

You have much more experience with owner-drawing in the Browse than I do.
I'm struggling with trying to get just the highlighted cell to paint without affecting other cells.
The below code works but it causes a lot of flickering.

If I remove the ITEMMARKED clause, then it does not work.
Do you have a solution?

Code: Select all

#INCLUDE "dcdialog.CH"

FUNCTION Main()

LOCAL oBrowse, aDir := Directory(), GetList[0], i, oFontLarge

LOCAL bOwnerDraw := {|a,b,o|DrawCellHighlighted(a,b,o,oFontLarge)}

oFontLarge := XbpFont():new():create('12.Lucida Console Bold')

@ 0,0 DCBROWSE oBrowse DATA aDir SIZE 100,10 ;
      OWNERDRAW bOwnerDraw ;
      ITEMMARKED {|a,b,o|InvalidateCellRect(o)} ;
      COLOR {||IIF(oBrowse:arrayElement%2==0,{nil,GRA_CLR_PALEGRAY},{nil,nil})}

FOR i := 1 TO 10
  DCBROWSECOL ELEMENT i HEADER Alltrim(Str(i)) WIDTH 10 PARENT oBrowse OWNERDRAW
NEXT

DCREAD GUI FIT TITLE 'Browse Ownerdraw test'

RETURN nil

* -----------

PROC appsys ; RETURN

* -----------

STATIC FUNCTION InvalidateCellRect( oBrowse )

LOCAL i

FOR i := 1 TO oBrowse:colCount
  oBrowse:GetColumn(i):dataArea:invalidateRect()
NEXT

RETURN nil

* ------------

FUNCTION DrawCellHighlighted( oPS, aInfo, oBrowse, oFontLarge, oFontNormal )

LOCAL xData, nRow := aInfo[1], aRect := aInfo[XBP_DRAWINFO_RECT], ;
      oCell := aInfo[5], oColumn := aInfo[6], lStatus := .t.

IF oCell:isDerivedFrom('DC_MultiLineCellGroup') // It's a header
  RETURN .t.
ENDIF

xData := DC_XtoC(aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] ))

IF nRow == oBrowse:rowPos .AND. oColumn == oBrowse:getColumn(oBrowse:colPos)
  oPS:setFont(oFontLarge)
  oPS:setColor(GRA_CLR_WHITE,GRA_CLR_DARKPINK)
ELSE
  oPS:setColor( IIF( aInfo[ XBP_DRAWINFO_STATE ] = XBP_DRAWSTATE_SELECTED, ;
                XBPSYSCLR_MENUHILITE, XBPSYSCLR_WINDOWSTATICTEXT ) )
ENDIF

GraCaptionStr( oPS, aRect, { aRect[3], aRect[4] }, xData )

RETURN .f.
The eXpress train is coming - and it has more cars.

User avatar
RDalzell
Posts: 205
Joined: Thu Jan 28, 2010 6:57 am
Location: Alsip, Illinois USA

Re: Browse Owner-Drawing

#2 Post by RDalzell »

Roger,

This is what you had helped me with before...


*---

STATIC FUNCTION ViolationScan(aGetList)

LOCAL GetList[0], GetOptions, oBrowse, aPres, aBrowPres, aSort, aSort2[8], cSeek := Space(25), cSeek0 := cSeek, cIndex := "CodeDx04", oGet, ;
bOwnerDraw, cHighlight := Space(10), oFontNormal, oFontLarge, oBitmap, bColorBlock


SELECT CodeDtl
SET ORDER TO 4
DbGoTop()

cPartial := Space(30)
aPres := DC_BrowPres()
aSort := DC_BrowseSort()

aBrowPres := {{ XBP_PP_COL_HA_FGCLR, GRA_CLR_BLACK }, /* Header FG Color */ ;
{ XBP_PP_COL_HA_BGCLR, GRA_CLR_PALEGRAY }, /* Header BG Color */ ;
{ XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED }, /* Row Sep */ ;
{ XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED }, /* Col Sep */ ;
{ XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK }, /* Row FG Color */ ;
{ XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE }, /* Row BG Color */ ;
{ XBP_PP_COL_DA_ROWHEIGHT, 11 }, /* Row Height */ ;
{ XBP_PP_COL_DA_CELLHEIGHT, 11 }, /* Cell Height */ ;
{ XBP_PP_COL_HA_HEIGHT, 12 }, /* Header Height */ ;
{ XBP_PP_COL_DA_HILITE_FGCLR, GRA_CLR_BLUE }, /* Cursor FG Color */ ;
{ XBP_PP_COL_DA_HILITE_BGCLR, GRA_CLR_PALEGRAY}, /* Cursor BG Color */ ;
{ XBP_PP_HILITE_FGCLR, GRA_CLR_WHITE }, /* Hilite FG color */ ;
{ XBP_PP_HILITE_BGCLR, GRA_CLR_BLUE }, /* Hilite BG color */ ;
{ XBP_PP_COL_FA_FGCLR, GRA_CLR_WHITE }, /* Footer FG Color */ ;
{ XBP_PP_COL_FA_BGCLR, GRA_CLR_PALEGRAY }, /* Footer BG Color */ ;
{ XBP_PP_COL_DA_COMPOUNDNAME,'9.Arial'}, /* Font */ ;
{ XBP_PP_COL_HA_COMPOUNDNAME,'9.Helv'}, /* Font */ ;
{ XBP_PP_COL_FA_HEIGHT, 12 }, /* Footer Height */ ;
{ XBP_PP_COL_HA_ALIGNMENT,XBPALIGN_HCENTER} /* Header Alignment */ ;
}

oFontLarge := XbpFont():new():create('12.Lucida Console Bold')
oBitmap := XbpBitmap():new()
oBitmap:transparentClr := GraMakeRGBColor({192,192,192})
oBitmap:create()
oBitmap:loadFile('\Express\Bitmaps\Forwards.Bmp')

bOwnerDraw := {|a,b| DrawCellHighlighted(a,b,AllTrim(cSeek0), oBrowse, oFontLarge, oBitmap) }

bColorBlock := {|| IIF(Dc_GetColArray(11,oBrowse) =.f., IIF(oBrowse:arrayElement%2 == 0, {Nil, GraMakeRGBColor({220,220,255})}, {Nil, GRA_CLR_WHITE}),{Nil,GRA_CLR_YELLOW}) }


aSort2[1] := GRA_CLR_RED // Sort Selected Color (Foreground) // PC CAW 01-13-05
aSort2[2] := GRA_CLR_PALEGRAY // Sort Selected Color (Background)
aSort2[3] := GRA_CLR_BLACK // Sort Unselectable Color (Foreground)
aSort2[4] := GRA_CLR_PALEGRAY // Sort Unselectable Color (Background)
// aSort2[5] := Nil // No Longer Utilized
// aSort2[6] := Nil // No Longer Utilized
aSort2[7] := GRA_CLR_BLACK // Sort Unselected Color (Foreground) - Able to select
aSort2[8] := GRA_CLR_PALEGRAY // Sort Unselected Color (Background) - Able to select

DC_BrowPres(aBrowPres) // save browse presentation factors

DC_BrowseSort(aSort2)


@ 1.00, 1.00 DCSAY "Find: " GET cSeek0 SAYRIGHT Picture '@!' ;
GETOBJECT oGet ;
GETID "cSeek0" ;
GETTOOLTIP 'Example:; "*PARK" for All Violations; Containing the Letters "PARK"' ;
KEYBLOCK {|a,b,o| o:getData(), oBrowse:invalidateRect(), CodeDtl->(_620Seek(a, b, o, oBrowse, GetList, cIndex, @cSeek0)) }

@ 1.25,40.00 DCSAY {|| cPartial } SAYSIZE 25 PARENT oBrowse COLOR GRA_CLR_RED
@ 1.25,67.50 DCSAY '(enter an "*" before the desired search text to locate a Violation Descriptions containing that text)' ;
SAYSIZE 85 PARENT oBrowse COLOR GRA_CLR_BLUE

@ 2.50, 1.00 DCBROWSE oBrowse ALIAS 'CodeDtl' SIZE 50,20 ;
FIT ;
SCOPE ;
NOHSCROLL ;
HEADLINES 2 ;
NOSOFTTRACK ;
USEVISUALSTYLE ;
PRESENTATION DC_BrowPres() ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SORTUPBITMAP BITMAP_RD_UP_RED ;
SORTDOWNBITMAP BITMAP_RD_DOWN_RED ;
SORTSCOLOR GRA_CLR_RED, GRA_CLR_PALEGRAY ;
SORTUCOLOR GRA_CLR_BLACK, GRA_CLR_PALEGRAY ;
ZEBRA aEvenRowColor,aOddRowColor ;
SUBCLASS "DC_XbpBrowseOwnerDraw()" ;
ITEMMARKED {|| oBrowse:invalidateRect() } ;
ITEMSELECTED {|a,b,o| DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList) } ;
EVAL {|o| o:ownerDrawBlock := bOwnerDraw, SetAppFocus(DC_GetObject(GetList,"cSeek0")) }


DCBROWSECOL DATA {|| CodeDtl->V_Alter } HEADER 'Violation;Number' WIDTH 7 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX12') } LEFTBUTTON

DCBROWSECOL DATA {|| CodeDtl->V_Type } HEADER 'Violation;Type' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX01') } LEFTBUTTON

DCBROWSECOL DATA {|| TRANSFORM(CodeDtl->V_Chapter,"9999.999") } HEADER 'Chapter;Number' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX02') } LEFTBUTTON

DCBROWSECOL DATA {|| TRANSFORM(CodeDtl->V_Section,"99999") } HEADER 'Section;Number' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX14') } LEFTBUTTON

DCBROWSECOL DATA {|| CodeDtl->V_ParaGrph } HEADER 'Paragraph;Number' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX15') } LEFTBUTTON

DCBROWSECOL DATA {|| CodeDtl->Ucr } HEADER 'UCR;Code' WIDTH 6 PARENT oBrowse ;
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX16') } LEFTBUTTON

DCBROWSECOL DATA {|| Trim(CodeDtl->V_Desc) } HEADER ';Violation Description' WIDTH 25 PARENT oBrowse ;
EVAL {|o| o:drawMode := XBP_DRAW_OWNER } ;
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX04') } LEFTBUTTON _DEFAULT OrdSetFocus() == 'CODEDX04'

DCBROWSECOL DATA {|| OffenseType(CodeDtl->ParkType) } HEADER 'Citation;Type' WIDTH 7 PARENT oBrowse

DCBROWSECOL DATA {|| FineClass(CodeDtl->V_FineType, CodeDtl->V_Class) } HEADER 'Fine;Classification' WIDTH 7 PARENT oBrowse

DCBROWSECOL DATA {|| VMIN(CodeDtl->V_FineType, CodeDtl->V_Class, CodeDtl->V_Min) } HEADER 'Minimum;Fine' WIDTH 5 PARENT oBrowse

DCBROWSECOL DATA {|| VMAX(CodeDtl->V_FineType, CodeDtl->V_Class, CodeDtl->V_Max) } HEADER 'Maximum;Fine' WIDTH 5 PARENT oBrowse

DCBROWSECOL DATA {|| DeptDesc(CodeDtl->V_Dept) } HEADER ';Department' WIDTH 12 PARENT oBrowse

DCREAD GUI TO lStatus ;
FIT ;
MODAL ;
ADDBUTTONS ;
EVAL { || SetAppFocus(oBrowse) } ;
TITLE 'Select The Desired Violation'

IF lStatus

nViolation := CodeDtl->V_Alter
cVdesc := AllTrim(CodeDtl->V_Desc)

DC_GetRefresh(aGetList)
SetAppFocus(DC_GetObject(aGetList,"Get_cOffense"))

ELSE

SetAppFocus(DC_GetObject(aGetList,"Get_nViolation"))

ENDIF

DC_BrowPres(aPres) // save browse presentation factors
DC_BrowseSort(aSort)

RETURN nViolation

*---

CLASS DC_XbpBrowseOwnerDraw FROM DC_XbpBrowse

PROTECTED: ; EXPORTED:
VAR ownerDrawBlock
INLINE METHOD destroy ; ::DC_XbpBrowse:destroy() ; RETURN Self
INLINE METHOD Init( a,b,c,d,e,f,g) ; ::DC_XbpBrowse:init(a,b,c,d,e,f,g) ; ::drawMode := XBP_DRAW_OWNER ; RETURN Self
INLINE METHOD Create( a,b,c,d,e,f,g) ; ::DC_XbpBrowse:create( a,b,c,d,e,f,g) ; RETURN Self
INLINE METHOD CustomDrawCell( a,b ) ; RETURN Eval(::ownerdrawBlock, a,b)

ENDCLASS

*---

STATIC FUNCTION DrawCellHighlighted( oPS, aInfo, cHighLight, oBrowse, oFontLarge, oBitmap )

LOCAL xData, nPos, nRow, aRect, oCell := aInfo[5], oColumn

IF oCell:isDerivedFrom('DC_MultiLineCellGroup') // It's a header
RETURN .t.
ENDIF

xData := UPPER(DC_XtoC(aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] )))

nRow := aInfo[1]
oColumn := oCell:setParent()

// IF nRow == oBrowse:rowPos
// oPS:setFont(oFontLarge)
// ENDIF

IF SubStr(cHighLight,1,1) == "*"
cHighLight := SubStr(cHighLight,2)
ENDIF

IF xData <> Nil .AND. ( nPos := At( cHighlight, xData ) ) > 0

oPS:setColor( IIF( aInfo[ XBP_DRAWINFO_STATE ] == XBP_DRAWSTATE_SELECTED, ;
XBPSYSCLR_MENUHILITE, XBPSYSCLR_WINDOWSTATICTEXT ) )

GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], { aInfo[ XBP_DRAWINFO_RECT, 3 ], ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData )

IF nRow == oBrowse:rowPos
oPS:setColor( GRA_CLR_DARKPINK )
ELSE
oPS:setColor( GRA_CLR_RED )
ENDIF

IF nPos == 1
GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], { aInfo[ XBP_DRAWINFO_RECT, 3 ], ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, cHighlight )
ELSE
aRect := GraQueryTextBox( oPS, Left( xData, nPos - 1 ) )

GraCaptionStr( oPS, { aInfo[ XBP_DRAWINFO_RECT, 1 ] + aRect[ 3, 1 ], aInfo[ XBP_DRAWINFO_RECT, 2 ] }, ;
{ aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] }, ;
cHighlight )
ENDIF

RETURN .f.

ELSE

oPS:setColor( IIF( aInfo[ XBP_DRAWINFO_STATE ] == XBP_DRAWSTATE_SELECTED, ;
XBPSYSCLR_MENUHILITE, XBPSYSCLR_WINDOWSTATICTEXT ) )

// IF nRow == oBrowse:rowPos
// oPS:setColor( GRA_CLR_BLUE )
// ENDIF

IF nRow == oBrowse:rowPos .AND. oColumn == oBrowse:getColumn(1)

aRect := GraQueryTextBox( oPS, Left( xData, nPos - 1 ) )

oBitmap:draw(oPS, { aInfo[ XBP_DRAWINFO_RECT, 1 ] + aRect[ 3, 1 ], ;
aInfo[ XBP_DRAWINFO_RECT, 2 ] } )

GraCaptionStr( oPS,{ aInfo[ XBP_DRAWINFO_RECT, 1 ] + oBitmap:xSize + 2, ;
aInfo[ XBP_DRAWINFO_RECT, 2 ] }, ;
{ aInfo[ XBP_DRAWINFO_RECT, 3 ] + oBitmap:xSize + 2, ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData )

ELSE

GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], ;
{ aInfo[ XBP_DRAWINFO_RECT, 3 ], ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData )

ENDIF

RETURN .f.

ENDIF

RETURN .t.

User avatar
Auge_Ohr
Posts: 1414
Joined: Wed Feb 24, 2010 3:44 pm

Re: Browse Owner-Drawing

#3 Post by Auge_Ohr »

hi,

if you use oFontLarge, when switch to oFontNormal ?

Code: Select all

LOCAL bOwnerDraw := {|a,b,o|DrawCellHighlighted(a,b,o,oFontLarge,oFontNormal)}
oFontLarge := XbpFont():new():create('12.Lucida Console Bold')
oFontNormal := XbpFont():new():create(' 8.Lucida Console')
i think this Code will do what you want

Code: Select all

FUNCTION DrawCellHighlighted( oPS, aInfo, oBrowse, oFontLarge, oFontNormal )
LOCAL xData, nRow := aInfo[1], aRect := aInfo[XBP_DRAWINFO_RECT], ;
      oCell := aInfo[5], oColumn := aInfo[6], lStatus := .t.

IF oCell:isDerivedFrom('DC_MultiLineCellGroup') // It's a header
  RETURN .t.
ENDIF

xData := DC_XtoC(aInfo[XBP_DRAWINFO_AREA]:getCell(aInfo[ XBP_DRAWINFO_ITEM]))

// begin here
   IF BAND(aInfo[3],XBP_DRAWSTATE_SELECTED) != 0
      oPS:setFont(oFontLarge)
      oPS:setColor( XBPSYSCLR_HILITEFOREGROUND, NIL )
   ELSE
      oPS:setFont(oFontNormal)
      oPS:setColor( XBPSYSCLR_WINDOWSTATICTEXT, NIL )
   ENDIF

// write Text
   GraCaptionStr( oPS, aRect, { aRect[3], aRect[4] }, xData )

RETURN .F.
greetings by OHR
Jimmy

User avatar
rdonnay
Site Admin
Posts: 4734
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Browse Owner-Drawing

#4 Post by rdonnay »

if you use oFontLarge, when switch to oFontNormal ?
I wrote it that way first but it didn't work either.
However, I completely forgot the test for XBP_DRAWSTATE_SELECTED.

I have written browse ownerdraw code in the past that worked correctly, but I had a mental block on this one.

Thanks, Jimmy
The eXpress train is coming - and it has more cars.

User avatar
rdonnay
Site Admin
Posts: 4734
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Browse Owner-Drawing

#5 Post by rdonnay »

This is what you had helped me with before...
Rick -

Thanks, but that doesn't help either.
The problem exists when using a column cursor.

Roger
The eXpress train is coming - and it has more cars.

User avatar
Tom
Posts: 1176
Joined: Thu Jan 28, 2010 12:59 am
Location: Berlin, Germany

Re: Browse Owner-Drawing

#6 Post by Tom »

Hi, Roger.

There is no InvalidateRect() needed with every ITEMMARKED - this is causing the flickering. The other problem is how the selected cell was retrieved. This works well and without flickering:

Code: Select all

#INCLUDE "dcdialog.CH"
#pragma library ("dclipx.lib")

FUNCTION Main()

LOCAL oBrowse, aDir := Directory(), GetList[0], i, oFontLarge

LOCAL bOwnerDraw := {|a,b,o|DrawCellHighlighted(a,b,o,oFontLarge)}

oFontLarge := XbpFont():new():create('12.Lucida Console Bold')

@ 0,0 DCBROWSE oBrowse DATA aDir SIZE 100,10 ;
      OWNERDRAW bOwnerDraw ;
      /* ITEMMARKED {|a,b,o|InvalidateCellRect(o)}  */ ;
      COLOR {||IIF(oBrowse:arrayElement%2==0,{nil,GRA_CLR_PALEGRAY},{nil,nil})}

FOR i := 1 TO 10
  DCBROWSECOL ELEMENT i HEADER Alltrim(Str(i)) WIDTH 10 PARENT oBrowse OWNERDRAW
NEXT

DCREAD GUI FIT TITLE 'Browse Ownerdraw test'

RETURN nil

* -----------

PROC appsys ; RETURN

* -----------

STATIC FUNCTION InvalidateCellRect( oBrowse )

LOCAL i

FOR i := 1 TO oBrowse:colCount
  oBrowse:GetColumn(i):dataArea:invalidateRect()
NEXT

RETURN nil

* ------------

FUNCTION DrawCellHighlighted( oPS, aInfo, oBrowse, oFontLarge, oFontNormal )

LOCAL xData, nRow := aInfo[1], aRect := aInfo[XBP_DRAWINFO_RECT], ;
      oCell := aInfo[5], oColumn := aInfo[6], lStatus := .t.

IF oCell:isDerivedFrom('DC_MultiLineCellGroup') // It's a header
  RETURN .t.
ENDIF

xData := DC_XtoC(aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] ))

* IF nRow == oBrowse:rowPos .AND. oColumn == oBrowse:getColumn(oBrowse:colPos)
IF !BAnd(aInfo[XBP_DRAWINFO_STATE],XBP_DRAWSTATE_SELECTED) = 0 // selected
  oPS:setFont(oFontLarge)
  oPS:setColor(GRA_CLR_WHITE,GRA_CLR_DARKPINK)
ELSE
  oPS:setColor( IIF( aInfo[ XBP_DRAWINFO_STATE ] = XBP_DRAWSTATE_SELECTED, ;
                XBPSYSCLR_MENUHILITE, XBPSYSCLR_WINDOWSTATICTEXT ) )
ENDIF

GraCaptionStr( oPS, aRect, { aRect[3], aRect[4] }, xData )

RETURN .f.
Add: This function does not only draw highlighted cells, but all. If it's only needed for highlighted cells, it should return .F. at the "ELSE"-portion of the function.
Best regards,
Tom

"Did I offend you?"
"No."
"Okay, give me a second chance."

User avatar
Tom
Posts: 1176
Joined: Thu Jan 28, 2010 12:59 am
Location: Berlin, Germany

Re: Browse Owner-Drawing

#7 Post by Tom »

Hi, Roger.

Did those corrections work for you/your customer?
Best regards,
Tom

"Did I offend you?"
"No."
"Okay, give me a second chance."

User avatar
rdonnay
Site Admin
Posts: 4734
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Browse Owner-Drawing

#8 Post by rdonnay »

Did those corrections work for you/your customer?
Yes, everything is fine now.
The funny thing about that who fiasco was that I would have found the answer if I had just referred to my session samples from my Owner drawing session.
The eXpress train is coming - and it has more cars.

User avatar
Tom
Posts: 1176
Joined: Thu Jan 28, 2010 12:59 am
Location: Berlin, Germany

Re: Browse Owner-Drawing

#9 Post by Tom »

The funny thing about that who fiasco was that I would have found the answer if I had just referred to my session samples from my Owner drawing session.
:lol:
Best regards,
Tom

"Did I offend you?"
"No."
"Okay, give me a second chance."

Post Reply