Editierbares Grid mit der ragrid.dll
Verfasst: 24.07.2005 21:17
Hallo Leute,
ich habe im engl. Forum Code runtergeladen der mit Hilfe der ragrid.dll ein
grid in PB erzeugt, welches editierbare Zellen hat.
Code:
Leider bin ich in der API_Progarmmierung nicht so bewandert. Meine Vorstellung ist, die dll über eine UserLib anzusprechen. Wichtig wäre natürlich die Abfragen der Daten, Zeilen, Spalten, Ereignisse u.s.w..
Kann jemand diesen Code entsprechend ergänzen bzw. versuchen eine UserLib dafür zu basteln.
edit redacid: Code-Tags gesetzt
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
EndKann jemand diesen Code entsprechend ergänzen bzw. versuchen eine UserLib dafür zu basteln.
edit redacid: Code-Tags gesetzt