Je sais pas si c'est simple mais voici un code basé sur un excellent code de El Choni d'il y a bien 2 ans.
J'ai "éclairci" le code.
Le principe, c'est une petite callback pour intercepter 2 messages, le double clic gauche de la souris et le traitement d'un message de couleur.
J'ai passé 2 heures pour essayer de faire sans callback car PB permet de récupérer le double clic mais c'est après que ça coince, pas moyen de récupérer les bonne valeurs du message.
Donc avec callback.
C'est très simple, un double clic sur un élément et tu n'as qu'à écrire directement dans la cellule, c'est la touche Entrée qui met fin à l'écriture. Après le double clic, la cellule est sur fond noir texte blanc, tu peux changer ça comme ceci :
modifie les valeurs des constantes
J'ai créé une Brush qu'il faut détruire avec l'API deleteObject, c'est dans la boucle normale, en fin de programme
C'est pas trop compliqué à utiliser, tu copies la callback et les constantes que tu as besoin et après la création de la listicon, tu mets cette ligne en changeant bien sur l'identifiant de la listicon
Code : Tout sélectionner
OlCallback = SetWindowLong_(GadgetID(#ListIconGadget1), #GWL_WNDPROC, @Mycallback())
Si tu utilise la librairie MoreListiconGadget, ne mets pas la ligne
Code : Tout sélectionner
SendMessage_(GadgetID(#ListIconGadget1), #CCM_SETVERSION, 5, 0)
car la librairie le fait déjà.
Le code
Code : Tout sélectionner
Enumeration
#MainWindow
#ListIconGadget1
#StringGadget
EndEnumeration
; Structure LVITEM
; Mask.l
; iItem.l
; iSubItem.l
; State.l
; stateMask.l
; pszText.l
; cchTextMax.l
; iImage.l
; lParam.l
; iIndent.l
; iGroupId.l
; cColumns.l
; puColumns.l
; EndStructure
;
#CCM_SETVERSION = 8199
#LVM_SUBITEMHITTEST = #LVM_FIRST + 57
#LVM_GETSUBITEMRECT = #LVM_FIRST + 56
#KeyDown = 0
#KeyUp = 2
Global OlCallback.l, BrushFondCellule
#CouleurFondCellule = 0
#CouleurTextCellule = #white
BrushFondCellule = CreateSolidBrush_(#CouleurFondCellule)
Procedure Mycallback(Window, Message, wParam, lParam)
resultat = CallWindowProc_(OlCallback, Window, Message, wParam, lParam)
Select Message
Case #WM_LBUTTONDBLCLK
var.LVHITTESTINFO
var\pt\x = lParam & $FFFF
var\pt\y = lParam >> 16
SendMessage_(Window, #LVM_SUBITEMHITTEST, 0, var)
rc.RECT
rc\top = var\iSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(Window, #LVM_GETSUBITEMRECT, var\iItem, rc)
UseGadgetList(Window)
ligne = var\iItem
colonne = var\iSubItem
Text$ = GetGadgetItemText(#ListIconGadget1, ligne, colonne )
If colonne = 0
rc\right = rc\left + SendMessage_(Window, #LVM_GETCOLUMNWIDTH, 0, 0)
EndIf
StringGadget(#StringGadget, rc\left + 1, rc\top, rc\right - rc\left - 1, rc\bottom - rc\top - 1, Text$, #PB_String_BorderLess)
ActivateGadget(#StringGadget)
Repeat
Select WaitWindowEvent()
Case #WM_KEYDOWN
Select EventwParam()
Case #VK_RETURN
Text$ = GetGadgetText(#StringGadget)
FreeGadget(#StringGadget)
SetGadgetItemText(#ListIconGadget1, Ligne, Text$, Colonne)
quit2 + 1
EndSelect
EndSelect
Until quit2
Case #WM_CTLCOLOREDIT
If GetFocus_() = lParam
SetBkMode_(wParam, #TRANSPARENT)
SetTextColor_(wParam, #CouleurTextCellule)
resultat = BrushFondCellule
EndIf
EndSelect
ProcedureReturn resultat
EndProcedure
If OpenWindow(#MainWindow, 0, 0, 480, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Cellules et stringGadget")
If CreateGadgetList(WindowID()) And ListIconGadget(#ListIconGadget1, 40, 95, 398, 180, "Col 1", 198)
SendMessage_(GadgetID(#ListIconGadget1), #CCM_SETVERSION, 5, 0)
OlCallback = SetWindowLong_(GadgetID(#ListIconGadget1), #GWL_WNDPROC, @Mycallback())
AddGadgetColumn(#ListIconGadget1, 1, "Col 2", 190 / 2)
AddGadgetColumn(#ListIconGadget1, 2, "Col 3", 190 / 2)
For i.b = 1 To 10
AddGadgetItem(#ListIconGadget1, -1, "Element " + Str(i) + Chr(10) + "Sous-élément" + Str(i) + Chr(10) + "Sous-élément" + Str(i) + Str(i))
Next i
Repeat
Select WaitWindowEvent()
Case #PB_EventCloseWindow
DeleteObject_(BrushFondCellule)
Quit + 1
EndSelect
Until Quit
EndIf
EndIf
End