[!] Suite d'Objet dynamique dans objet dynamique

Résolu
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005 - 21 juil. 2005 à 13:01
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005 - 24 juil. 2005 à 17:14
Re bonjour, J'ai une autre question ... tjs ds le même sujet (suite de celui-ci )


Maintenant je désire mettre mon TTabSheet et Mon TLabel dans une unit
apart de manière à la compiler plus tard en dll. Mais pour éviter du
taper tout le code qui précise la position, la hauteur ... , je pensais
mettre toutes des donnée dans un fichier dfm que l'unité chargerais.

J'avoue que je suis perdu et que je ne sais pas comment prendre le problème (si ce n'est par les "cornes", mais où sont-elles )



Amicalement

Alexis

11 réponses

alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
24 juil. 2005 à 17:14
Nickel, ca marche ...

Je m'explike ...

D'abord créer une TFrame (cadre) avec tt les objet, fonctions, et
procedure comme on le souhaite ensuite, enregistrer le tout sous un nom
correct (ex : maframe.pas et .dfm).



J'ai rajouter un "constrcutor" car dans mon application j'oblige
ma TIDFrame à être créee dans un TTabSheet, donc je rajoute ceci :



...

public

constructor CreateTab(PC : TPageControl);

...

const TabPos = 1;



implementation



constructor TIDFrame.CreateTab(PC : TPageControl);

begin

with TTabSheet.Create(PC) do begin

PageControl: =PC; // !!! j'utilise la variable PC dans les

PageIndex:= TabPos; // paramètres. Je n'utilise pas PageControl

Name:='IdTab'; // car il y a violation d'acces !!!

Caption:='ID Tag';

with TIDFrame.Create(PC.Pages[TabPos]) do

Parent: =PC.Pages[TabPos];

end;

end;

...



Après celà, je crée une nouvelle application dans
laquelle j'inclu l'unité contenant ma Frame. Je crée un TButton,
TPageControl et un TTabSheet (sinon erreur car ma TIDFrame a un
PageIndex = 1). Dans l'événement OnClick du bouton je met :



procedure TForm1.Button1Click(Sender: TObject);

begin

TIDFrame.createtab(PageControl1);

end;



Et c'est tout !



Alexis


PS : comment faire des cadres de fond gris pour les codes ?
3
yvescollet Messages postés 55 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 22 janvier 2006
21 juil. 2005 à 13:55
hello,



ce que tu pourrais faire de cool, ça serait de stocker comme tu le
proposes tes données pour la position de tes objets dans un fichier XML
(c'est plus facile de gérer toi même un fichier XML plutot qu'un
ficheir .dfm).

ou encore un fichier .ini c'est good aussi.



bonne chance pour ton applic

Yves
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
21 juil. 2005 à 14:03
Je pencherais plutot pour l'utilisation de WriteComponentResFile et ReadComponentResFile avec le dfm.

j!nH
0
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
23 juil. 2005 à 09:54
Merci pour vos solutions ....

juste 2 petites remarques ...

1) le WriteComponentResFile et ReadComponentResFile sont bien pour des composants or TTabSheet est une classe.

2) Je ne sais pas cmt m'y prendre avec le xml ... ca marche cmt ?



Alexis
0

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

Posez votre question
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
23 juil. 2005 à 12:37
le WriteComponentResFile et ReadComponentResFile sont bien pour des composants or TTabSheet est une classe.



TTabSheet descend bien logiquement de TComponent, c'est un
composant graphique.Bien sur que TTabSheet est une classe,vu qu' un
objet est une instance d'une Classe.



Tout ça pour dire que tu peux bien utiliser WriteComponentResFile et
ReadComponentResFile,qui peuvent directement travailler avec le
dfm(même format).






j!nH
0
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
24 juil. 2005 à 00:46
Ok merci, je viens juste de tester (car j'ai eu une journée chargée ...)

Ok ca marche mais ca n'enregistre que les propriétés du TTabSheet et pas des ss-objet :s



Est-ce normal ...



Mnt j'ai découvert la procedure Read/WriteComponent(Res) d'un TFileStream.

Mais j'ai une erreur lors de WriteComponentRes.

mon code : (les lignes qui foirent commencent par )



var t : TFileStream;

begin

t.Create('c:\resfile.crf',fmcreate or fmopenwrite);

t.Size:=SizeOf(ts1); // ts1 = TabSheet1

t.WriteComponent(ts1);

// OU

//t.WriteComponentRes('tab',ts1);

t.Free;

end;



Alexis
0
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
24 juil. 2005 à 11:02
Je ne sais pas pourquoi main mnt ca marche ...

bref, je ne suis tjs pas plus avancé car je ne sais pas lire mes objets.

qqn pourrai me fournir un exemple (avec Stream si possible car je doit écrire 12 objects) .



Alexis
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
24 juil. 2005 à 11:13
Salut,




t.Size:=SizeOf(ts1);



Cette ligne risque de poser problème. En effet SizeOf(ts1) renverra toujours 4.



Si tu veux vraiment fixer la taille(inutile, je pense que c'est fait
directement par WriteComponent et ReadComponent), utilises
ts1.InstanceSize.



Pour le reste, je vais essayer de faire un petit exemple...

j!nH
0
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
24 juil. 2005 à 13:51
Voilà mon code pour l'écriture :



var t : TFileStream;

begin

t:=TFileStream.Create('cr.crf',fmcreate);

t.Size:=ts1.InstanceSize;

t.WriteComponentRes('tab0',ts1);

t.WriteComponentRes('tab1',idLabel4);

t.WriteComponentRes('tab2',idf);

t.Free;

end;



Maintenant c'est la lecture
qui pose problème, car ReadComponentRes demande un paramètre de type
TComponent et c'est tout ! mais cmt il sais que c'est ce composant la
qui doit lire ?



Alexis
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
24 juil. 2005 à 13:57
Il le sait pa rapport à la position dans le stream.



Lis les dans l'ordre où tu les as écrit en transtypant par rapport au composant que tu veux lire (TTabSheet, Tlabel).

j!nH
0
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
24 juil. 2005 à 16:35
Je pense que j'ai trouvé ma solution ...



TFrame que je crée dans un TTabSheet.



Je teste et je donne des nouvelles



Alexis
0
Rejoignez-nous