Partager un objet dans plusieurs fenêtres - Delphi/Pascal - Programmation
Marsh Posté le 04-08-2005 à 23:01:21
Soit tu surcharges le Create du Thread pour lui donner le TMonObjet, soit tu déclares dans le thread une propriété permettant d'écrire un TMonObjet, que la Form principale pourra assigner après avoir créé le thread.
Marsh Posté le 04-08-2005 à 23:14:57
Oublions le thread ^^
J'ai deux fiches, et un objet déclaré dans l'une des fiches. Ma question est : Pour accéder aux propriétés de l'objet déclaré dans ma fichier 1, suis-je obligé de faire :
Fiche1.objet.propriete := 'trucmuche'
?
Ou alors est-ce plus propre de créer une unité avec mon objet dedans et de déclarer cette unité dans les "uses" des fiches qui vont utiliser l'objet ?
Question d'organisation
Marsh Posté le 05-08-2005 à 09:44:53
Bah a priori le type de ton objet a sa propre unité. Y déclarer une variable représentant l'objet, c'est pas spécialement le mieux, ça fait une variable globale en plus. Dans certains cas c'est pas grave (par ex moi j'ai toujours un objet global "Settings" qui est une classe avec les params de l'application).
Pour passer des objets aux Form, je rajoute en général une méthode Execute que j'utilise à la place de ShowModal.
Dans cette méthode je passe les objets dont la Form aura besoin, je les assigne à des attributs privés, puis je fais un Result := ShowModal = mrOk; pour que la méthode renvoie True ou False, selon que l'action a été appliquée ou non (ou qui ne renvoie rien si la fenêtre n'a rien à renvoyer, évidemment )
Marsh Posté le 05-08-2005 à 12:59:48
Dans global.pas, inclus par toutes les fenêtres
(ou dans la unit dans laquelle est définie la classe, éventuellement)
Par exemple dans Ant Movie Catalog dans global.pas j'ai :
Settings: TSettings; -> les settings dont j'ai parlé
Translator: TAntTranslator; -> le truc qui sert à traduire les fenêtres
ToolbarImages: TCustomImageList; -> les images des barres d'outils des fenêtres
MessageWin: TMessageWin; -> remplace MessageDlg
InputWin: TInputWin; -> remplace InputQuery
ProgressWin: TProgressWin; -> fenêtre de progression
FormatSettings: TFormatSettings; -> utilisé par les fonctions genre Format, FormatDateTime, etc. quand j'ai besoin d'un format fixe pour les réels et les dates
Marsh Posté le 05-08-2005 à 16:37:10
donc t'as bien une unité dans laquelle sont déclarés tous les objets susceptibles d'être utilisés par plusieurs fenêtres. Et tu inclus l'unité global dans toutes les fiches qui vont utiliser ces objets ^^
C'est ce que je voulais savoir
Et au niveau conception, est-ce que c'est une méthode "propre", ça fait pas bricoleur ?
Marsh Posté le 05-08-2005 à 18:00:21
"tous les objets" non, juste ceux qui sont utilisés par toutes les fenêtres.
Les objets genre "catalogue courant" ou le fichier à utiliser, je les passe aux méthodes Execute des fenêtres comme expliqué précédemment.
Marsh Posté le 05-08-2005 à 18:10:35
d'accord, je vais voir comment je peux faire un truc de ce genre chez moi
Merci
Marsh Posté le 28-12-2007 à 17:25:05
Bonsoir,
je deterre ce sujet pour poser une petite question en complément presque dans le meme style :
...et si la class n'était plus utilisée par 2 fenetres, mais par 2 applications ?
Faire ca dans une simple dll ne semble pas bcp plus avantageux vu qu il faut tout de meme "dupliquer" le prototypage de la class dans l'appli pour une question de "visibilité".
Doit on donc forcément en faire un objet COM ?
[edit:] ou bien conserver l'unité de la class facon librairie statique commune aux deux projets ? d'un point de vue maintenance quel est le plus pratique ?
Par avance merci.
Marsh Posté le 04-08-2005 à 00:16:50
Bonsoir à tous (antp )
Je suis face à un problème qui me turlupine et je me demande comment je peux faire ça proprement, à savoir :
J'ai 2 fiches. Une principale et une autre, dite de traitement.
Dans la fiche principale j'ai un objet "MonObjet" de type "TMonObjet" déclaré en public. L'interface graphique de la fiche principale permet d'agir sur les propriétés de "MonObjet". Un bouton dans la fiche principale démarre un traitement dans un thread séparé dont l'évolution est affichée dans la fiche de traitement.
J'aimerai savoir un truc maintenant. Comment je dois faire pour que "MonObjet" soit visible depuis la fiche de traitement dans la mesure où celle-ci va récupérer les valeurs des propriétés de "MonObjet" pour les afficher à l'écran
Pour l'instant je fais un bête "frmPrincipale.MonObjet.Propriete" pour récupérer les valeurs mais je me demandais si y'avait pas un autre moyen plus sympatique...je ne fais allusion à rien du tout car je sais pas si y'a une autre méthode
Voilà, si vous avez des idées / suggestions, j'attends de vous lire impatiemment.
Inek.
Message édité par Inekman le 04-08-2005 à 00:17:07