|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour !
j'ai une propriete d'un activex qui est dite persistante, on ne peut la modifier que lors du design d'une form et elle conditionne la visualisation de l'activex control dans une form. Je me demande si je peux modifier cette propiete a la creation de l'objet COM avec pywin32 ? Quelqu'un as-t-il une idee ? merci d'avance Victor |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Bonsoir !
> j'ai une propriete d'un activex qui est dite persistante, on ne peut > la modifier que lors du design d'une form et elle conditionne la > visualisation de l'activex control dans une form. > > Je me demande si je peux modifier cette propiete a la creation de > l'objet COM avec pywin32 ? En complément de ce que j'ai déjà répondu dans la liste, et avec tes précisions complémentaires : - pour moi, une propriété persistante, c'est une propriété que l'on retrouve lors de sessions successives. Mais, visiblement, ce n'est pas le sens utilisé dans ton cas. - Pywin32 permet d'interopérer avec des objets COM, mais pas directement avec des ActiveX en tant que compsants visuels. Pour cela, il faut passer par un conteneur. J'en connais trois : PythonWin, WxPython, et Pluie. - Pywin32 ne permet d'accéder qu'aux propriétés publiques (exposées) d'un ActiveX. Si la propriété n'est pas exposée, elle n'est pas utilisable. Il existe, dans PythonWin, un utilitaire (Makepy), capable de retrouver les propriétés statiques d'un objet COM.Visual-studio (et MS) étant essentiellement statique, ça pourrait suffire. Si makepy ne peut trouver la propriété, celle-ci sera inaccessible (nonseulement à Python, mais à tous les langages utilisant COM). -- @-salutations Michel Claveau |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
On 11 sep, 20:51, MC <XX.X...@XX.XmclaveauX.com> wrote:
> Bonsoir ! > > > j'ai une propriete d'un activex qui est dite persistante, on ne peut > > la modifier que lors du design d'une form et elle conditionne la > > visualisation de l'activex control dans une form. > > > Je me demande si je peux modifier cette propiete a la creation de > > l'objet COM avec pywin32 ? > > En complément de ce que j'ai déjà répondu dans la liste, et avec tes > précisions complémentaires : > - pour moi, une propriété persistante, c'est une propriété que l'on > retrouve lors de sessions successives. Mais, visiblement, ce n'est pas > le sens utilisé dans ton cas. > - Pywin32 permet d'interopérer avec des objets COM, mais pas > directement avec des ActiveX en tant que compsants visuels. Pour cela, > il faut passer par un conteneur. J'en connais trois : PythonWin, > WxPython, et Pluie. > - Pywin32 ne permet d'accéder qu'aux propriétés publiques (exposées) > d'un ActiveX. Si la propriété n'est pas exposée, elle n'est pas > utilisable. > Il existe, dans PythonWin, un utilitaire (Makepy), capable de retrouver > les propriétés statiques d'un objet COM.Visual-studio (et MS) étant > essentiellement statique, ça pourrait suffire. Si makepy ne peut > trouver la propriété, celle-ci sera inaccessible (nonseulement à > Python, mais à tous les langages utilisant COM). > > -- > @-salutations > > Michel Claveau On 11 sep, 20:51, MC <XX.X...@XX.XmclaveauX.com> wrote: > Bonsoir ! > > > j'ai une propriete d'un activex qui est dite persistante, on ne peut > > la modifier que lors du design d'une form et elle conditionne la > > visualisation de l'activex control dans une form. > > > Je me demande si je peux modifier cette propiete a la creation de > > l'objet COM avec pywin32 ? > > En complément de ce que j'ai déjà répondu dans la liste, et avec tes > précisions complémentaires : > - pour moi, une propriété persistante, c'est une propriété que l'on > retrouve lors de sessions successives. Mais, visiblement, ce n'est pas > le sens utilisé dans ton cas. > - Pywin32 permet d'interopérer avec des objets COM, mais pas > directement avec des ActiveX en tant que compsants visuels. Pour cela, > il faut passer par un conteneur. J'en connais trois : PythonWin, > WxPython, et Pluie. > - Pywin32 ne permet d'accéder qu'aux propriétés publiques (exposées) > d'un ActiveX. Si la propriété n'est pas exposée, elle n'est pas > utilisable. > Il existe, dans PythonWin, un utilitaire (Makepy), capable de retrouver > les propriétés statiques d'un objet COM.Visual-studio (et MS) étant > essentiellement statique, ça pourrait suffire. Si makepy ne peut > trouver la propriété, celle-ci sera inaccessible (nonseulement à > Python, mais à tous les langages utilisant COM). > > -- > @-salutations > > Michel Claveau J'utilise effectivement un conteneur wxpython pour faire cela, dans le .py genere par makepy sur mon fichier ocx j'ai ceci: makepy_version = '0.4.95' python_version = 0x20500f0 import win32com.client.CLSIDToClass, pythoncom import win32com.client.util from pywintypes import IID from win32com.client import Dispatch # The following 3 lines may need tweaking for the particular server # Candidates are pythoncom.Missing, .Empty and .ArgNotFound defaultNamedOptArg=pythoncom.Empty defaultNamedNotOptArg=pythoncom.Empty defaultUnnamedArg=pythoncom.Empty CLSID = IID('{7E8C2313-69F1-4199-8F30-D2834F0388DC}') MajorVersion = 1 MinorVersion = 0 LibraryFlags = 10 LCID = 0x0 from win32com.client import DispatchBaseClass class _DActiveXModuleLoader(DispatchBaseClass): """Dispatch interface for toto toto.Lab ModuleLoader Control""" CLSID = IID('{75F72F36-5D10-450B-B99F-0D0CED099456}') coclass_clsid = IID('{A72D838C-A05F-4B3B-AF58-EE878D860B1E}') def AboutBox(self): return self._oleobj_.InvokeTypes(-552, LCID, 1, (24, 0), (),) _prop_map_get_ = { "Module": (5, 2, (9, 0), (), "Module", None), "ModuleName": (1, 2, (8, 0), (), "ModuleName", None), "OpenProject": (2, 2, (11, 0), (), "OpenProject", None), "ProjectName": (3, 2, (8, 0), (), "ProjectName", None), "SectionName": (4, 2, (8, 0), (), "SectionName", None), } _prop_map_put_ = { "Module" : ((5, LCID, 4, 0),()), "ModuleName" : ((1, LCID, 4, 0),()), "OpenProject" : ((2, LCID, 4, 0),()), "ProjectName" : ((3, LCID, 4, 0),()), "SectionName" : ((4, LCID, 4, 0),()), } class _DActiveXModuleLoaderEvents: """Event interface for toto toto.Lab ModuleLoader Control""" CLSID = CLSID_Sink = IID('{D2F8DD72-55BB-48E3-9956-228D502B69F9}') coclass_clsid = IID('{A72D838C-A05F-4B3B-AF58-EE878D860B1E}') _public_methods_ = [] # For COM Server support _dispid_to_func_ = { } def __init__(self, oobj = None): if oobj is None: self._olecp = None else: import win32com.server.util from win32com.server.policy import EventHandlerPolicy cpc=oobj._oleobj_.QueryInterface(pythoncom.IID_ICo nnectionPointContainer) cp=cpc.FindConnectionPoint(self.CLSID_Sink) =cp.Advise(win32com.server.util.wrap(self, usePolicy=EventHandlerPolicy)) self._olecp,self._olecp_ = cp, def __del__(self): try: self.close() except pythoncom.com_error: pass def close(self): if self._olecp is not None: cp,,self._olecp,self._olecp_ = self._olecp,self._olecp_,None,None cp.Unadvise() def _query_interface_(self, iid): import win32com.server.util if iid==self.CLSID_Sink: return win32com.server.util.wrap(self) # Event Handlers # If you create handlers, they should have the following prototypes: from win32com.client import CoClassBaseClass # This CoClass is known by the name 'toto.toto.Lab.ModuleLoaderCtrl' class ActiveXModuleLoader(CoClassBaseClass): # A CoClass # toto toto.Lab ModuleLoader Control CLSID = IID('{A72D838C-A05F-4B3B-AF58-EE878D860B1E}') coclass_sources = [ _DActiveXModuleLoaderEvents, ] default_source = _DActiveXModuleLoaderEvents coclass_interfaces = [ _DActiveXModuleLoader, ] default_interface = _DActiveXModuleLoader RecordMap = { } CLSIDToClassMap = { '{75F72F36-5D10-450B-B99F-0D0CED099456}' : _DActiveXModuleLoader, '{D2F8DD72-55BB-48E3-9956-228D502B69F9}' : _DActiveXModuleLoaderEvents, '{A72D838C-A05F-4B3B-AF58-EE878D860B1E}' : ActiveXModuleLoader, } CLSIDToPackageMap = {} win32com.client.CLSIDToClass.RegisterCLSIDsFromDic t( CLSIDToClassMap ) VTablesToPackageMap = {} VTablesToClassMap = { } NamesToIIDMap = { '_DActiveXModuleLoaderEvents' : '{D2F8DD72-55BB-48E3-9956-228D502B69F9}', '_DActiveXModuleLoader' : '{75F72F36-5D10-450B-B99F-0D0CED099456}', } j'ai donc bien acces a la propiete ModuleName lorsque je l'encapsule dans un wx conteneur ... mais lorsque je la change de 'Default' a 'Picture' ca ne marche pas ![]() le mec du developpement m'a dit que l'activeX control que j'utilise ne peut etre modifie que lors du design-time de Visual Studio, car a ce moment la la propriete est exposee .... mais sinon rien n'y fait je n'arrive pas a changer cette satanee proprietee pour avoir autre chose que le bitmap par default. J'ai aussi regarde le fichier oca fourni avec l'ocx et il y a bien une methode d'un objet qui semble etre interessante mais je ne sais absoluement pas comment utiliser les objets du fichier oca et leur methodes. j'ai trop de lacunes a propos de COM. Une idee ? merci beaucoup ![]() Victor |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Re !
> lacunes a propos de COM. Beaucoup de problèmes peuvent aussi venir de l'implémentation du client COM. Dans beaucoup de langages/applications, il y a des limites. Par exemple : - pas de gestion Unicode (or COM utilise Unicode pour transférer les données) - format numérique différent (COM est, d'abord, basé sur des types du langage C) - format date ou time ou datetime différent - mauvais support des tableaux (dans Python, les listes font l'affaire) - mauvais support de la casse (exemple : VBscript), ce qui entraîne des problèmes bizarres - mauvaise gestion du nombre de paramètres (certains trucs ne supportent pas un nombre variable de paramètres, d'autres n'acceptent qu'une seule valeur en retour) - gestion des callbacks (et des évènements) impossible ou très incomplète (c'est le cas de Python) Bref, combler des lacunes peut très bien ne pas suffire, et ne pas être nécessaire. Pour en revenir à ta propriété, si elle est en lecture seule, tu ne pourras pas la modifier depuis Python. Ceci dit, s'il s'agit juste de remplacer une image, pourquoi ne pas remplacer le contenu du fichier-image ? (en gardant son nom). @-salutations Michel Claveau |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
On 12 sep, 13:39, "Méta-MCI \(MVP\)" <enleverlesX.X...@XmclaveauX.com>
wrote: > Re ! > > > lacunes a propos de COM. > > Beaucoup de problèmes peuvent aussi venir de l'implémentation du client COM. Dans beaucoup de > langages/applications, il y a des limites. Par exemple : > - pas de gestion Unicode (or COM utilise Unicode pour transférer lesdonnées) > - format numérique différent (COM est, d'abord, basé sur des types du langage C) > - format date ou time ou datetime différent > - mauvais support des tableaux (dans Python, les listes font l'affaire) > - mauvais support de la casse (exemple : VBscript), ce qui entraîne des problèmes bizarres > - mauvaise gestion du nombre de paramètres (certains trucs ne supportent pas un nombre variable > de paramètres, d'autres n'acceptent qu'une seule valeur en retour) > - gestion des callbacks (et des évènements) impossible ou très incomplète (c'est le cas de > Python) > > Bref, combler des lacunes peut très bien ne pas suffire, et ne pas être nécessaire. > > Pour en revenir à ta propriété, si elle est en lecture seule, tu nepourras pas la modifier depuis > Python. > Ceci dit, s'il s'agit juste de remplacer une image, pourquoi ne pas remplacer le contenu du > fichier-image ? (en gardant son nom). > > @-salutations > > Michel Claveau Eh bien le control activeX n'est pas qu'une simple image il me donne aussi acces a tt un tas de methodes derriere et au pilotage d'une application de mesure .... et en plus le mode 'Picture' me donne acces a un appli tres tres sympa ou je peux avoir des curseurs dans un plot faire des zooms comparer des valeurs RMS etc etc ... Donc j'en ai absolument besoin CE que vous me dites m'inquiete un peu quand a la gestion des evenments et callback ... moi qui veut a tt pris renverser c# et vb6 dans me boite c'est pas trop gagne .... Pouvez-vous me donner des examples ( avec ie ??) le developpeur m'a propose d'adapter l'initialisation de l'activeX en rendant la propriete accessible au run-time , je vais peut etre attendre cela alors ? merci d'avance Victor |
|
![]() |
| Outils de la discussion | |
|
|