ich habe im engl. Forum Code runtergeladen der mit Hilfe der ragrid.dll ein
grid in PB erzeugt, welches editierbare Zellen hat.
Code:
Code: Alles auswählen
; ; RaGrid.Inc:
; ; From RaGrid zip, http://radasm.visualassembler.com/projects/Grid.zip
;
; ;GridInstall PROTO :DWORD
; ;
; ;Column Structure
; COLUMN struct
; colwt dd ? ;Column width.
; lpszhdrtext dd ? ;Pointer to header text.
; halign dd ? ;Header text alignment.
; calign dd ? ;Column text alignment.
; ctype dd ? ;Column data type.
; ctextmax dd ? ;Max text lenght for TYPE_EDITTEXT and TYPE_EDITLONG.
; lpszformat dd ? ;Format string for TYPE_EDITLONG.
; himl dd ? ;Handle of image list. For the image columns and combobox only.
; hdrflag dd ? ;Header flags. Set to ZERO or if initially sorted set to initial sort direction
; colxp dd ? ;Column position. Internally used.
; edthwnd dd ? ;Column control handle. Internally used.
; COLUMN ends
;
; ROWCOLOR struct
; backcolor dd ?
; textcolor dd ?
; ROWCOLOR ends
;
; ;Notifications GN_*
;
; GRIDNOTIFY struct
; nmhdr NMHDR <?>
; col dd ? ;Column
; row dd ? ;Row
; hwnd dd ? ;Handle of column edit control
; lpdata dd ? ;Pointer to data
; fcancel dd ? ;Set to TRUE to cancel operation
; GRIDNOTIFY ends
;
; GN_HEADERCLICK equ 1 ;User clicked header
; GN_BUTTONCLICK equ 2 ;Sendt when user clicks the button in a button cell
; GN_CHECKCLICK equ 3 ;Sendt when user double clicks the checkbox in a checkbox cell
; GN_IMAGECLICK equ 4 ;Sendt when user double clicks the image in an image cell
; GN_BEFORESELCHANGE equ 5 ;Sendt when user request a selection change
; GN_AFTERSELCHANGE equ 6 ;Sendt after a selection change
; GN_BEFOREEDIT equ 7 ;Sendt before the cell edit control shows
; GN_AFTEREDIT equ 8 ;Sendt when the cell edit control is about to close
; GN_BEFOREUPDATE equ 9 ;Sendt before a cell updates grid data
; GN_AFTERUPDATE equ 10 ;Sendt after grid data has been updated
; GN_USERCONVERT equ 11 ;Sendt when user cell needs to be converted.
;
; ;Messages GM_*
;
; GM_ADDCOL equ WM_USER+1 ;wParam=0, lParam=lpCOLUMN
; GM_ADDROW equ WM_USER+2 ;wParam=0, lParam=lpROWDATA (can be NULL)
; GM_INSROW equ WM_USER+3 ;wParam=nRow, lParam=lpROWDATA (can be NULL)
; GM_DELROW equ WM_USER+4 ;wParam=nRow, lParam=0
; GM_MOVEROW equ WM_USER+5 ;wParam=nFromRow, lParam=nToRow
; GM_COMBOADDSTRING equ WM_USER+6 ;wParam=nCol, lParam=lpszString
; GM_COMBOCLEAR equ WM_USER+7 ;wParam=nCol, lParam=0
; GM_GETCURSEL equ WM_USER+8 ;wParam=0, lParam=0
; GM_SETCURSEL equ WM_USER+9 ;wParam=nCol, lParam=nRow
; GM_GETCURCOL equ WM_USER+10 ;wParam=0, lParam=0
; GM_SETCURCOL equ WM_USER+11 ;wParam=nCol, lParam=0
; GM_GETCURROW equ WM_USER+12 ;wParam=0, lParam=0
; GM_SETCURROW equ WM_USER+13 ;wParam=nRow, lParam=0
; GM_GETCOLCOUNT equ WM_USER+14 ;wParam=0, lParam=0
; GM_GETROWCOUNT equ WM_USER+15 ;wParam=0, lParam=0
; GM_GETCELLDATA equ WM_USER+16 ;wParam=nRowCol, lParam=lpData
; GM_SETCELLDATA equ WM_USER+17 ;wParam=nRowCol, lParam=lpData (can be NULL)
; GM_GETCELLRECT equ WM_USER+18 ;wParam=nRowCol, lParam=lpRECT
; GM_SCROLLCELL equ WM_USER+19 ;wParam=0, lParam=0
; GM_GETBACKCOLOR equ WM_USER+20 ;wParam=0, lParam=0
; GM_SETBACKCOLOR equ WM_USER+21 ;wParam=nColor, lParam=0
; GM_GETGRIDCOLOR equ WM_USER+22 ;wParam=0, lParam=0
; GM_SETGRIDCOLOR equ WM_USER+23 ;wParam=nColor, lParam=0
; GM_GETTEXTCOLOR equ WM_USER+24 ;wParam=0, lParam=0
; GM_SETTEXTCOLOR equ WM_USER+25 ;wParam=nColor, lParam=0
; GM_ENTEREDIT equ WM_USER+26 ;wParam=nCol, lParam=nRow
; GM_ENDEDIT equ WM_USER+27 ;wParam=nRowCol, lParam=fCancel
; GM_GETCOLWIDTH equ WM_USER+28 ;wParam=nCol, lParam=0
; GM_SETCOLWIDTH equ WM_USER+29 ;wParam=nCol, lParam=nWidth
; GM_GETHDRHEIGHT equ WM_USER+30 ;wParam=0, lParam=0
; GM_SETHDRHEIGHT equ WM_USER+31 ;wParam=0, lParam=nHeight
; GM_GETROWHEIGHT equ WM_USER+32 ;wParam=0, lParam=0
; GM_SETROWHEIGHT equ WM_USER+33 ;wParam=0, lParam=nHeight
; GM_RESETCONTENT equ WM_USER+34 ;wParam=0, lParam=0
; GM_COLUMNSORT equ WM_USER+35 ;wParam=nCol, lParam=0=Ascending, 1=Descending, 2=Invert
; GM_GETHDRTEXT equ WM_USER+36 ;wParam=nCol, lParam=lpBuffer
; GM_SETHDRTEXT equ WM_USER+37 ;wParam=nCol, lParam=lpszText
; GM_GETCOLFORMAT equ WM_USER+38 ;wParam=nCol, lParam=lpBuffer
; GM_SETCOLFORMAT equ WM_USER+39 ;wParam=nCol, lParam=lpszText
; GM_CELLCONVERT equ WM_USER+40 ;wParam=nRowCol, lParam=lpBuffer
; GM_RESETCOLUMNS equ WM_USER+41 ;wParam=0, lParam=0
; GM_GETROWCOLOR equ WM_USER+42 ;wParam=nRow, lParam=lpROWCOLOR
; GM_SETROWCOLOR equ WM_USER+43 ;wParam=nRow, lParam=lpROWCOLOR
;
; ;Column alignment GA_*
;
; GA_ALIGN_LEFT equ 0
; GA_ALIGN_CENTER equ 1
; GA_ALIGN_RIGHT equ 2
;
; ;Column types TYPE_*
;
; TYPE_EDITTEXT equ 0 ;String
; TYPE_EDITLONG equ 1 ;Long
; TYPE_CHECKBOX equ 2 ;Long
; TYPE_COMBOBOX equ 3 ;Long
; TYPE_HOTKEY equ 4 ;Long
; TYPE_BUTTON equ 5 ;String
; TYPE_IMAGE equ 6 ;Long
; TYPE_DATE equ 7 ;Long
; TYPE_TIME equ 8 ;Long
; TYPE_USER equ 9 ;0=String, 1 to 512 bytes binary data
; TYPE_EDITBUTTON equ 10 ;String
;
; ;Column sorting SORT_*
;
; SORT_ASCENDING equ 0
; SORT_DESCENDING equ 1
; SORT_INVERT equ 2
;
; ;Window styles STYLE_*
;
; STYLE_NOSEL equ 01h
; STYLE_NOFOCUS equ 02h
; STYLE_HGRIDLINES equ 04h
; STYLE_VGRIDLINES equ 08h
; STYLE_GRIDFRAME equ 10h
;
; ODT_GRID equ 6
;
; .const
;
; IFDEF DLL
; szRAGridClass db 'RAGrid',0
; Else
; szRAGridClass db 'MyRAGrid',0
; EndIf
;
;
;
Global *OldGridProc
Structure COLUMN
colwt.l
lpszhdrtext.l
halign.l
calign.l
ctype.l
ctextmax.l
lpszformat.l
himl.l
hdrflag.l
colxp.l
edthwnd.l
EndStructure
Structure ROWDATA
lpszName.s
nID.l
EndStructure
#GM_ADDCOL = #WM_USER+1 ;wParam=0, lParam=lpCOLUMN
#GM_ADDROW = #WM_USER+2 ;wParam=0, lParam=lpROWDATA (can be NULL)
#GM_GETCURROW = #WM_USER+12 ;wParam=0, lParam=0
#GM_SETBACKCOLOR = #WM_USER+21 ;wParam=nColor, lParam=0
#GM_SETGRIDCOLOR = #WM_USER+23 ;wParam=nColor, lParam=0
#GM_SETTEXTCOLOR = #WM_USER+25 ;wParam=nColor, lParam=0
#GM_SETHDRHEIGHT = #WM_USER+31 ;wParam=0, lParam=nHeight
#GM_SETROWHEIGHT = #WM_USER+33 ;wParam=0, lParam=nHeight
#GM_COLUMNSORT = #WM_USER+35 ;wParam=nCol, lParam=0=Ascending, 1=Descending, 2=Invert
#GN_HEADERCLICK = 1 ;User clicked header
#GA_ALIGN_LEFT = 0
#GA_ALIGN_RIGHT = 2
#TYPE_EDITTEXT = 0 ;String
#TYPE_EDITLONG = 1 ;Long
#SORT_INVERT = 2
Procedure GridProc(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_MOUSEMOVE
SetWindowText_(WindowID(), "X: "+Str(lParam&$ffff)+", Y: "+Str(lParam>>16))
Case #WM_LBUTTONDOWN
SetWindowText_(WindowID(), "WM_LBUTTONDOWN")
Case #WM_LBUTTONUP
SetWindowText_(WindowID(), "WM_LBUTTONUP")
Case #WM_NOTIFY
; Catch RaGrid notifications here?
EndSelect
Debug wParam
ProcedureReturn CallWindowProc_(*OldGridProc, hWnd, uMsg, wParam, lParam)
EndProcedure
If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")
If OpenLibrary(0, "RAGrid.DLL")
InitCommonControls_()
hGrid = CreateWindowEx_($00000200, "RAGrid", "Grid test", $5001000D, 0, 0, 195, 260, WindowID(), 0, LibraryID(0), 0)
If hGrid
*OldGridProc = SetWindowLong_(hGrid, #GWL_WNDPROC, @GridProc())
hFont = SendMessage_(WindowID(), #WM_GETFONT, 0, 0)
SendMessage_(hGrid, #WM_SETFONT, hFont, #FALSE)
; Beware Delphi style Hex colour codes (not html style)
SendMessage_(hGrid, #GM_SETBACKCOLOR, $FFFFC0, 0)
SendMessage_(hGrid, #GM_SETGRIDCOLOR, $808080, 0)
SendMessage_(hGrid, #GM_SETTEXTCOLOR, $800000, 0)
SendMessage_(hGrid, #GM_SETHDRHEIGHT, 0, 24)
col.COLUMN
col\colwt = 130
col\lpszhdrtext = @"Name"
col\halign = #GA_ALIGN_LEFT
col\calign = #GA_ALIGN_LEFT
col\ctype = #TYPE_EDITTEXT
col\ctextmax = 31
col\lpszformat = 0
col\himl = 0
col\hdrflag = 0
SendMessage_(hGrid, #GM_ADDCOL, 0, @col)
;Number column
col\colwt = 42
col\lpszhdrtext = @"ID"
col\halign = #GA_ALIGN_RIGHT
col\calign = #GA_ALIGN_RIGHT
col\ctype = #TYPE_EDITLONG
col\ctextmax = 11
col\lpszformat = 0
col\himl = 0
col\hdrflag = 0
SendMessage_(hGrid, #GM_ADDCOL, 0, @col)
;Add some rows
Dim rdta.ROWDATA(6)
;Test values
rdta(0)\lpszName="Anders"
rdta(0)\nID=1
rdta(1)\lpszName="Carson"
rdta(1)\nID=3
rdta(2)\lpszName="Balantine"
rdta(2)\nID=2
rdta(3)\lpszName="Novus"
rdta(3)\nID=4
rdta(4)\lpszName="Ordo"
rdta(4)\nID=5
rdta(5)\lpszName="Seclorum"
rdta(5)\nID=6
rdta(6)\lpszName="Zachariah"
rdta(6)\nID=7
For i=0 To 6
SendMessage_(hGrid, #GM_ADDROW, 0, @rdta(i))
SendMessage_(hGrid, #GM_SETROWHEIGHT, 0, 24)
Next i
ShowWindow_(hGrid, #SW_SHOW)
; Will column sort work here.. yup
; SendMessage_(hGrid, #GM_COLUMNSORT, 1, 0)
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
EndIf
DestroyWindow_(hGrid)
EndIf
CloseLibrary(0)
EndIf
End
Kann jemand diesen Code entsprechend ergänzen bzw. versuchen eine UserLib dafür zu basteln.
edit redacid: Code-Tags gesetzt