Remplacer un AddressOf

gecanosaga Messages postés 6 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 12 mai 2011 - 10 mai 2011 à 21:35
gecanosaga Messages postés 6 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 12 mai 2011 - 12 mai 2011 à 13:55
Bonjour,

Je développe actuellement un petit bout de code permettant de gérer l'ouverture de fenetres sur un poste multi écrans. Pour ce faire je me suis inspiré des codes disponibles sur ce site (dont gérer un multi écrans).
Cependant j'ai un soucis :
Je développe pour un logiciel appelé Cimplicity qui a un langage de type visual basic. Du coup une instruction que je ne sais pas remplacer n'éxiste pas dans mon logiciel, il s'agit du AddressOf de :
Call EnumDisplayMonitors(0, ByVal 0&, AddressOf EnumèreEcransProc, 0)


si quelqu'un pouvait m'aider ça serait super gentil....

7 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
10 mai 2011 à 22:38
Bonjour,

Il faut que tu créé un Delegate ayant la même signature que ta fonction EnumèreEcransProc (au passage, évite les accents dans les noms de variable, fonctions, ... Car ça rend le code moins international et moins uniforme).

Ensuite tu change le prototype de la fonction EnumDisplayMonitors pour prendre en paramètre le Delegate plutôt qu'un entier.

Puis, il te suffit de l'instancier avec l'AddressOf.

Mon site
0
gecanosaga Messages postés 6 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 12 mai 2011
11 mai 2011 à 13:40
Merci de m'apporter ton aide cependant je crains que les termes que tu emploies soit trop techniques pour moi... :(

Est que tu pourrais me donner un exemple?
0
gecanosaga Messages postés 6 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 12 mai 2011
11 mai 2011 à 14:39
D'après ce que j'ai compris, il faut quand même utiliser un AddressOf avec cette méthode non?

Or je ne peux pas utiliser le AddressOf.
N'y a t'il pas un autre moyen de récupérer l'adresse de ma fonction?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 mai 2011 à 21:06
Bonjour,

Dans ce cas, qu'est-ce qu'est :
EnumDisplayMonitors
et
EnumèreEcransProc

Et pourquoi tu ne veux plus d'AdressOf ?

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gecanosaga Messages postés 6 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 12 mai 2011
11 mai 2011 à 22:18
alors je vais te donner le code de EnumereEcransproc :
Private Function EnumèreEcransProc(ByVal hId As Long, _
                                   ByVal hDCEcran As Long, _
                                   ByVal ptrEcran As Long, _
                                   ByVal aDonnees As Long) As Long

    ' Le système va boucler ici tant qu'il y a des ecrans à lister (CallBack)
    ' On va recuperer l'identifiant de chaque ecran et demander les infos complementaires
    
    Dim r As Long
    
    ' Determine l'index en cours
    r = UBound(EcransCaracteristiques)
    
    ' Recherche les caracteristiques
    EcransCaracteristiques(r) = RechercheCaracteristiques(hId)
    EcransCaracteristiques(r).hId = hId
    
    ' Prepare la variable pour le prochain passage
    ReDim Preserve EcransCaracteristiques(1 To r + 1)

    ' Cette function se repète tant qu'on termine par cette ligne
    ' Quand elle n'aura plus rien à enumerer, elle s'arrêtera seule
    EnumèreEcransProc = 1
    
End Function


quand à EnumDisplayMonitors il s'agit d'une fonction de user32 :

Private Declare Function EnumDisplayMonitors Lib "user32" ( _
                                    ByVal hDC As Long, _
                                    lprcClip As Any, _
                                    ByVal lpfnEnum As Long, _
                                    ByVal dwData As Long) As Long]


Je ne veux plus AddressOf car je voudrais appliquer ce code dans un logiciel (Cimplicity) qui utilise un codage de type VB avec des lacunes et notemment l'absence de la fonction AddressOf
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 mai 2011 à 22:37
Bonjour,

Déjà, tu codes en VB6/A, donc pas VB.NET, ma réponse est donc erronée.

Ensuite, il me semble que même VBA le mot clé AddressOf.

Sinon, il y a peut être une fonction similaire, mais ne connaissant pas le logiciel, je ne pourrais pas t'aider plus loin, dsl.

Mon site
0
gecanosaga Messages postés 6 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 12 mai 2011
12 mai 2011 à 13:55
Pas grave je te remercie pour le temps que tu m'as consacré.

J'ai résolu mon problème à moitié étant donné que je ne peux pas récupérer la résolution de chaque écran, je me suis contenté de celle de l'écran principale en partant du principe que le deuxième à forcément la même (ce qui est vrai dans mon cas). Ca limite l'utilisation du code mais tant pis.
Sauf si quelqu'un connait le moyen de connaitre la résolution de chaque écran sans passer par un AddressOF....

ENcore merci à toi
0
Rejoignez-nous