ListIconGadget : Editable ?
ListIconGadget : Editable ?
Bonjour/Bonsoir,
J'ai agencé mon ListIconGadget, pensant que celui serait editable en double cliquant sur une case, hors ce n'est pas le cas.
Il y a t-il une possibilité pour ce faire ? Ou un gadget équivalent qui vous a parmis d'avoir un même rendu ?
PS : En recherchant j'ai vu quelques code mais la plupart datait de quasi une dizaine d'année...
Merci d'avance
J'ai agencé mon ListIconGadget, pensant que celui serait editable en double cliquant sur une case, hors ce n'est pas le cas.
Il y a t-il une possibilité pour ce faire ? Ou un gadget équivalent qui vous a parmis d'avoir un même rendu ?
PS : En recherchant j'ai vu quelques code mais la plupart datait de quasi une dizaine d'année...
Merci d'avance
Re: ListIconGadget : Editable ?
Bonjour,
Oui c'est possible regarde cette solution:
Oui c'est possible regarde cette solution:
Code : Tout sélectionner
; English forum:
; Author: El Choni (updated for PB3.92+ by Andre, updated for PB4.00 by blbltheworm)
; Date: 09. May 2003
; OS: Windows
; Demo: No
Procedure LoWord(value)
ProcedureReturn value & $FFFF
EndProcedure
Procedure HiWord(value)
ProcedureReturn value >> 16 & $FFFF
EndProcedure
#NM_CUSTOMDRAW = #NM_FIRST-12
#CDDS_ITEM = $10000
#CDDS_SUBITEM = $20000
#CDDS_PREPAINT = $1
#CDDS_ITEMPREPAINT = #CDDS_ITEM|#CDDS_PREPAINT
#CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM|#CDDS_ITEMPREPAINT
#CDRF_DODEFAULT = $0
#CDRF_NEWFONT = $2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_NOTIFYSUBITEMDRAW = $20
#LVM_SUBITEMHITTEST = #LVM_FIRST+57
#LVM_GETSUBITEMRECT = #LVM_FIRST+56
Global ListGadget, OldLViewProc, OldEditProc, hEdit, rct.RECT, CellSelectOn, CurItem, CurSubItem, CurSelItem, CurSelSubItem
Declare EditProc(hwnd, uMsg, wParam, lParam)
Declare LViewProc(hwnd, uMsg, wParam, lParam)
Declare WndProc(hwnd, uMsg, wParam, lParam)
Declare KillFocus()
Declare DrawRectangle(hwnd, *rc.RECT)
#CCM_SETVERSION = #CCM_FIRST+7
Global FontReg, FontBold
FontReg = LoadFont(1, "Tahoma", 9)
FontBold = LoadFont(2, "Tahoma", 9, #PB_Font_Bold)
If OpenWindow(0, 0, 0, 400, 260, "Color List View Rows", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)=0:End:EndIf
ListGadget = ListIconGadget(1, 10, 10, 380, 240, "", 70, #PB_ListIcon_GridLines|#LVS_NOSORTHEADER)
SendMessage_(ListGadget, #CCM_SETVERSION, 5, 0)
AddGadgetColumn(1, 1, "Sun", 35)
AddGadgetColumn(1, 2, "Mon", 35)
AddGadgetColumn(1, 3, "Tue", 35)
AddGadgetColumn(1, 4, "Wed", 35)
AddGadgetColumn(1, 5, "Thu", 35)
AddGadgetColumn(1, 6, "Fri", 35)
AddGadgetColumn(1, 7, "Sat", 35)
For i=18 To 34
hour12 = i
If hour12>25
hour12-24
Hour$ = " pm"
Else
Hour$ = " am"
EndIf
If hour12&1
Hour$=Str(hour12/2)+":30"+Hour$;LSet(Str(hour12/2)+":30"+Hour$, 9, " ")
Else
Hour$=Str(hour12/2)+":00"+Hour$;LSet(Str(hour12/2)+":00"+Hour$, 9, " ")
EndIf
AddGadgetItem(1, -1, Hour$+Chr(10)+Str(hour12/2)+"1"+Chr(10)+Str(hour12/2)+"2"+Chr(10)+Str(hour12/2)+"3"+Chr(10)+Str(hour12/2)+"4"+Chr(10)+Str(hour12/2)+"5"+Chr(10)+Str(hour12/2)+"6"+Chr(10)+Str(hour12/2)+"7")
Next i
SendMessage_(ListGadget, #LVM_SETBKCOLOR, 0, RGB(255, 255, 223))
OldLViewProc = SetWindowLong_(ListGadget, #GWL_WNDPROC, @LViewProc())
SetWindowCallback(@WndProc())
For i=0 To 7
SendMessage_(ListGadget, #LVM_SETCOLUMNWIDTH, i, #LVSCW_AUTOSIZE_USEHEADER)
Next i
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
End
Procedure KillFocus()
If hEdit
SetGadgetItemText(1, CurItem, GetGadgetText(2), CurSubItem)
FreeGadget(2)
hEdit = 0
EndIf
EndProcedure
Procedure DrawRectangle(hwnd, *rc.RECT)
hDC = GetDC_(hwnd)
OldPen = SelectObject_(hDC, GetStockObject_(#BLACK_PEN))
OldBrush = SelectObject_(hDC, GetStockObject_(#NULL_BRUSH))
Rectangle_(hDC, *rc\left, *rc\top, *rc\right, *rc\bottom)
SelectObject_(hDC, OldBrush)
SelectObject_(hDC, OldPen)
ReleaseDC_(hwnd, hDC)
EndProcedure
Procedure EditProc(hwnd, uMsg, wParam, lParam)
result = 0
Select uMsg
Case #WM_KEYDOWN
result = CallWindowProc_(OldEditProc, hwnd, uMsg, wParam, lParam)
If wParam=#VK_RETURN
KillFocus()
EndIf
Default
result = CallWindowProc_(OldEditProc, hwnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
Procedure LViewProc(hwnd, uMsg, wParam, lParam)
result = 0
Select uMsg
Case #WM_LBUTTONDBLCLK
If hwnd<>hEdit
KillFocus()
pInfo.LVHITTESTINFO
pInfo\pt\x = LoWord(lParam)
pInfo\pt\y = HiWord(lParam)
SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, pInfo)
rc.RECT
rc\top = pInfo\iSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, pInfo\iItem, rc)
If hEdit=0
UseGadgetList(hwnd)
CurItem = pInfo\iItem
CurSubItem = pInfo\iSubItem
Text$ = GetGadgetItemText(1, CurItem, CurSubItem)
If CurSubItem=0
rc\right = rc\left+SendMessage_(hwnd, #LVM_GETCOLUMNWIDTH, 0, 0)
EndIf
hEdit = StringGadget(2, rc\left+1, rc\top, rc\right-rc\left-1, rc\bottom-rc\top-1, Text$, #PB_String_BorderLess)
If CurSubItem=0
SendMessage_(hEdit, #WM_SETFONT, FontBold, #True)
Else
SendMessage_(hEdit, #WM_SETFONT, FontReg, #True)
EndIf
OldEditProc = SetWindowLong_(hEdit, #GWL_WNDPROC, @EditProc())
SetFocus_(hEdit)
EndIf
Else
result = CallWindowProc_(OldLViewProc, hwnd, uMsg, wParam, lParam)
EndIf
Case #WM_LBUTTONDOWN
If hwnd<>hEdit
KillFocus()
pInfo.LVHITTESTINFO
pInfo\pt\x = LoWord(lParam)
pInfo\pt\y = HiWord(lParam)
SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, pInfo)
rc.RECT
rc\top = pInfo\iSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, pInfo\iItem, rc)
rc\left+1
rc\bottom-1
If CellSelectOn
InvalidateRect_(hwnd, rct, #True)
EndIf
CellSelectOn = 1
CurSelItem = pInfo\iItem
CurSelSubItem = pInfo\iSubItem
If CurSelSubItem=0
rc\right = rc\left+SendMessage_(hwnd, #LVM_GETCOLUMNWIDTH, 0, 0)
EndIf
DrawRectangle(hwnd, rc)
CopyMemory(rc, rct, SizeOf(RECT))
Else
SetFocus_(hEdit)
result = CallWindowProc_(OldLViewProc, hwnd, uMsg, wParam, lParam)
EndIf
Case #WM_CTLCOLOREDIT
If GetFocus_()=lParam
SetBkMode_(wParam, #TRANSPARENT)
If CurItem&1=0
TextBkColor = RGB(255, 255, 223)
If CurSubItem=3
TextColor = RGB(255, 0, 0)
EndIf
Else
TextBkColor = RGB(208, 208, 176)
If CurSubItem=3
TextColor = RGB(0, 0, 255)
EndIf
EndIf
SetTextColor_(wParam, TextColor)
result = CreateSolidBrush_(TextBkColor)
Else
result = CallWindowProc_(OldLViewProc, hwnd, uMsg, wParam, lParam)
EndIf
Case #WM_VSCROLL
result = CallWindowProc_(OldLViewProc, hwnd, uMsg, wParam, lParam)
rc.RECT
TopVisibleItem = SendMessage_(hwnd, #LVM_GETTOPINDEX, 0, 0)
If CellSelectOn
rc\top = CurSelSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, CurSelItem, rc)
rct\top = rc\top
rct\bottom = rc\bottom-1
If TopVisibleItem<=CurSelItem
DrawRectangle(hwnd, rct)
EndIf
EndIf
If hEdit
If TopVisibleItem<=CurItem
ResizeGadget(2,#PB_Ignore, rc\top,#PB_Ignore,#PB_Ignore)
HideGadget(2, #False)
RedrawWindow_(hEdit, 0, 0, #RDW_INTERNALPAINT|#RDW_ERASE|#RDW_INVALIDATE)
Else
HideGadget(2, #True)
EndIf
SetFocus_(hEdit)
EndIf
Case #WM_HSCROLL
result = CallWindowProc_(OldLViewProc, hwnd, uMsg, wParam, lParam)
rc.RECT
TopVisibleItem = SendMessage_(hwnd, #LVM_GETTOPINDEX, 0, 0)
If CellSelectOn
rc\top = CurSelSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, CurSelItem, rc)
rct\left = rc\left+1
rct\right = rc\right
If TopVisibleItem<=CurSelItem
DrawRectangle(hwnd, rct)
EndIf
EndIf
If hEdit
If TopVisibleItem<=CurItem
ResizeGadget(2, rc\left,#PB_Ignore,#PB_Ignore,#PB_Ignore)
HideGadget(2, #False)
RedrawWindow_(hEdit, 0, 0, #RDW_INTERNALPAINT|#RDW_ERASE|#RDW_INVALIDATE)
Else
HideGadget(2, #True)
EndIf
SetFocus_(hEdit)
EndIf
Default
result = CallWindowProc_(OldLViewProc, hwnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*pnmh.NMHDR = lParam
Select *pnmh\code
Case #NM_CUSTOMDRAW
*LVCDHeader.NMLVCUSTOMDRAW = lParam
If *LVCDHeader\nmcd\hdr\hWndFrom=ListGadget
Select *LVCDHeader\nmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
result = #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_SUBITEMPREPAINT
Row = *LVCDHeader\nmcd\dwItemSpec
Col = *LVCDHeader\iSubItem
If Col=0
SelectObject_(*LVCDHeader\nmcd\hDC, FontBold)
Else
SelectObject_(*LVCDHeader\nmcd\hDC, FontReg)
EndIf
If Row&1=0
*LVCDHeader\clrTextBk = RGB(255, 255, 223)
If Col=3
*LVCDHeader\clrText = RGB(255, 0, 0)
Else
*LVCDHeader\clrText = RGB(0, 0, 0)
EndIf
Else
*LVCDHeader\clrTextBk = RGB(208, 208, 176)
If Col=3
*LVCDHeader\clrText = RGB(0, 0, 255)
Else
*LVCDHeader\clrText = RGB(0, 0, 0)
EndIf
EndIf
result = #CDRF_NEWFONT
EndSelect
EndIf
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
Re: ListIconGadget : Editable ?
J'ai crée ceci il me semble que cela peut être pas mal
Note qu'il faille la libs PureCOLOR pour fonctionner !

Note qu'il faille la libs PureCOLOR pour fonctionner !
Code : Tout sélectionner
; Exemple réaliser par monsieur dieppedalle david le 23 mars 2011
; Petite mise a jour le 10 octobre 2011
#Fenetre = 1
#ListIcon = 2
#BarreStatue = 3
Global CouleurFondCaseSelectionner = RGB(51, 153, 255)
Global CouleurTexteCaseSelectionner = RGB(255, 255, 255)
Global SauvegardeCase
Global SauvegardeColonne
Global SauvegardeCouleurCase
Global SauvegardeCouleurTexteCase
Global TexteCellule$
Global ListViewClickLigne
Global ListViewClickColonne
; pas de moi mais modifier par moi
Procedure.l WindowCallBack(WindowID.l, Message.l, wParam.l, lParam.l)
ReturnValue.l = #PB_ProcessPureBasicEvents
;
If Message = #WM_NOTIFY
*msg.NMHDR = lParam
If *msg\hwndFrom = GadgetID(#ListIcon) And *msg \ code = #NM_CLICK
*ListViewIA.NMITEMACTIVATE = lParam
ListViewClickLigne = *ListViewIA \ iItem
ListViewClickColonne = *ListViewIA \ iSubItem
SauvegardeCouleurCase = PureCOLOR_GetCellColor(#ListIcon, ListViewClickLigne, ListViewClickColonne, 2)
SauvegardeCouleurTexteCase = PureCOLOR_GetCellColor(#ListIcon, ListViewClickLigne, ListViewClickColonne, 1)
TexteCellule$ = GetGadgetItemText(#ListIcon, ListViewClickLigne, ListViewClickColonne)
If ListViewClickLigne <> -1 And ListViewClickColonne <> - 1
StatusBarText(#BarreStatue, 0, " Cliquer gauche sur: Ligne " + Str(ListViewClickLigne + 1) + ", Colonne " + Str(ListViewClickColonne + 1) + ", Texte: " + Chr(34) + TexteCellule$ + Chr(34))
Else
StatusBarText(#BarreStatue, 0, "Cliquez sur une cellule")
EndIf
PureCOLOR_SetCellColor(#ListIcon, ListViewClickLigne, ListViewClickColonne, CouleurTexteCaseSelectionner, CouleurFondCaseSelectionner)
PureCOLOR_SetCellColor(#ListIcon, SauvegardeCase, SauvegardeColonne, SauvegardeCouleurTexteCase, SauvegardeCouleurCase)
SauvegardeCase = ListViewClickLigne
SauvegardeColonne = ListViewClickColonne
SetActiveGadget(999)
ReturnValue = #False
ElseIf *msg\hwndFrom = GadgetID(#ListIcon) And *msg \ code = -5
*ListViewIA.NMITEMACTIVATE = lParam
ListViewClickLigne = *ListViewIA \ iItem
ListViewClickColonne = *ListViewIA \ iSubItem
SauvegardeCouleurCase = PureCOLOR_GetCellColor(#ListIcon, ListViewClickLigne, ListViewClickColonne, 2)
SauvegardeCouleurTexteCase = PureCOLOR_GetCellColor(#ListIcon, ListViewClickLigne, ListViewClickColonne, 1)
TexteCellule$ = GetGadgetItemText(#ListIcon, ListViewClickLigne, ListViewClickColonne)
If ListViewClickLigne <> -1 And ListViewClickColonne <> - 1
StatusBarText(#BarreStatue, 0, " Cliquer droit sur: Ligne " + Str(ListViewClickLigne + 1) + ", Colonne " + Str(ListViewClickColonne + 1) + ", Texte: " + Chr(34) + TexteCellule$ + Chr(34))
Else
StatusBarText(#BarreStatue, 0, "Cliquez sur une cellule")
EndIf
PureCOLOR_SetCellColor(#ListIcon, ListViewClickLigne, ListViewClickColonne, CouleurTexteCaseSelectionner, CouleurFondCaseSelectionner)
PureCOLOR_SetCellColor(#ListIcon, SauvegardeCase, SauvegardeColonne, SauvegardeCouleurTexteCase, SauvegardeCouleurCase)
SauvegardeCase = ListViewClickLigne
SauvegardeColonne = ListViewClickColonne
SetActiveGadget(999)
ReturnValue = #False
EndIf
EndIf
ProcedureReturn ReturnValue
EndProcedure
; pas de moi mais modifier par moi
Procedure ListIconNombreColonne(Gadget)
col.LV_COLUMN\mask = #LVCF_WIDTH
Repeat
NombreColonne + 1
X = SendMessage_(GadgetID(Gadget), #LVM_GETCOLUMN, NombreColonne, @col)
Until X = 0
ProcedureReturn NombreColonne
EndProcedure
OpenWindow(#Fenetre, 100, 300, 600, 450, "Intéragire avec les cellules", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(999, 0, 0, 0, 0, "")
CreateStatusBar(#BarreStatue, WindowID(#Fenetre))
AddStatusBarField(400)
AddStatusBarField(90)
AddStatusBarField(120)
StatusBarText(#BarreStatue, 0, "Cliquez sur une cellule")
SetWindowCallback(@WindowCallBack())
ListIconGadget(#ListIcon, 1, 1, 598, 425, "0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
;
SetGadgetItemText(#ListIcon, -1, "Colonne 1", 0)
SetGadgetItemAttribute(#ListIcon, 0, #PB_ListIcon_ColumnWidth, 65 , 0)
For b = 2 To 6 ; ajouter 3 Colonnes supplémentaires
AddGadgetColumn(#ListIcon, b, "Colonne " + Str(b), 65)
Next
For b = 1 To 20 ; ajouter 4 éléments à chaque ligne des listes avec icônes
AddGadgetItem(#ListIcon, b - 1, "Elément " + Str(b) + Chr(10) + "Elément " + Str(b) + Chr(10) + "Elément " + Str(b) + Chr(10) + "Elément " + Str(b) + Chr(10) + "Elément " + Str(b) + Chr(10) + "Elément " + Str(b) + Chr(10) + "Elément " + Str(b) + Chr(10) + "Elément 8")
Next
StatusBarText(#BarreStatue, 1, " Ligne: " + Str(CountGadgetItems(#ListIcon)))
StatusBarText(#BarreStatue, 2, " Colonne: " + Str(ListIconNombreColonne(#ListIcon)))
Repeat ; Start of the event loop
Event = WaitWindowEvent(1) ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
If Event = #PB_Event_Gadget
If GadgetID = #ListIcon
If EventType = #PB_EventType_LeftDoubleClick
If SauvegardeCase <> -1 And SauvegardeColonne <> - 1
Texte$ = InputRequester("Editer le Texte de la cellule", "Veuillez entrez le nouveaux texte de la cellule", GetGadgetItemText(#ListIcon, SauvegardeCase, SauvegardeColonne))
If Texte$ > ""
SetGadgetItemText(#ListIcon, SauvegardeCase, Texte$, SauvegardeColonne)
TexteCellule$ = GetGadgetItemText(#ListIcon, SauvegardeCase, SauvegardeColonne)
StatusBarText(#BarreStatue, 0, " Cliquer sur: Ligne " + Str(SauvegardeCase + 1) + ", Colonne " + Str(SauvegardeColonne + 1) + ", Texte: " + Chr(34) + TexteCellule$ + Chr(34))
Else
StatusBarText(#BarreStatue, 0, "Cliquez sur une cellule")
EndIf
EndIf
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ListIconGadget : Editable ?
En natif, les ListIcongadget ne sont pas éditables. Tu peux utiliser un include que tu peux télécharger sur ce lien (EditListIcont.zip) qui va te permette de résoudre ce problème.
Deux fonctions :
SetListIconEditable(Gadget) : Le ListIcongadget devient éditable. Tu peux cliquer sur une cellule.
EditCell(gadget, Row, Col) : Focus en édition sur une cellule.
Un exemple de code çi-dessous.
Deux fonctions :
SetListIconEditable(Gadget) : Le ListIcongadget devient éditable. Tu peux cliquer sur une cellule.
EditCell(gadget, Row, Col) : Focus en édition sur une cellule.
Un exemple de code çi-dessous.
Code : Tout sélectionner
XIncludeFile "EditListIcon.pbi"
DisableExplicit
LoadFont(1, "Arial", 10)
If OpenWindow(0, 100, 100, 600, 600, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 5, 5, 490, 390, "", 0, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
SetGadgetFont(1, FontID(1))
For i = 0 To 2
AddGadgetColumn(1, i, "Col " + Str(i), 100)
Next
For row = 1 To 10
AddGadgetItem(1, -1, "")
For col = 2 To 10
SetGadgetItemText(1, row-1, "row " + Str(row-1) + ", col " + Str(col), col)
Next
Next
SetListIconEditable(1) ;ListIconGadget devient éditable
EditCell(1, 5, 1) ;Focus sur la 6ligne colonne 2
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: ListIconGadget : Editable ?
On dirais qu'il y a des bugs quand tu édite certaine cellules
Elle se décales et reviennent à leur place une fois fini, c'est normale ça ?

Elle se décales et reviennent à leur place une fois fini, c'est normale ça ?

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ListIconGadget : Editable ?
Merci de me l'avoir signaler. Correction effectuée.dayvid a écrit :On dirais qu'il y a des bugs quand tu édite certaine cellules
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: ListIconGadget : Editable ?
Super Falsam
Je souhaiterais cependant te faire part de certaine chose à améliorer si tu veux bien
1 - Quand tu double clique sur une cellule, le StrinGadget devrais à mon sens prendre la largeur de la colonne et ne jamais la dépasser !
2 - L'or de l'édition de la cellule, si le texte est plus long que celle-ci, celui-ci glissera vers la gauche et ne serra visible que la partie éditer (tu me suis ?)
3 - Quand tu double clique sur une cellule, il ne devrais pas y avoir de décalage entre le StrinGadget et la cellule !
On voie un petit décalage du texte, ça ne fais pas propre je trouve
Âpres les critique:
Très bon job


Je souhaiterais cependant te faire part de certaine chose à améliorer si tu veux bien

1 - Quand tu double clique sur une cellule, le StrinGadget devrais à mon sens prendre la largeur de la colonne et ne jamais la dépasser !
2 - L'or de l'édition de la cellule, si le texte est plus long que celle-ci, celui-ci glissera vers la gauche et ne serra visible que la partie éditer (tu me suis ?)
3 - Quand tu double clique sur une cellule, il ne devrais pas y avoir de décalage entre le StrinGadget et la cellule !
On voie un petit décalage du texte, ça ne fais pas propre je trouve

Âpres les critique:
Très bon job


La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ListIconGadget : Editable ?
Regarde bien le créateur de cet include ....... c'est pas moi :pdayvid a écrit :Très bon job![]()
Le fil de discutions que j'ai retrouvé sur le forum anglais
http://www.purebasic.fr/english/viewtop ... 12&t=27012
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: ListIconGadget : Editable ?
Merci pour vos réponses, je me disais bien que c'était une fonctionnalité particulièrement utilisé.
J'ai donc pris le fichier que tu as modifié falsam, en regardant le code des autres membres pour vori comment vous avez fait le tout.
Excellent en tout cas, d'une grande simplicité, le petit bug génant c'est que quand on modifie une cellule alors la cellule de la 1ere colonne de cette ligne disparaît... étrange.
Après j'aurais aimé pouvoir locker une colonne, je vais voir si c'est possible de le faire rapidement en trifouillant rapidement.
En tout cas merci à vous et si quelqu'un met à jour le fichier magique je suis là !
J'ai donc pris le fichier que tu as modifié falsam, en regardant le code des autres membres pour vori comment vous avez fait le tout.
Excellent en tout cas, d'une grande simplicité, le petit bug génant c'est que quand on modifie une cellule alors la cellule de la 1ere colonne de cette ligne disparaît... étrange.
Après j'aurais aimé pouvoir locker une colonne, je vais voir si c'est possible de le faire rapidement en trifouillant rapidement.
En tout cas merci à vous et si quelqu'un met à jour le fichier magique je suis là !
Re: ListIconGadget : Editable ?
Aucun intérêt de remettre le fichier, mais juste à changer les lignes 228 à 230 ce qui donne :3 - Quand tu double clique sur une cellule, il ne devrais pas y avoir de décalage entre le StrinGadget et la cellule !
On voie un petit décalage du texte, ça ne fais pas propre je trouve
Code : Tout sélectionner
*wpos\cy=*liedit\cy
*wpos\x=*liedit\x
*wpos\y=*liedit\y
J'édite si je trouve pour LockColumn()... mais ça va être beaucoup plus dur surtout que niveau API Windows je rame, si quelqu'un si connait, come at me !
Edit : http://herosh.com/download/10883195/edi ... n.rar.html
Voilà ou j'en suis : LockColumn/LockRow(#IdListIcon, item) permet donc de gelé une ligne/colonne.
Seul soucis, je trouve mon code dégueulasse : j'ai voulu avoir un accès direct comme le fait une table de hachage, hors je ne sais pas comment on en fait en PB, donc j'ai fais une structure (Dim locked.elem(100)), donc on ne peut gelé que les 100 premieres colonnes ou lignes. Si quelqu'un pourrait régler ce problème car je pense que c'est immonde au niveau de la mémoire.
Thanks
PS : Toujours pas réussi à enlever le fait que la première colonne disparaisse, je laisse la place.
Re: ListIconGadget : Editable ?
J'avoue que c'est ce qui m'a rebuté dans mon programme de domotique : les gars qui ont développés Excel sont des cadors en API Windows
Pour ma part, lorsqu'il y a un double-clic sur une ligne (de cellules), j'ouvre un formulaire...
Dommage que Purebasic ne propose pas un Gadget "Tableau-Editable" car j'ai toujours l'impression de rajouter une usine à gaz très contraignante sur cet aspect
Peut-être dans la version 5.00


Pour ma part, lorsqu'il y a un double-clic sur une ligne (de cellules), j'ouvre un formulaire...
Dommage que Purebasic ne propose pas un Gadget "Tableau-Editable" car j'ai toujours l'impression de rajouter une usine à gaz très contraignante sur cet aspect

Peut-être dans la version 5.00


Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ListIconGadget : Editable ?
Tu peux essayer d'utiliser PureLVSORT
Dans sa derniere version, en plus de proposer un tri sur les colonnes ainsi qu'une sauvegarde du contenu d'un ListIconGadget, gnozal, propose une solution d'édition :
-Saisie de texte libre,
-Choix d'une valeur dans une liste déroulante

La mise en oeuvre est simple à travers un CallBack évènementiel.
Les évenements testes sont les suivants.
#PureLVSORT_EditStart - La cellule vient de passer en mode édition
#PureLVSORT_EditText - Le texte de la cellule a changé
#PureLVSORT_EditEnd - Sortie du mode édition avec la touche Entrée
#PureLVSORT_EditEscape - Sortie du mode édition avec la touche Escape
Pour les 2 premiers évènements il est possible de connaitre la colonne et la ligne qui a provoqué l'évenement.
Malheureusement pour les deux suivants je pense qu'il y a un bug, !!
Le lien de téléchargement pour la version 4.60 ou 4.61
PB4.6x : http://gnozal.ucoz.com/PureLVSORT_460.zip
Il y a deux versions dans cette archive : PureLVSORT (standard) etPureLVSORT-Plus. Cette version contient les fonctionnalités de bases pour éditer un ListIconGadget. L'éxécution de PureLVSORT-Plus s'occupera de mettre en place la lib sans le dossier de Pure Basic. N'oublies pas de redémarrer le compilateur (menu compilateur puis redémarrer le compilateur).
Le post sur le forum anglais
http://www.purebasic.fr/english/viewtop ... purelvsort
Le site de gnozal
http://gnozal.ucoz.com/
Dans sa derniere version, en plus de proposer un tri sur les colonnes ainsi qu'une sauvegarde du contenu d'un ListIconGadget, gnozal, propose une solution d'édition :
-Saisie de texte libre,
-Choix d'une valeur dans une liste déroulante

La mise en oeuvre est simple à travers un CallBack évènementiel.
Les évenements testes sont les suivants.
#PureLVSORT_EditStart - La cellule vient de passer en mode édition
#PureLVSORT_EditText - Le texte de la cellule a changé
#PureLVSORT_EditEnd - Sortie du mode édition avec la touche Entrée
#PureLVSORT_EditEscape - Sortie du mode édition avec la touche Escape
Pour les 2 premiers évènements il est possible de connaitre la colonne et la ligne qui a provoqué l'évenement.
Malheureusement pour les deux suivants je pense qu'il y a un bug, !!
Code : Tout sélectionner
;Test PureLVSORT
;PB 4.61
Enumeration
#FontApp
#Mainform
#Table
#TotQte
#Status
EndEnumeration
Global TotQte.i, LastBuffer.s
Global Mois.s="Janvier|Février|Mars|Avril|Mai|juin"
Declare.L Edit_Callback(Event.l, ListIconNumber.l, Column.l, Row.l, Text.s)
Declare GetTotalQty()
Declare Open_MainForm()
Procedure.l Edit_Callback(Event.l, ListIconNumber.l, Column.l, Row.l, Text.s)
Static LastColumn = -1, LastRow = -1, LastBuffer.s
If Column <> -1
LastColumn = Column
LastBuffer=Text
EndIf
If Row <> -1
LastRow = Row
EndIf
SetGadgetText(#Status, Str(Column)+"/"+Str(LastRow))
Select Event
Case #PureLVSORT_EditStart
Select LastColumn
Case 0 ;Colonne 1 on peut choisir un mois (defilement des fleches)
ProcedureReturn @"Janvier|Février|Mars|Avril|Mai|Juin"
Case 1 ;Quantité de 1 à 10
ProcedureReturn @"1|2|3|4|5|6|7|8|9|10"
Case 2 ;Texte libre
ProcedureReturn 0
EndSelect
Case #PureLVSORT_EditText
;On transforme le texte en masjuscule en cours d'écriture
Select LastColumn
Case 0
Case 1
Case 2
LastBuffer=UCase(LastBuffer)
ProcedureReturn @LastBuffer
EndSelect
Case #PureLVSORT_EditEnd
;Si une quantité est modifiée on recalcul le cumul de ces quantités
Select LastColumn
Case 0
Case 1
GetTotalQty()
Case 2
EndSelect
Case #PureLVSORT_EditEscape
ProcedureReturn @Text ; On retourne le texte initiale
EndSelect
EndProcedure
;Recalcul les quantités
Procedure GetTotalQty()
TotQte=0
For i=0 To CountGadgetItems(#Table)-1
TotQte+Val(GetGadgetItemText(#Table,i,1))
Next
SetGadgetText(#TotQte, Str(TotQte))
EndProcedure
;Fenetre principale
Procedure Open_MainForm()
LoadFont(#FontApp,"Arial",11)
SetGadgetFont(#PB_Default,FontID(#FontApp))
OpenWindow(#Mainform, 0, 0, 500, 400, "Test PureLVSORT")
ListIconGadget(#Table, 10,10,480,200,"Mois",100, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#Table,1,"Qté.",50)
AddGadgetColumn(#Table,2,"Observation.",200)
TextGadget(#PB_Any, 10, 220, 100, 20, "Total Quantité : ")
TextGadget(#TotQte, 110, 220, 50, 22, "0")
TextGadget(#Status, 20, 350, 150, 22, "")
;Un peu de remplissage
For row=0 To 5
AddGadgetItem(#Table, -1, StringField(Mois,Row+1,"|") + Chr(10)+Str(Row))
Next
GetTotalQty()
;Utilisation de PureLVSORT
If PureLVSORT_SelectGadgetToSort(#Table, #PureLVSORT_ShowClickedHeader_IconLeft) = #PureLVSORT_Ok
PureLVSORT_SetColumnType(#Table, 0, #PureLVSORT_String)
PureLVSORT_SetColumnType(#Table, 1, #PureLVSORT_Float)
PureLVSORT_SetColumnAlignment(#Table, 1, #PureLVSORT_Right)
PureLVSORT_MakeColumnEditable(#Table, 0, #True)
PureLVSORT_MakeColumnEditable(#Table, 1, #True)
PureLVSORT_MakeColumnEditable(#Table, 2, #True)
PureLVSORT_SetEditingColors($DEF4F8, $000000)
PureLVSORT_SetEditingCallback(@Edit_Callback())
EndIf
EndProcedure
Open_MainForm()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
PB4.6x : http://gnozal.ucoz.com/PureLVSORT_460.zip
Il y a deux versions dans cette archive : PureLVSORT (standard) etPureLVSORT-Plus. Cette version contient les fonctionnalités de bases pour éditer un ListIconGadget. L'éxécution de PureLVSORT-Plus s'occupera de mettre en place la lib sans le dossier de Pure Basic. N'oublies pas de redémarrer le compilateur (menu compilateur puis redémarrer le compilateur).

http://www.purebasic.fr/english/viewtop ... purelvsort

http://gnozal.ucoz.com/
Dernière modification par falsam le mer. 06/juin/2012 21:05, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: ListIconGadget : Editable ?
Thanks, je devrais avoir tout les outils pour faire mes petites fonctions maintenant !
Re: ListIconGadget : Editable ?
C'est quoi, tu peut nous expliquer s'il te plait 

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php