Type de donnée personnel

Résolu
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005 - 21 janv. 2005 à 09:17
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 - 21 janv. 2005 à 14:54
Bonjour,

je souhaiterai créer un type de donnée personnalisé.
Je m'explique :

je trace des lignes et des rectangles, pour chque ligne je voudrai garder ID,Xdep,Ydep,Xfin,Yfin,Color,Width,Interference

ID : integer;
Xdep : integer;
...
Interference : array [1..20] of integer;

je voudrais accéder aux données comme ceci: ligne.ID:= xxx ; ligne.Xdep:=X; ligne.Interference[1]:=10;

Par la suite ce qui serait encore mieux ca serait de créer un tableau de lignes, de manière a stocker toutes les données de toutes les lignes.

Je crois que ca s'appelle une structure (mais pas sur)

Si quelqu'n a une idée : MERCI
A voir également:

6 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
21 janv. 2005 à 09:38
Hello,



Ce que tu peux faire c'est créer un Type comme cela :



TLigne =

Record

ID,Xdep,Ydep,Xfin,Yfin,Width : Integer;

Color : TColor;

Interference : array [1..20] of integer;

end;


Ensuite tu déclares en variables :

var

Ligne : TLigne;



Puis quand tu veux accéder à tes données tu fait :

Ligne.Width := 22;

Ligne.Interference[1] := 10;

....


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
3
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
21 janv. 2005 à 12:56
Alors pour ce qui est de la place je ne peux pas trop te dire. C'est sur que ca prendra de la place mais combien je ne sais pas.

Mais plutot que de déclarer des tableaux enormes alors que si ca se
trouve tu vas utilser que 10 positions sur les 32767 pourquoi ne pas f
aire un tableaux dynamiques comme cela :



var

Ligne : Array of TLigne;



Ensuite quand tu veux ajouter un item dans ton tableau tu fais un SetLength comme ceci :

SetLength(Ligne,1) //pour saisir Ligne[0]

SetLength(Ligne,2); //Te permettra de saisir Ligne[0] et Ligne[1]

....

ect


Pour la dernier question elle est pas trop en rapport avec ta question
de depart alors pose une nouvelle demande sur le forum. Perso je ne
sais pas.


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
3
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
21 janv. 2005 à 14:53
Re,



- 1 -

Pour la place, il faut multiplier la taille d'un enregistrement par le
nombre d'enregistrements, soit ici 7 entiers (32 bits chaque) et un
TColor (32 bits aussi) soit 8x4 = 32 octets.

Mais..... c'est pas toujours aussi simple, car les données sont en
général allignées, c'est à dire qu'elles commencent à une adresse
multiple de 2 ou 4. Une donnée de type byte ou boolean prend alors 16
ou 32 bits !

Si on désire compacter un enregistrement on déclare alors son type comme suit :

Type

TLigne = Packed Record

......

end;



Ce qui n'est toutefois pas conseillé pour des problèmes de vitesse et de compatibilité (voir aide Delphi sur mot Packed)



Utilité : Relire un fichier d'enregistrement ancien (turbo Pascal par ex.) ou la directive Packed etait implicite (voire l'alignement était sur deux octets et pas quatre).



- 2 -

Si tu rajoute un bitmap dans ton type record, il ne prendra que la
place d'un pointeur (32 bits aussi). Ce n'est que quand tu le créeras
(car il faut le créer), et en particulier quand tu définiras ses
dimensions, qu'il commencera à prendre réellement de la place.



- 3 -

Pour dessiner un rectangle sans intérieur (rien que le contour), il
faut mettre la propriété Style de la brosse du canvas à bsClear
(Canvas.Brush.Style :=bsClear);



- 4 -

Et pi, si t'est content des réponses, tu fais comme JPM77 il a écrit en gros et en bleu



Ken@vo

____________________

Code, Code, Codec !
3
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
21 janv. 2005 à 10:33
Presque bon TkILLA !



Comme nous dit l'aide de Delphi sur le terme Record :




Enregistrements

Un enregistrement (appelé aussi structure dans certains langages) représente un ensemble de données hétérogènes.







Ken@vo

____________________

Code, Code, Codec !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005
21 janv. 2005 à 11:15
Clap clap clap :)

J'ai une autre question ayant rapport avec ce topic :
Est ce que si je fais Ligne: array [0..32767] of Tligne ca prend bcp de place? Je me rends pas bien compte.

Je vais créer un Trectangle de la meme manière, en y ajoutant un Tbimap me permettant de stocker l'image "écrasée" par le tracé du rectangle. Si je fais un tableau de 32768 Trectangle, est ce que ça va prendre 32768 Tbitmap, ou il faudra que je les crée (Rectangle[i].SauveFond.create, puis definition largeur hauteur etc..)?

Enfin dernière question : La methode rectangle du canvas d'un Tbitmap efface la surface du rectange, ce qui fait que s'il yavait une ligne derrière elle est effacée. Ya un moyen de faire en sorte que ca ne s'efface pas?

Merci bcp pour les réponse, je validerai une fois chez moi car là je n'ai pas delphi
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
21 janv. 2005 à 14:54
JMP, pas JPM, excuse-moi JMP !




Ken@vo

____________________

Code, Code, Codec !
0
Rejoignez-nous