pour les Structures ....

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

pour les Structures ....

Message par Backup »

ça serai cool de pouvoir utiliser une variable pour les Champs Static d'une Structure


ça permettrai de pouvoir distribuer la structure dans une procedure
et d'utiliser un parametre pour formater les champs ayant des tableau Static (ou autre d'ailleurs )
genre :

Code : Tout sélectionner

Procedure LoadSprite2(id.l, file_name.s, taille_x, taille_y, nbr_frame_par_line,nbr_ligne)
	; by Dobro
	structure Spr
		id.l ; id
		x.l ; pos x
		y.l; posy
		taille_x.l ; taille x cellule
		taille_y.l ; taille y cellule
		nbr_frame_par_line.l ; nombre d'image par ligne
		nbr_ligne.l ; nombre de ligne dans la planche
		compteur.l [nbr_frame_par_line] ; compteur du pointeur d'image de l'animation  <<<< ICI Utilisation d'un parametre pour formater le tableau
		Pas.l[nbr_frame_par_line]  ; le pas de progression de l'image en cours pour l'animation <<<<  ET ICI
		Frame.l[nbr_frame_par_line]  ; l'image pointé de l'animation <<<<et  ICI
		num_ligne.l[nbr_frame_par_line]  ; ligne actuel de l'animation <<<< et ICI
		compteur_aff.l[nbr_frame_par_line] <<<< et ICI
		vitesse.l[nbr_frame_par_line] <<<<  et ICI
	Endstructure
	global dim Spr.Spr(id.l)
	Spr(id.l)\id.l=id.l
	Spr(id.l)\taille_x.l=taille_x
	Spr(id.l)\taille_y.l=taille_y
	Spr(id.l)\nbr_frame_par_line.l=nbr_frame_par_line
	Spr(id.l)\nbr_ligne.l=nbr_ligne
	for i=0 to nbr_frame_par_line
		Spr(id.l)\compteur.l[i] =0
		Spr(id.l)\Pas.l [i]  =1
		Spr(id.l)\Frame.l[i]=1
		spr(id.l)\pas [i]=1
	Next i
	LoadSprite(id.l,file_name.s,#PB_Sprite_AlphaBlending)
Endprocedure

il faut dire que je vois les procedures comme des mini-prg clef en mains , qu'on peut utiliser dans des contextes
différents .. du coup avoir la structure qui va avec, me semble primordiale , pour sa distribution ....

Purebasic , je trouve manque quelques peu de souplesse dans ce style .. :)
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: pour les Structures ....

Message par Patrick88 »

hum, tu veux faire de la programmation objet, mais ,à l'envers

(de ce que je me souviens de turbo pascal 5.5) c'est la structure (l'objet) qui contient les procedures (les méthodes)

Pat
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: pour les Structures ....

Message par Backup »

non , non , je n'y connais rien en Objet

mais c'est souvent qu'on veux proposer une procedure , et que cette procedure utilise une Structure
personnel .. comme dans mon exemple

il ne faut pas chercher a voir plus , que ce que j'ecris :)

la structure dans ce cas est un bloc de variables ... mis en place par cette procedure
... elle peut etre Shared , global etc....

un peu comme si la procedure etait un microprocesseur
et que la structure serai ses registres , qu'elle peut garder en interne (local) ou partager (global,Shared )
mais surtout de pouvoir initialiser cette Structure (ce registre) via les parametres de la fonction ... et pour le moment
c''est la seule chose qu'on ne peut pas faire ...

il y a comme ça plusieurs "blocage" a Purebasic ...

comme de creer une structure a la volé ..... ce qui n'est pas vraiment possible ...

comme une fonction qui permette la creation d'une Structure a la volée genre :

CreateStructure(name_structure,Champs1,Champs2,etc...)
puis utilisation standard :

name_structure\champ1 = xxxx
...........




bon je demande ça , sachant pertinemment , que cela n'a aucune chance de passer .... (ya des precedents )

au fond ... tant pis , j'men fout :roll:
j'vais bientot passer commande de mon velo, j'irai ecouter les grillons :lol:
(total Burn Out )
Dernière modification par Backup le dim. 16/mars/2014 9:58, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: pour les Structures ....

Message par Backup »

j'ai réédité mon dernier message ...(j'affine mes esperances :) )
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: pour les Structures ....

Message par Ar-S »

Il ni aurait pas moyen de faire ce que tu souhaites avec une macro genre

Code : Tout sélectionner

Macro CreateStructure(name_structure,Champs1,Champs2,Champs3)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: pour les Structures ....

Message par Backup »

non, car une Macro n'est pas une creation "a la volée"
une Macro est remplacée par son equivalent au moment de la compilation

je pense que pouvoir creer des Structures "a la volée" , qui plus est dans une procedure
et d'avoir la possibilité de definir les Tableaux Static a l'aide d'une ou plusieurs Variables ... serai vraiment un plus :)


tu pourrai te creer une structure , comme tu te creer un Tableau (Dim,Redim ) ... c'est a dire a la volée
au moment ou tu le desires dans le code .... et bien sur la Destruction éventuel; pareil qu'une liste, un tableau, une MAp etc ...
:)



une Structure c'est ni plus ni moins qu'un "Record" en memoire :)
c'est a dire un index , avec des Champs .... comme pour un Fichier a acces Direct , en fait .. mais en Ram :)

du coup , il manque en plus la possibilité de Charger/sauvegarder ,cette Structure d'un coup :)

et voila commen je ré-invente le fichier a "Acces Direct " d'autrefois
sauf que le principe des structure, permet d'avoir vraiment acces a tout les membres de la structure en Ram , comme maintenant .... :)
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: pour les Structures ....

Message par G-Rom »

Static veut bien dire , que c'est statique, toi tu veut une structure avec des tableau dynamique dedans.
C'est un peu contradictoire :D
En revanche, avec un peu d'astuce, et en essayant de gardé ta philosophie de code , tu peu joué avec les pointeurs :

Code : Tout sélectionner


Procedure.i foo(nbElement.l) ; renvois un struct_template
  
  ; Structure de base
  ;
  Structure struct_template
    myFloat.f
    myArray.l[0]
  EndStructure

  ; Allocation DYNAMIQUE
  ;
  Structure struct
    myFloat.f
    *myArray
  EndStructure
  
  *s.struct  = AllocateMemory(SizeOf(struct))
  *s\myFloat = #PI 
  *s\myArray = AllocateMemory((4 * nbElement))
  
  ; On manipule 
  ;
  *manipulation.struct_template = *s
  For i = 0 To nbElement-1
    *manipulation\myArray[i] = i
  Next 
  
  Debug *manipulation\myFloat
  Debug *manipulation\myArray[nbElement-1]
  
  
  ProcedureReturn *s
EndProcedure

foo(50)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: pour les Structures ....

Message par Backup »

G-Rom a écrit :Static veut bien dire , que c'est statique, toi tu veut une structure avec des tableau dynamique dedans.
C'est un peu contradictoire :D

non , tu ne comprends pas

je ne veux pas changer la taille du tableau Static , et en faire un tableau dynamique
d'autant que meme avec des tableau dynamique dans la structure, ça ne marche pas non plus ...

je voudrai juste pouvoir dans un premier temps passer en parametre la ou (les ) dimensions des tableau Static

exemple pouvoir faire :

Code : Tout sélectionner

Procedure.i foo(nombre) 
 
   Structure struct_template
    myFloat.f
    myArray.l[nombre]
  EndStructure

.....
......
Endprocedure 
cela ne changerai pas la nature Static du tableau ...ya pas de raison ....
le fait qu'un tableau soit static , n'empeche pas de pouvoir le creer a la volée
ou alors cela signifierai qu'une structure ne puisse pas etre mis ailleurs qu'en debut de code (comme une constante quoi ... )

a partir du moment ou une structure peut etre mise dans une procedure , on devrai pouvoir utiliser les paramètres de la procedure , pour peupler la structure ... ça me parait élémentaire comme raisonnement :)

car (et c'est ce que je fait dans mon code sur les Sprite animés )
une procedure ayant sa structure , peut donc etre appelée ... creer la structure ... puis les autre partie du code
peuvent en profité ...

dans mon code la procedure "LoadSprite2(id.l, file_name.s, taille_x, taille_y, nbr_frame_par_line,nbr_ligne)
"
creer et met en place la structure ; qui ensuite est utilisée par le reste de mon code , en l’occurrence :
la procedure "Anim_sprite(id.l,num_ligne,x_spr,y_spr,mode,vitesse)"

le problème c'est qu'en ayant utilisé des membres de structure tableau static ... je perd la possibilités
de dimensionner ces tableaux ... a la création de la structure ....

je pouvais aussi utiliser des tableau Hors Structure ... mais on perd le charme d'avoir tout regroupé ....


apres ... réinventer le système est toujours possible, mais c'est en Natif (donc plus simple ) que ça deviendrait intéressant :)


---------------------------------------------------------------------------------------------------------------------------------------------
je reste souvent dubitatif, devant certaines limitations de Purebasic qui force bien souvent a avoir un code hyper compliqué
ou bien grandement allongé pour palier ces "blocages" ...

par exemple pourquoi avoir creer 1 fonctions pour la couleurs des gadgets mais avec parametres séparé ??

une seule aurai suffit avec 2 parametres #Front/#Back .... :roll:
actuellement, lorsqu'on colore plein de gadgets , ça fait 2 lignes par gadget ....
ou alors ça force a faire une procedure ... histoire de n'avoir qu'une ligne ensuite .. (pourquoi faire simple )

Code : Tout sélectionner

SetGadgetColor(#Gadget, #PB_Gadget_FrontColor, Couleur)
SetGadgetColor(#Gadget, #PB_Gadget_BackColor, Couleur)
:roll:

au lieu de :

Code : Tout sélectionner

SetGadgetColor(#Gadget, couleur_fond, Couleur_text )

et tout ça -> ça ne sert a rien !!! ... il aurai pu utiliser la "couleur_fond/ Couleur_text " pour faire la meme chose

Code : Tout sélectionner

#PB_Gadget_LineColor      : Couleur de la grille
  #PB_Gadget_TitleFrontColor: Couleur du texte dans le titre (pour CalendarGadget())
  #PB_Gadget_TitleBackColor : Couleur du fond dans le titre (pour CalendarGadget())
  #PB_Gadget_GrayTextColor  : Couleur du texte inactif (pour CalendarGadget())


des exemples du genre y en a pleins ....

d'autant que le langage a de grandes qualités ... :)
Répondre