PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.python > proprietes persistantes d'un activeX control et python
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
proprietes persistantes d'un activeX control et python

Réponse
 
LinkBack Outils de la discussion
Vieux 11/09/2007, 11h27   #1
vml
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut proprietes persistantes d'un activeX control et python

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

  Réponse avec citation
Vieux 11/09/2007, 19h51   #2
MC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: proprietes persistantes d'un activeX control et python

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


  Réponse avec citation
Vieux 12/09/2007, 10h19   #3
vml
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: proprietes persistantes d'un activeX control et python

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












  Réponse avec citation
Vieux 12/09/2007, 12h39   #4
Méta-MCI \(MVP\)
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: proprietes persistantes d'un activeX control et python

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



  Réponse avec citation
Vieux 12/09/2007, 13h38   #5
vml
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: proprietes persistantes d'un activeX control et python

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







  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 23h23.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,14488 seconds with 13 queries