...

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

...

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 8:56, modifié 1 fois.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 8:57, modifié 1 fois.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

essaye çà :

Code : Tout sélectionner

Procedure pointe_truc( StructPtr ) 
  *ptr.truc = StructPtr
  Debug *ptr\machin
EndProcedure
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 8:57, modifié 1 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

@Dri

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 
Ce qui donne:

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.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

regarde on est obligé de faire ce genre de chose dans bien des
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 
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Il est joli, ton petit combo. Dommage qu'il plante avec la 3.91b, sinon, je l'aurais utilisé :D

Chris :)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 8:58, modifié 1 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je ne comprends pas, dans ton deuxième exemple tu renvoie bien la valeur et non l'adresse!
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 8:59, modifié 1 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ok :)

Tu dis: PS. de plus l'utilisation d'un @ est interdite

dans quel cas!!??
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

in this case :

Procedure Toto( @Valeur )
; code
EndProcedure

:wink:
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Oui mais pourquoi c'est interdit, c'est écrit dans la doc!
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

la doc je sais pas mais en tout cas le compilateur lui il aime pas
Image
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Procedure Toto( @Valeur )
; code
EndProcedure
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.
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)
Répondre