...
essaye çà :
Code : Tout sélectionner
Procedure pointe_truc( StructPtr )
*ptr.truc = StructPtr
Debug *ptr\machin
EndProcedure
@Dri
Ton premier exemple fonctionne très bien, il y a juste une erreur:
Ce qui donne:

Ton premier exemple fonctionne très bien, il y a juste une erreur:
Code : Tout sélectionner
Procedure pointe_truc(*ptr.truc)
;Debug PeekL(ptr\machin) ;le pointeur a diparu et si tu le rajoute tu n'as plus besoin de PeekL puisque tu pointes sur une variable.
;la ligne au dessus pose problème...
EndProcedure
Code : Tout sélectionner
Procedure pointe_truc(*ptr.truc)
Debug *ptr\machin
EndProcedure

Dernière modification par nico le ven. 07/mai/2004 23:31, modifié 1 fois.
regarde on est obligé de faire ce genre de chose dans bien des
cas avec l' API windows. j'ai appris comme çà.
cas avec l' API windows. j'ai appris comme çà.
Code : Tout sélectionner
#DI_NORMAL = $0003
Procedure WindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_DRAWITEM
*DrawItem.DRAWITEMSTRUCT = lParam ; <------------- ICI
If *DrawItem\CtlType = #ODT_COMBOBOX
SetBkMode_(*DrawItem\hDC, #TRANSPARENT)
If *DrawItem\ItemState & #ODS_FOCUS
Brush = CreateSolidBrush_($FFEEFF)
FillRect_(*DrawItem\hDC, *DrawItem\rcItem, Brush)
DeleteObject_(Brush)
SetTextColor_(*DrawItem\hDC, $FF)
Else
FillRect_(*DrawItem\hDC, *DrawItem\rcItem, GetStockObject_(#WHITE_BRUSH))
EndIf
If *DrawItem\itemID <> -1
Text$ = Space(512)
SendMessage_(*DrawItem\hwndItem, #CB_GETLBTEXT, *DrawItem\itemID, @Text$)
DrawIconEx_(*DrawItem\hDC, *DrawItem\rcItem\left+2 , *DrawItem\rcItem\top+1, LoadIcon_(0, #IDI_ASTERISK), 16, 16, 0, 0, #DI_NORMAL)
TextOut_ (*DrawItem\hDC, *DrawItem\rcItem\left+2+20, *DrawItem\rcItem\top+1, Text$, Len(Text$))
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
OpenWindow(0, 0, 0, 340, 35, #PB_Window_SystemMenu|#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_TitleBar , "ComboBox")
CreateGadgetList(WindowID())
ComboBoxGadget(0, 5, 5, 330, 200, #CBS_OWNERDRAWFIXED)
AddGadgetItem(0, -1, "Test1")
AddGadgetItem(0, -1, "Test2")
AddGadgetItem(0, -1, "Test3")
SetWindowCallback(@WindowCallback())
Repeat : Until WaitWindowEvent()=#PB_EventCloseWindow
End
C'est interdit parceque, du point de vue du compilo, ça ne veut rien dire: "@variable" est une expression qui renvoie quelquechose (l'adresse de la variable), ce n'est donc pas à sa place ici.Procedure Toto( @Valeur )
; code
EndProcedure
Pour ce genre de choses, on peut utiliser les pointeurs structurés:
Code : Tout sélectionner
structure mastruc
valeur.l
chaine.s
endstructure
procedure valverschaine(*ptr.mastruc)
*ptr\chaine=str(*ptr\valeur)
endprocedure
deftype.mastruc mavar
mavar\valeur=18
valverschaine(@mavar)
result$=mavar\chaine
debug result$
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
parcequ'il est mieux organisé.
(Ly Tin Wheedle)