C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Simplification d'écriture

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Michael
Guest





PostPosted: Sat Jun 18, 2005 11:29 am    Post subject: Simplification d'écriture Reply with quote



Bonjour à tous,

je suis en train de réaliser une classe de manipulation d'Excel avec OLE
sous Builder, et j'ai un souci:

j'ai décomposé les classes suivantes:

class Excel //Sommet de la hiérarchie
class XLSheets //Pour gérer les feuilles
class XLSheet //Feuille courante
class XLCells //Cellules sur lesquelles on travaille
class XLFont //Gestion de la police... des cellules choisies

Chacune de ces classes garde un pointeur sur la classe inférieure.

Par exemple, si je veux ajouter une nouvelle feuille, puis remplir des
cellules de la feuille créée:

Excel->XLSheets->Add("nom_feuille"); //Sheets::XLSheet * Sheet est connu
Excel->XLSheets->Sheet->Cells->Define(1,1,5,5); //On a choisi un tableau
de 4x4
Excel->Sheets->Sheet->Cells->Set_Value("toto");

Ce que je voudrais, c'est stocker des pointeurs dans la classe Excel,
afin d'accéder directement à la feuille choisie, aux cellules définies ou
bien à la classe de Font, de sorte qu'on aurait, pour le même exemple que
précédemment:

Excel->XLSheets->Add("nom_feuille"); //Sheets::XLSheet * Sheet est connu
Excel->Sheet->Cells->Define(1,1,5,5); //On a choisi un tableau de 4x4
Excel->Cells->Set_Value("toto");

J'ai essayé de passer un pointeur Excel* depuis la classe initiale vers
les classes inférieures, et à chaque fois que XLCells change par exemple,
le pointeur XLCells Excel::Cells* de Excel change également, mais
également XLFont Excel::Font*, puisque XLFont est lié à XLCells.

Mais je me heurte à des problèmes suite aux inclusions, car je suis
obligé d'inclure à chaque fois le H de Excel, et j'arrive pas à compiler
tout le bouzin...

Si quelqu'un voit une solution pour mon problème, je suis preneur ;)

Merci d'avance

Mike
Back to top
Patrick 'Zener' Brunet
Guest





PostPosted: Sat Jun 18, 2005 9:12 pm    Post subject: Re: Simplification d'écriture Reply with quote



Bonjour.

Je réponds à Michael <michael_delva.enlever (AT) hotmail (DOT) com> qui a écrit :
Quote:
Bonjour à tous,

je suis en train de réaliser une classe de manipulation d'Excel avec
OLE sous Builder, et j'ai un souci:
[...]
J'ai essayé de passer un pointeur Excel* depuis la classe initiale
vers les classes inférieures, et à chaque fois que XLCells change par
exemple, le pointeur XLCells Excel::Cells* de Excel change également,
mais également XLFont Excel::Font*, puisque XLFont est lié à XLCells.


[1/2HS (?) : mapping C++ d'une structure de données propriétaire
Windows/OLE]

Il me semble bien d'après votre description que les objets Excel sont
reconstruits et donc réalloués lors des modifications, ce qui fait que seul
le pointeur d'entrée reste valide.

Dans ces conditions, il me paraît inévitable de ne pas conserver les autres
pointeurs dans votre représetnation externe, mais à la place un mécanisme de
"handles" (ie: identifiants aux valeurs subies) qui vous permette de les
reconstruire à la demande par réinterrogation de l'objet Excel d'entrée (la
feuille). Les pointeurs ne sont alors valides que le temps d'une opération
d'accès.

Ca ne paraît pas trop compliqué à faire : un objet cellule (ou plage de
cellules) peut contenir un Handle sous forme de chaîne (ou quadruplet
d'entiers) à base de Lx:Cy (ou Lx1:Cy1/Lx2:Cy2), et pour les attributs vous
faites comme vous voulez.

Hope It Helps,

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/



Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jun 20, 2005 7:11 am    Post subject: Re: Simplification d'écriture Reply with quote



Michael wrote:

Quote:
je suis en train de réaliser une classe de manipulation
d'Excel avec OLE sous Builder, et j'ai un souci:

j'ai décomposé les classes suivantes:

class Excel //Sommet de la hiérarchie
class XLSheets //Pour gérer les feuilles
class XLSheet //Feuille courante
class XLCells //Cellules sur lesquelles on travaille
class XLFont //Gestion de la police... des cellules choisies

Chacune de ces classes garde un pointeur sur la classe
inférieure.

C-à-d les objets dont elle est propriétaire (rélation « aUn ») ?
(La plupart du temps, quand on parle d'« inférieur », il s'agit
d'héritage. Mais alors, il n'y aurait pas de pointeurs.)

Quote:
Par exemple, si je veux ajouter une nouvelle feuille, puis
remplir des cellules de la feuille créée:

Excel->XLSheets->Add("nom_feuille"); //Sheets::XLSheet * Sheet est connu
Excel->XLSheets->Sheet->Cells->Define(1,1,5,5); //On a choisi un tableau
de 4x4
Excel->Sheets->Sheet->Cells->Set_Value("toto");

Ce que je voudrais, c'est stocker des pointeurs dans la classe
Excel, afin d'accéder directement à la feuille choisie, aux
cellules définies ou bien à la classe de Font, de sorte qu'on
aurait, pour le même exemple que précédemment:

Excel->XLSheets->Add("nom_feuille"); //Sheets::XLSheet * Sheet est connu
Excel->Sheet->Cells->Define(1,1,5,5); //On a choisi un tableau de 4x4
Excel->Cells->Set_Value("toto");

Je ne suis pas sûr que ce soit une bonne itée, mais enfin...

Quote:
J'ai essayé de passer un pointeur Excel* depuis la classe
initiale vers les classes inférieures, et à chaque fois que
XLCells change par exemple, le pointeur XLCells Excel::Cells*
de Excel change également, mais également XLFont Excel::Font*,
puisque XLFont est lié à XLCells.

Une autre solution serait de passer par Excel chaque fois pour
la contruction aussi, c-à-d :

Excel->AddSheet( "nom_feuille" ) ;
Excel->DefineCell( 1, 1, 5, 5 ) ;

Chaque fois, Excel renvoie à l'objet qui convient ; la fonction
dans l'objet renvoie alors un pointeur à l'objet qu'il aura
créé, que l'objet Excel peut stocker comme il veut.

Quote:
Mais je me heurte à des problèmes suite aux inclusions, car je
suis obligé d'inclure à chaque fois le H de Excel, et j'arrive
pas à compiler tout le bouzin...

Au niveau des .h, il ne doit pas y avoir de problème : une
déclaration anticipée de classe en tête ferait l'affaire. Mais
évidemment, si c'est l'objet appelé qui doit faire la mise à
jour de l'objet appelant, il faudrait inclure Excel.h dans les
sources de tous les autres objets.

De point de vue de la conception, je n'aime pas. Ça fait des
cycles dans les dépendances -- je préfère qu'une classe qui
fournit une service n'a pas à connaître ses clients. Inversion
de l'appel qui s'en suit introduit des couplages qui pourraient
poser des problèmes par la suite.

Quote:
Si quelqu'un voit une solution pour mon problème, je suis
preneur Wink

Déjà, j'essaierais d'éviter l'inversion de l'appel. Sans
l'introduction des classes supplémentaires en pagaille, elle
augmente le couplage d'une façon inacceptable. Mais même plus
fondamental, je me poserais la question s'il faut réelement
ramener toutes les informations vers la classe propriétaire. A
priori, si tu as introduit un gestionnaire des sheets entre
Excel et les feuilles mêmes, il doit bien avoir une raison ; si
Excel doit aussi gérer les feuilles, à quoi sert le
gestionnaire ? De la même façon, comment est-ce que les feuilles
peuvent gérer proprement les cellules, si Excel si mèle aussi ?

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.