Type de donnée personnel [Résolu]

cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 21 janv. 2005 à 09:17 - Dernière réponse : cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention
- 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
Afficher la suite 

6 réponses

Répondre au sujet
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 21 janv. 2005 à 09:38
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmp77
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 21 janv. 2005 à 12:56
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmp77
cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention - 21 janv. 2005 à 14:53
+3
Utile
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 !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Kenavo
cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention - 21 janv. 2005 à 10:33
0
Utile
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 !
Commenter la réponse de cs_Kenavo
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 21 janv. 2005 à 11:15
0
Utile
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
Commenter la réponse de cs_TkILLA
cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention - 21 janv. 2005 à 14:54
0
Utile
JMP, pas JPM, excuse-moi JMP !




Ken@vo

____________________

Code, Code, Codec !
Commenter la réponse de cs_Kenavo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.