PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Passer un champ comme paramètre à un constructeur de classe
Passer un champ comme paramètre à un constructeur de classe
Débuté par gmaison, 27 mar. 2008 14:05 - 7 réponses
Posté le 27 mars 2008 - 14:05
Bonjour,

je suis en train d'écrire une classe qui va manipuler des champs de diverses natures (Libelle et Image).

Etant donné que ces champs peuvent être situés en des endroits différents (fenêtres, états, ...), je voudrais pouvoir transmettre ces champs comme paramètres au constructeur de ma classe et pouvoir donc les garder comme propriétés de ma classe pour pouvoir continuer de travailler dessus, sans me soucier de leur origine.

Quelqu'un a une solution pour ça ?

Je vous remercie par avance pour toute aide !

Cordialement,

Guillaume
Posté le 27 mars 2008 - 14:46
Bonjour,

De ma compréhension du problème, je pense que ce qui suit devrait t'aider :

Passe le nom complet du champ en parametre :
Moimeme..NomComplet ou SAI_NomChamp..NomComplet par exemple

Après dans ta classe, des indirections du type :
{cNomChamp,indChamp}
Où cNomChamp vaut la variable passée en paramètre
Posté le 27 mars 2008 - 14:46
Bonjour,

Vous pouvez également utiliser la propriété NomComplet des champs...
MonChamp..NomComplet
et ensuite utiliser ce nom avec des indirections.

Attention toutefois, à tester si la fenêtre est existante avant utilisation des propriétés du champ.. Donc tester l'ouverture de la fenêtre avant utilisation du champ (le nom de la fenêtre est présent dans le NomComplet du champ).. dans le cas de l'instantation en global...

Bien à vous.
Olivier Bilot
Posté le 27 mars 2008 - 15:02
Bonjour,
Tu peux passer en paramètre au constructeur le nom complet du champ, puis utiliser les indirections dans les méthodes de la classe.

Frédéric.
Posté le 27 mars 2008 - 18:38
Bonjour et merci à vous trois pour ces réponses.

toutefois, autant dans une fenêtre cela fonctionne, autant, dans un état, cela ne fonctionne pas.

Enfait, ce que je veux faire, c'est une classe qui me permet de dessiner dans un champ de type Image. (le libellé me permet de connaître la taille en pixel d'une chaîne en fonction de la police, de la taille de l'affichage, etc...)

Par contre, je voudrais pouvoir le faire autant dans une fenêtre que dans un état (car je dois pouvoir imprimer l'image que je dessine dans la fenêtre).

Donc... vos réponses sont correctes s'il s'agit de dessiner dans une fenêtre. Mais dans un état, cela ne fonctionne pas car je n'ai accès qu'à la propriété Nom et que la propriété NomComplet n'est pas accessible...

Maintenant, peut être que ma solution (une classe qui dessine dans une image) n'est pas la bonne approche. Auquel cas, peut être auriez vous une autre solution.

Merci en tout cas pour votre aide,

Bien cordialement,

Guillaume
Posté le 27 mars 2008 - 23:39
Bonjour Guillaume...

Une fois l'image dessinée dans la fenêtre, il suffit de faire un
dsauveimage pour avoir une image imprimable normalement et sans avoir
besoin de rien faire au niveau de l'état

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com/index_FR.html


Guillaume wrote:
Bonjour et merci à vous trois pour ces réponses.

toutefois, autant dans une fenêtre cela fonctionne, autant, dans un état, cela ne fonctionne pas.

Enfait, ce que je veux faire, c'est une classe qui me permet de dessiner dans un champ de type Image. (le libellé me permet de connaître la taille en pixel d'une chaîne en fonction de la police, de la taille de l'affichage, etc...)

Par contre, je voudrais pouvoir le faire autant dans une fenêtre que dans un état (car je dois pouvoir imprimer l'image que je dessine dans la fenêtre).

Donc... vos réponses sont correctes s'il s'agit de dessiner dans une fenêtre. Mais dans un état, cela ne fonctionne pas car je n'ai accès qu'à la propriété Nom et que la propriété NomComplet n'est pas accessible...

Maintenant, peut être que ma solution (une classe qui dessine dans une image) n'est pas la bonne approche. Auquel cas, peut être auriez vous une autre solution.

Merci en tout cas pour votre aide,

Bien cordialement,

Guillaume
Posté le 28 mars 2008 - 11:15
Bonjour et merci pour la réponse,

justement, mon souci est là : je ne passe pas nécessairement par une fenêtre (autrment dit, je peux lancer l'impression directement)

Ensuite, cette image est à générer autant de fois qu'il y a d'éléments - et donc de pages - à imprimer.

Mon idée était de créer une classe qui pourrait générer de manière unitaire chaque élément, soit dans un champ image d'une fenêtre, soit dans un champ image d'un état.

Il semblerait que dans le cas d'un état ce ne soit pas possible. Est-ce que le contournement suivant vous parait judicieux :
1. je crée une fenêtre dans laquelle je place ma classe, mon objet image.
2. j'ouvre cette fenêtre de manière invisible juste avant de lancer l'impression.
3. A chaque fois que je veux générer l'image, j'appelle la fonction qui va bien de la fenêtre qui me génère une image temporaire
4. je récupère le chemin de l'image temporaire pour la placer dans le champ image de la page en cours l'état

sachant que les étapes 2 et 4 peuvent être appliquées à une fenêtre où je voudrais avoir de manière unitaire cette image générée.

Merci beaucoup pour votre aide !

Cordialement,

Guillaume
Posté le 28 mars 2008 - 12:11
Bonjour Guillaume...

Ca devrait marcher, mais omme rien n'empêche d'ouvrir une fenêtre depuis
une classe, vous pouvez aussi avoir simplement votre fenetre utilitaire
ouverte depuis la classe quand on ne lui donne pas de nom de fenetre, ou
qu'on l'appelle en 'mode impression'...

De cette manière, il n'y a rien de particulier à faire avant l'impression

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com/index_FR.html


Guillaume wrote:
Bonjour et merci pour la réponse,

justement, mon souci est là : je ne passe pas nécessairement par une fenêtre (autrment dit, je peux lancer l'impression directement)

Ensuite, cette image est à générer autant de fois qu'il y a d'éléments - et donc de pages - à imprimer.

Mon idée était de créer une classe qui pourrait générer de manière unitaire chaque élément, soit dans un champ image d'une fenêtre, soit dans un champ image d'un état.

Il semblerait que dans le cas d'un état ce ne soit pas possible. Est-ce que le contournement suivant vous parait judicieux :
1. je crée une fenêtre dans laquelle je place ma classe, mon objet image.
2. j'ouvre cette fenêtre de manière invisible juste avant de lancer l'impression.
3. A chaque fois que je veux générer l'image, j'appelle la fonction qui va bien de la fenêtre qui me génère une image temporaire
4. je récupère le chemin de l'image temporaire pour la placer dans le champ image de la page en cours l'état

sachant que les étapes 2 et 4 peuvent être appliquées à une fenêtre où je voudrais avoir de manière unitaire cette image générée.

Merci beaucoup pour votre aide !

Cordialement,

Guillaume