Partager un objet dans plusieurs fenêtres

Partager un objet dans plusieurs fenêtres - Delphi/Pascal - Programmation

Marsh Posté le 04-08-2005 à 00:16:50    

Bonsoir à tous (antp :jap:)
 
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 :sleep:  
 
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 :hello:  
 
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
Reply

Marsh Posté le 04-08-2005 à 00:16:50   

Reply

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.


Message édité par antp le 04-08-2005 à 23:02:00

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 :)

Reply

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 :D)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2005 à 12:20:14    

et ton objet global Settings il est déclaré où ? :sleep:

Reply

Marsh Posté le 05-08-2005 à 12:59:48    

Dans global.pas, inclus par toutes les fenêtres [:dawa]  
(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
 


Message édité par antp le 05-08-2005 à 13:02:27

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 :D
 
Et au niveau conception, est-ce que c'est une méthode "propre", ça fait pas bricoleur ?


Message édité par Inekman le 05-08-2005 à 16:37:32
Reply

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.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 :jap:

Reply

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.


Message édité par mkracing66 le 28-12-2007 à 17:28:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed