Gambas France BETA


Pas de compte ? Incription

Une collection de classes

1
AuteurMessages
Yves07#1 Posté le 26/6/2011 à 19:02:00
Alors voilà.

Ca fait trois jours que je tourne en rond sans trouver la façon d'organiser mes données alors voici ce que je cherche à faire (il se peut que le simple fait d'exposer le problème m'aide à trouver la solution !)

Un transformateur est constitué d'un noyau et d'enroulements.
- le noyau a une certaine taille (dimensions)
Le nombre d'enroulements est quelconque mais supèrieur à 0
Un enroulement peut être constitué:
- d'un certain nombre de tours de fil de cuivre d'une certain qualité, diamètre, etc ... (une demi douzaine de variables)
- d'un certain nombre de tours d'isolant d'une certaine qualité, épaisseur, etc ...
On doit pouvoir ajouter, supprimer, éditer ou déplacer de enroulements ... la routine quoi !

Il n'est pas difficile de créer un classe "enroulement".

Là où ça coince c'est pour créer une sorte de liste ou de collection redimensionnable et affichable afin d'accéder d'un click à l'instance choisie, je ne trouve rien qui ressemble de près ou de loin à une liste, une collection ni même un tableau de classes. Pourtant à l'évidence le créateur de GUI fonctionne comme ça !

Une direction de recherche ? ?
Si possible, pas de base de données.
Merci.

Yves.

jeanyvon#2 Posté le 27/6/2011 à 06:16:00
Gambas? Ma! Et gustoSalut,
Et une base de données?
Une table noyau, une table enroulement, une table transfo pour stocker les résultats.
tu as des exemples dans le wiki et dans les exemples.
A+
JY
Vieillir? On peut retarder mais pas y échapper!
manu#3 Posté le 27/6/2011 à 06:29:00
Avec Gambas ca roule !Peux tu repreciser ta question, car la je ne comprend pas exactement ce que tu veux faire.
Créer une classe transfo me parais une bonne idée avec des propriétés comme taille, enroulement etc ainsi que des fonctions a l’intérieur...
Je ne vois pas ou se situe ton problème exactement.

Sois plus précis dans ta question
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
Yves07#4 Posté le 27/6/2011 à 07:37:00
Bonjour à vous deux.

C'est vrai, c'est pas clair, et c'est sûrement pour ça que je ne trouve pas !

Donc, décrire une classe "cEnroulement": OK
Instancier plusieurs cEnroulement chacune avec une propriété (nom ?) unique; OK

Créer une liste des noms toutes les instances crées, l'afficher et accéder à l'instance pertinente en cliquant dans la liste: NOK :cry:
Je ne sais pas comment faire le lien entre cette "liste d'instances de classe" et les instances elles mêmes.

Si ça peut aider: En VB6 j'aurais pu créer un TYPEDEF "enroulement" (et pas une classe) puis un tableau "enroulements[]" . . .

Prokopy#5 Posté le 27/6/2011 à 10:52:00
Kinder PinguiSalut Yves07,

Pour créer un tableau d'objets tu as deux solutions (selon ta version de Gambas):

Tu peux créer un tableau de type Object[], dans lequel tu mettras tes objets Enroulement :

1
DIM tableau AS NEW Object[]'Ici tu gères ton objet enroulement, du définis ses propriétés, etc.tableau.Add(MonEnroulement)


En Gambas 3, tu peux même directement créer un tableau Enroulement[] (ce qui est plus propre je trouve ;) ) :

1
DIM tableau AS NEW Enroulement[]'le reste comme ci-dessus


Après pour l'affichage, tu peux utiliser une ListBox ou autre contrôle de ce genre. :)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Yves07#6 Posté le 27/6/2011 à 14:29:00
Merci Prokopy.

J'étais au bord du gouffre et j'ai fait un grand pas en avant !

Mais . . .
1
PUBLIC Windings AS NEW Object[]PUBLIC SUB AddWinding() DIM cW AS cWinding DIM I AS INTEGER FOR I = 0 TO 5 cW = NEW cWinding cW.SetName("Winding #" & CStr(I)) Windings.Add(cW) cW = NULL NEXT BuildWList()ENDPUBLIC SUB BuildWList() DIM I AS INTEGER Wlist.Clear FOR I = 0 TO Windings.Max Wlist.Add(Str(I) & " " & Windings[I].GetName(), I) NEXTEND

Où Wlist est une listbox qui affiche ceci:



:shock:

Comprend pas pourquoi ? ? ?
Prokopy#7 Posté le 27/6/2011 à 14:51:00
Kinder PinguiChez moi ça marche bien, donc ça ne vient pas de ce code mais de quelque part dans ta classe cWinding.
Est-ce qu'on peut la voir ?

J'étais au bord du gouffre et j'ai fait un grand pas en avant !


Heu ... :D
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Yves07#8 Posté le 27/6/2011 à 16:06:00
Oui, c'est bien dans la classe :

1
' Gambas class fileSTATIC MyId AS StringPUBLIC Name AS StringSTATIC Type AS Integer '0=Insulation, 1=Copper, 2=Copper + IL, 3=Bank winding . . .STATIC Dia AS Single 'Copper diameter in millimitersSTATIC Thick AS Single 'Insulation thickness in millimitersSTATIC Turns AS IntegerSTATIC PortIn AS StringSTATIC PortOut AS String PUBLIC cPrev AS cWindingPUBLIC cNext AS cWindingPUBLIC SUB SetId(Id AS String) MyId = IdENDPUBLIC FUNCTION GetId() AS String RETURN MyIdENDPUBLIC SUB SetName(N AS String) Name = NENDPUBLIC FUNCTION GetName() AS String RETURN NameEND


Le membre Name était STATIC, je l'ai rendu PUBLIC pour en faire une propriété et je n'emploie plus les méthodes SetName , GetName . . . et ça roule ! ! mais j'ai pas compris pourquoi . . .

Merci, je peux continuer 8)
Yves07#9 Posté le 27/6/2011 à 16:15:00
VU ! ! !

C'est pas STATIC, c'est PRIVATE :roll:

Tout va bien :lol:
1