Javier,
Aqui tienes un ejemplo funcionando:
/*
*
* XBRMEMO.prg
* 21-04-2008 11:19 AM
*
*/
#include "FiveWin.Ch"
#include "xbrowse.ch"
//----------------------------------------------------------------------------//
function Main()
local oWnd, oBrw, oCol
If !File( "xbrmemo.dbf" )
CreateTable()
endif
USE XBRMEMO
DEFINE WINDOW oWnd
@ 0,0 XBROWSE oBrw ;
OF oWnd ;
ALIAS "XBRMEMO" AUTOCOLS
oCol := oBrw:oCol( "Notes" )
oCol:nWidth := 100
oCol:nEditType := EDIT_BUTTON
oCol:bEditBlock := { | r, c, o | EditNotes( r, c, o ) }
oCol:bOnPostEdit := { | o, cVal | If ( cVal != nil, FIELD->Notes := cVal, ) }
oBrw:CreateFromCode()
oWnd:oclient := oBrw
ACTIVATE WINDOW oWnd
return ( 0 )
//----------------------------------------------------------------------------//
static function CreateTable()
local n
local aFlds := { ;
{ "FLDID", "N", 3, 0 }, ;
{ "FLDNAME", "C", 10, 0 }, ;
{ "NOTES", "M", 10, 0 } }
dbCreate( "XBRMEMO", aFlds )
Use XBRMEMO
for n := 1 to 5
dbAppend()
FIELD->FldID := n
FIELD->FldName := {'ONE','TWO','THREE','FOUR','FIVE'}[ n ]
FIELD->Notes := "Notes for " + Str( n , 2 )
next
CLOSE DATA
return nil
//----------------------------------------------------------------------------//
static function EditNotes( nRow, nCol, oCol )
local oDlg, oGet
local lEdited := .f.
local cNotes := FIELD->NOTES
local aPoint
aPoint := ClientToScreen( oCol:oBrw:hWnd, { nRow, nCol } )
nRow := aPoint[ 1 ]
nCol := aPoint[ 2 ]
DEFINE DIALOG oDlg FROM nRow, nCol TO nRow + 230, nCol + 200 PIXEL STYLE WS_POPUP
@ 02,02 GET oGet VAR cNotes TEXT SIZE 96,96 PIXEL OF oDlg
@ 102,002 BUTTON "Ok" SIZE 47,10 PIXEL OF oDlg ;
ACTION ( lEdited := .t., oDlg:End() )
@ 102,051 BUTTON "Cancel" SIZE 47,10 PIXEL OF oDlg ;
ACTION ( lEdited := .f., oDlg:End() )
ACTIVATE DIALOG oDlg
lEdited := lEdited .and. ( cNotes != FIELD->Notes )
return If( lEdited, cNotes, nil )
//----------------------------------------------------------------------------//