Hello,
Hou to add a button IN the cel when the cell is marked using arrow-keys or single mouseclick.
The cell widht should remain, the cell content is truncated. On the left side IN the cell i want a DCPUSHBUTTON
If i leave the cell, the button should be removed, and the cell content displayed in full.
I need this for a touch-screen application. The browse should support 3 functions:
1 click (marked)
Double-click (Selected)
Right-click (Content menu)
The goal is to inplement right-mouse-click in a touch-screen.
Regards,
Jack Duijf
How to ... DCBROWSECOL
How to ... DCBROWSECOL
Regards,
Jack Duijf
Jack Duijf
Re: How to ... DCBROWSECOL
Jack -
Here is some code that does what you want except the button is anchored to the right side of the cell.
Roger
Here is some code that does what you want except the button is anchored to the right side of the cell.
Roger
Code: Select all
#INCLUDE "dcdialog.ch"
STATIC sxClipBoard := nil
* ----------
FUNCTION Main()
LOCAL GetList[0], oBrowse, oButtonFile, oButtonSize, oMenuFile, oMenuSize, aDir
aDir := Directory()
@ 0,0 DCBROWSE oBrowse SIZE 20,20 FIT DATA aDir ;
FONT '10.Lucida Console' ;
ITEMMARKED {||ApplyButton(oButtonFile,oButtonSize,oBrowse)}
DCBROWSECOL ELEMENT 1 PARENT oBrowse HEADER 'File Name' WIDTH 15
DCBROWSECOL ELEMENT 2 PARENT oBrowse HEADER 'File Size' WIDTH 15 PICTURE '99999 ' ALIGN DCGUI_ALIGN_LEFT
DCBROWSECOL ELEMENT 3 PARENT oBrowse HEADER 'File Date' WIDTH 15
DCBROWSECOL ELEMENT 4 PARENT oBrowse HEADER 'File Time' WIDTH 15
@ 0,0 DCPUSHBUTTONXP CAPTION 'p' SIZE 20,20 PIXEL OBJECT oButtonFile ;
EVAL {|o|o:hide()} ;
FONT '12.Marlett' ;
COLOR GRA_CLR_BLACK, GRA_CLR_PINK GRADIENT 5 RADIUS 2 ;
ACTION {|a,b,o| SetColumn(oBrowse,1), ;
oMenuFile:PopUp( o:setParent(), o:currentPos(),, ;
XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN ) }
@ 0,0 DCPUSHBUTTONXP CAPTION 'p' SIZE 20,20 PIXEL OBJECT oButtonSize ;
EVAL {|o|o:hide()} ;
COLOR GRA_CLR_BLACK, GRA_CLR_PALEGRAY GRADIENT 5 RADIUS 2 ;
FONT '12.Marlett' ;
ACTION {|a,b,o| SetColumn(oBrowse,2), ;
oMenuSize:PopUp( o:setParent(), o:currentPos(),, ;
XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN ) }
DCSUBMENU oMenuFile PROMPT 'File Menu' OWNERDRAW
DCMENUITEM 'Cut' PARENT oMenuFile ACTION {||CellCut(oBrowse,'C',1)}
DCMENUITEM 'Copy' PARENT oMenuFile ACTION {||CellCopy(oBrowse,'C',1)}
DCMENUITEM SEPARATOR PARENT oMenuFile
DCMENUITEM 'Paste' PARENT oMenuFile ACTION {||CellPaste(oBrowse,'C',1)}
DCSUBMENU oMenuSize PROMPT 'Size Menu' OWNERDRAW
DCMENUITEM 'Cut' PARENT oMenuSize ACTION {||CellCut(oBrowse,'N',2)}
DCMENUITEM 'Copy' PARENT oMenuSize ACTION {||CellCopy(oBrowse,'N',2)}
DCMENUITEM SEPARATOR PARENT oMenuSize
DCMENUITEM 'Paste' PARENT oMenuSize ACTION {||CellPaste(oBrowse,'N',2)}
DCREAD GUI FIT TITLE 'Browse with Cell Push Button'
RETURN nil
* ----------
PROC appsys ; RETURN
* ----------
STATIC FUNCTION ApplyButton( oButtonFile, oButtonSize, oBrowse )
LOCAL oColumn, oCell, aRect
oColumn := oBrowse:getColumn(1)
oCell := oColumn:dataArea
aRect := oCell:cellRect(oBrowse:rowPos)
oButtonFile:setParent(oCell)
oButtonFile:show()
oButtonFile:setPos({aRect[3]-21,aRect[2]+1})
oColumn := oBrowse:getColumn(2)
oCell := oColumn:dataArea
aRect := oCell:cellRect(oBrowse:rowPos)
oButtonSize:setParent(oCell)
oButtonSize:show()
oButtonSize:setPos({aRect[3]-21,aRect[2]+1})
RETURN nil
* ----------
STATIC FUNCTION CellCut( oBrowse, nType )
LOCAL oColumn, bEval, xValue
oColumn := oBrowse:getColumn(oBrowse:colPos)
bEval := oColumn:dataLink
xValue := Eval(bEval)
sxClipBoard := xValue
IF nType $ 'CM'
xValue := ''
ELSEIF nType == 'N'
xValue := 0
ELSEIF nType == 'L'
xValue := .f.
ELSEIF nType == 'D'
xValue := Ctod('')
ENDIF
Eval(bEval,xValue)
oBrowse:refreshCurrent()
RETURN nil
* ---------
STATIC FUNCTION CellCopy( oBrowse, nType )
LOCAL oColumn, bEval, xValue
oColumn := oBrowse:getColumn(oBrowse:colPos)
bEval := oColumn:dataLink
IF nType == 'N'
xValue := Val(DC_XtoC(Eval(bEval)))
ELSE
xValue := Eval(bEval)
ENDIF
sxClipBoard := xValue
RETURN nil
* ---------
STATIC FUNCTION CellPaste( oBrowse, nType )
LOCAL oColumn, bEval, xValue, cPaste
oColumn := oBrowse:getColumn(oBrowse:colPos)
bEval := oColumn:dataLink
xValue := Eval(bEval)
cPaste := DC_XtoC(sxClipBoard)
IF nType $ 'CM'
xValue := cPaste
ELSEIF nType == 'N'
xValue := Val(cPaste)
ELSEIF nType == 'L'
xValue := cPaste == 'Y'
ELSEIF nType == 'D'
xValue := DtoC(cPaste)
ENDIF
Eval(bEval,xValue)
oBrowse:refreshCurrent()
RETURN nil
* ---------
STATIC FUNCTION SetColumn( oBrowse, nPos )
IF nPos > oBrowse:colPos
DO WHILE nPos > oBrowse:colPos
oBrowse:right()
oBrowse:forceStable()
ENDDO
ELSEIF nPos < oBrowse:colPos
DO WHILE nPos < oBrowse:colPos
oBrowse:left()
oBrowse:forceStable()
ENDDO
ENDIF
RETURN nil
The eXpress train is coming - and it has more cars.