Editierbares Grid mit der ragrid.dll

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
i.j.radtke
Beiträge: 9
Registriert: 24.02.2005 17:50
Wohnort: MVP

Editierbares Grid mit der ragrid.dll

Beitrag von i.j.radtke »

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:

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
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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn die anfrage noch aktuell ist, schau doch mal unter: http://forums.purebasic.com/german/viewtopic.php?t=4188
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Gesperrt