Question sur les API

ThomasR

XLDnaute Occasionnel
Bonjour le forum,

J'ai besoin d'aide pour mon apprentissage dans l'utilisation des API

MichelXld m'a conseillé ce très beau site
http://docvb.free.fr/

Dans ce site on propose des exemples de code utilisant des API

J’ai fait plusieurs tentative mais rien y fait :evil:

Je ne sais pas utiliser ces exemples :eek:

Si quelqu'un peut me montrer comment je dois adapter le code

Je joins un exemple qui permet de faire apparaître le USF progressivement du centre vers les bords
D'avance merci.
[file name=Thomas1.zip size=11447]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Thomas1.zip[/file]
 

Pièces jointes

  • Thomas1.zip
    11.2 KB · Affichages: 42
  • Thomas1.zip
    11.2 KB · Affichages: 36
  • Thomas1.zip
    11.2 KB · Affichages: 39

ThomasR

XLDnaute Occasionnel
Bonjour MichelXld, le forum,

Merci pour ce lien.

je n'ai pas assé de temps en ce moment pour pousser mon investigation car les exemples de ton lien finctionne mais je ne comprend toujours pas comment'adapter le code donné dans le site

http://docvb.free.fr/

d'ici 15 jours je pense avoir plus de dispo pour comprendre cela.

je reprendrai ce poste afin de vous poser quelque question sur la méthode à utiliser afin d'adapter. car dans ma piece jointe j'ai une erreur sur 'Me.hWnd'

Code:
' Dans l'évènement Form_Load (ou Form_Activate) d'une feuille,
' vous tapez le code suivant :

' Cet appel de fonction fera s'afficher progressivement la
' fenêtre de son centre vers ses bords



Private Sub UserForm_Activate()
Debug.Print AnimateWindow(Me.hWnd, 10000, &H10 Or &H20000)
End Sub

et j'ai constaté que dans les exemples des liens hWnd est utilisé dans le module mais pas dans l'USF pour autant dans le site sur les API il l'écrive de cette facon ...

pour moi cette différence est du au fait que le code présenté dans ce site est fait pour VB et donc inutilisable dans l'état pour VBA ce qui m'oblige à comprendre afin de le modifier. Ou alors je fais fausse route.
 

Hervé

XLDnaute Barbatruc
Bonjour thomas, michel, le forum

allez je me lance dans le bain des api, c'est comme ca que l'on apprend à nager parait-il

Thomas,

ma réponse est là que pour faire avancer ton souci et inciter nos cracks à venir nous aider à un peu mieux comprendre les méandres de ces trucs barbares que sont les api

en pièce jointe, ton fichier modifié, celui ci ouvre l'userform comme tu le veux mais en haut à gauche de la fenêtre ???? ne me demande pas pourquoi, j'en sais rien :) mais je compte sur un pro pour nous l'expliquer.

dans ton code il te manquait le handle (le handle c'est le numéro de la fenêtre qui t’intéresse)

pour ceci on utilise une function api : findwindow qui retourne le handle ;

de plus ta fonction AnimateWindow était déclaré private.

Je compte sur les cracks pour venir corriger mes dires ou nous donner de plus amples renseignements


salut
[file name=Thomas1_20050720161628.zip size=12061]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Thomas1_20050720161628.zip[/file]
 

Pièces jointes

  • Thomas1_20050720161628.zip
    11.8 KB · Affichages: 32

michel_m

XLDnaute Accro
Salut Hervé, Michel, Thomas


Les API, c'est pas la joie! Il y a des trucs intéressants sur la méthode dans le site de Laurent Longre et le freeware APIWiever mais ca n'empêchera pas les prises de têtes sponsorisées par Aspro.

Bonne recherche et peut-être à bientôt sur les API


Michel
 

MichelXld

XLDnaute Barbatruc
bonjour Thomas , Hervé et Michel

Thomas tu essayes d'adapter des procedures VB en VBA , il y a donc quelques aménagements à apporter pour que cela fonctionne

par exemple pour le Handle j'utilise

'recuperer le Handle de l'Usf : Daniel Klann, mpep
If Val(Application.Version) < 9 Then 'Excel 2000
strFormClassName = 'ThunderXFrame'
Else
strFormClassName = 'ThunderDFrame' 'Excel 2000/2002
End If

Valeur = FindWindow(strFormClassName, 'Usf animé') 'le Handle de la fenetre
AnimateWindow Valeur, 2000, &H10



l'exemple dans ce classeur est justement l'adaptation de la démo présentée sur le site VbCode

http://docvb.free.fr/apidetail.php?idapi=186

Le classeur zippé :
Lien supprimé

le fil de discussion :
Lien supprimé


bonne soiree
MichelXld

Message édité par: MichelXld, à: 20/07/2005 17:43
 

Hellboy

XLDnaute Accro
Bonjour Thomas, michel_xld, Hervé

Je suis comme Hervé. On dirais une drogue dernièrement. Plus la barre est haute, plus je me lance.( je vais finir par me river le nez).

Enfin, une chose que j,ai vue, et corrigé moi si j'ai tord (de grasse ne me laisser pas ds l'ignorance), la déclaration de la fonction est privée et donc accessible que par les procédure du module dans lequel elle se trouve.

Private Declare Function AnimateWindow Lib 'user32' (ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long

devrai être ds le même module que cette procédure( a moins d'être déclaré globalement)

Private Sub UserForm_Activate()
Debug.Print AnimateWindow(Me.hWnd, 10000, &H10 Or &H20000)
End Sub

Et bien sur, je suis aussi pris avec l'erreur de Me.hWnd. ä je ne sais pas encore quel paramètre passer ou définir pour ça.

Message édité par: Hellboy, à: 20/07/2005 21:14
 

ThomasR

XLDnaute Occasionnel
Bonjour Hellboy, michel_xld, Hervé

Merci pour vos réponses.

au moins je me rencontre que ce genre de macro n'est pas si facil que ca car je commencé à croire que mes noeuronnes etaient toutes grillés.

pour ce qui est de mon fichier d'exemple effectivement le private n'etait pas la pour faire avancer mon chmilblique mais en fait j'ai tellement essayé des combinaisons :huh: qu'apres j'ai ecris ce poste par deséspoire :eek: et dans la précipitation j'ai collé le code dans le fichier :eek: .

alors si j'ai bien compris Hérvé 'le handle est le numéro de l'USF que je souhaite atteindre' et pour ce faire j'utilise l'API findwindow pour optenir le numéro (<> de l'index ???) d'un USF

par contre Michel tu n'utilise pas d' API pour trouver le handle grace à :

-ThunderXFrame ou ThunderDFrame ??

Le mieux que j'arrive à faire est sur la base de Hérvé pour le placer au centre j'ai compris dans la macro de MichelXld

qui place dans l'initializ me.left et me.top
apres j'ai vu que dans les propriété de mon usf il etait sur 0 alors je l'ai modifier et sa marche même si je ne l'indique pas dans mon USF_initialize (est ce du a ma version d'excel (2003) et donc par securité le placer dans le code pour ne pas avoir de surprise??).

en tout cas ce poste m'a permis de comprendre mes erreurs mais je reste perplex sur ma capacité à le reproduire sur un autre type d'API .
Je vais faire le test et si j'y arrive je le posterais ici
[file name=Thomas11.zip size=12216]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Thomas11.zip[/file]

Message édité par: Thomas®, à: 20/07/2005 23:38
 

Pièces jointes

  • Thomas11.zip
    11.9 KB · Affichages: 29

Hervé

XLDnaute Barbatruc
Bonsoir tout le monde

Thomas, je suis content que ce sujet soit abordé, ca fait un moment que ces bébetes d’api me titille le cervelet droit.

Je vais essayer de t’expliquer ce que j’ai compris, à nous deux on va y arriver, lol

Le handle est un numéro donné par windows pour les fenetres, celui-ci n’est pas toujours le même.

Michel dans sa macro recherche bien le handle, dans cette ligne :

Valeur = FindWindow(strFormClassName, 'Usf animé')

D’ailleurs si tu testes Valeur (msgbox valeur) tu verras qu’un numero (jamais le meme) apparait

Comme on ne connaît pas ce numéro, on recherche le handle à travers le caption du userform (« USF animé » ou me.caption) (là je suis pas sur de moi)

Ensuite on renvoi ce numéro dans la fonction AnimateWindow Valeur, 2000, &H10

Voilà pour le handle

Michel, j’ai pas compris ce test :

If Val(Application.Version) < 9 Then 'Excel 2000
strFormClassName = 'ThunderXFrame'=== c’est quoi cette bête ????
Else
strFormClassName = 'ThunderDFrame' 'Excel 2000/2002
End If

En espérant avoir fait avancé le bazar.

Salut
 

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 536
dernier inscrit
komivi