cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 26 juil. 2007 à 00:24
une classe pour la facilite d'utilisation pour les initité comme pour les debutants
ont ajoute le fichier cls puis on utilise les proprietes sans ce soucier du reste.
@+
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 26 juil. 2007 à 00:00
Très bon travail, mais je ne vois pas l'utilité d'implémenter un module de classe pour arriver au résultat voulu...
En plus je dois être nul, mais la sub "InitiateSubClassing", je n'y comprends rien...
En tout cas, tes codes fonctionnent bien.
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 25 juil. 2007 à 19:28
Suffisait de demander ;)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 25 juil. 2007 à 09:05
Mise à jour effectuée.
Projet décliné sous differentes formes.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 25 juil. 2007 à 07:24
Suffit d'ajouter le .ctl dans le projet, au pire :p
mais je vais, dans la journée, proposer trois versions de ce code...
CTL
CLS
FRM
"le changement de la chaîne d'écoute du Clipboard"
en fait, Windows previent (en gros) la premiere appli enregistrée des evenements du Clipboard.
Cette appli a la tache de refiler l'info a la fenetre qui suit, qui a pour tache de retransmettre le message a celle qui suit, etc, etc.
lorsqu'une fenetre F est fermée, la chaine doit se remettre a jour : F-1 devra desormais envoyer ses messages à F+1...
plus clair ?
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 25 juil. 2007 à 01:22
Salut Renfield!
çà veut dire quoi "le changement de la chaîne d'écoute du Clipboard"?
Parce que le code de l'API Guide gère l'évènement du changement du clipboard; il répond quand on fait un "copier" à partir d'une autre application, le Bloc-notes par ex.
Et admet quand même qu'il est plus simple à comprendre que ton code...en tout cas pour moi.
Et je suis d'accord avec EBARTSOFT, je ne comprends pas l'utilité d'un Usercontrôle, qui est tj un peu délicat à mettre en oeuvre (il faut l'enregistrer, etc).
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 24 juil. 2007 à 23:57
MimiZanzan, le code 'de fond' utilisé est exactement le même, on fait appel a la même API.
mais c'est la même raison qui m'a poussé a faire un UserControl, je souhaitais faire quelque chose de simple a mettre en place...
remarques, un
Private WithEvents moClipboardSpy As CClipboardSpy
n'est pas très très complexe ^^
pour l'exemple de l'API guide, il illustre parfaitement l'API en question, mais ne gère pas le changement de la chaine d'ecoute du Clipboard, et le Subclassing tel qu'utilisé rend l'IDE instable.
EB> content que le coté technique attire ton attention
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 24 juil. 2007 à 23:45
mimiZanzan > Tout juste mimi le presse papier a été concu de telle sorte que n'importe application puisse echanger des données et interagir entre elle du coup il exite un bon nombre de fonction qui permete de le manipuler sans trop ce casser la tete.
J'aurais plutot vu une classe plutot qu'un control car il n'y a rien de "visuel" dans le fait de receptionner des evenemtn du clipboard. Neanmoins c'est techniquement sympa
@+
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 24 juil. 2007 à 19:19
Ton code est intéressant, mais il y a un moyen beaucoup plus simple de surveiller le presse-papier, que l'on peut trouver dans l'API-Guide (http://www.allapi.net/), dans l'exemple donné pour la fonction SetClipboardViewer.
Je le retranscris ci-dessous:
Dans une form1:
Private Sub Form_Load()
'Subclass this form
HookForm Me
'Register this form as a Clipboardviewer
SetClipboardViewer Me.hwnd
End Sub
'
Private Sub Form_Unload(Cancel As Integer)
'Unhook the form
UnHookForm Me
End Sub
'
Private Sub Command1_Click()
'Change the clipboard
Clipboard.Clear
Clipboard.SetText "Hello !"
End Sub
Dans un module standard:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long
Public Const WM_DRAWCLIPBOARD = &H308
Public Const GWL_WNDPROC = (-4)
Dim PrevProc As Long
'
Public Sub HookForm(F As Form)
PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
'
Public Sub UnHookForm(F As Form)
SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc
End Sub
'
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_DRAWCLIPBOARD Then
'MsgBox "Clipboard changed ..."
Form1.Print " Le contenu du Presse-papier a changé à " & FormatDateTime(Now, vbLongTime)
End If
End Function
Et çà marche!
Bravo quand même pour ton code, quoique je n'ai pas encore tout compris....
26 juil. 2007 à 16:17
26 juil. 2007 à 16:12
26 juil. 2007 à 00:24
ont ajoute le fichier cls puis on utilise les proprietes sans ce soucier du reste.
@+
26 juil. 2007 à 00:00
En plus je dois être nul, mais la sub "InitiateSubClassing", je n'y comprends rien...
En tout cas, tes codes fonctionnent bien.
25 juil. 2007 à 19:28
25 juil. 2007 à 09:05
Projet décliné sous differentes formes.
25 juil. 2007 à 07:24
mais je vais, dans la journée, proposer trois versions de ce code...
CTL
CLS
FRM
"le changement de la chaîne d'écoute du Clipboard"
en fait, Windows previent (en gros) la premiere appli enregistrée des evenements du Clipboard.
Cette appli a la tache de refiler l'info a la fenetre qui suit, qui a pour tache de retransmettre le message a celle qui suit, etc, etc.
lorsqu'une fenetre F est fermée, la chaine doit se remettre a jour : F-1 devra desormais envoyer ses messages à F+1...
plus clair ?
25 juil. 2007 à 01:22
çà veut dire quoi "le changement de la chaîne d'écoute du Clipboard"?
Parce que le code de l'API Guide gère l'évènement du changement du clipboard; il répond quand on fait un "copier" à partir d'une autre application, le Bloc-notes par ex.
Et admet quand même qu'il est plus simple à comprendre que ton code...en tout cas pour moi.
Et je suis d'accord avec EBARTSOFT, je ne comprends pas l'utilité d'un Usercontrôle, qui est tj un peu délicat à mettre en oeuvre (il faut l'enregistrer, etc).
24 juil. 2007 à 23:57
mais c'est la même raison qui m'a poussé a faire un UserControl, je souhaitais faire quelque chose de simple a mettre en place...
remarques, un
Private WithEvents moClipboardSpy As CClipboardSpy
n'est pas très très complexe ^^
pour l'exemple de l'API guide, il illustre parfaitement l'API en question, mais ne gère pas le changement de la chaine d'ecoute du Clipboard, et le Subclassing tel qu'utilisé rend l'IDE instable.
EB> content que le coté technique attire ton attention
24 juil. 2007 à 23:45
J'aurais plutot vu une classe plutot qu'un control car il n'y a rien de "visuel" dans le fait de receptionner des evenemtn du clipboard. Neanmoins c'est techniquement sympa
@+
24 juil. 2007 à 19:19
Je le retranscris ci-dessous:
Dans une form1:
Private Sub Form_Load()
'Subclass this form
HookForm Me
'Register this form as a Clipboardviewer
SetClipboardViewer Me.hwnd
End Sub
'
Private Sub Form_Unload(Cancel As Integer)
'Unhook the form
UnHookForm Me
End Sub
'
Private Sub Command1_Click()
'Change the clipboard
Clipboard.Clear
Clipboard.SetText "Hello !"
End Sub
Dans un module standard:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long
Public Const WM_DRAWCLIPBOARD = &H308
Public Const GWL_WNDPROC = (-4)
Dim PrevProc As Long
'
Public Sub HookForm(F As Form)
PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
'
Public Sub UnHookForm(F As Form)
SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc
End Sub
'
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_DRAWCLIPBOARD Then
'MsgBox "Clipboard changed ..."
Form1.Print " Le contenu du Presse-papier a changé à " & FormatDateTime(Now, vbLongTime)
End If
End Function
Et çà marche!
Bravo quand même pour ton code, quoique je n'ai pas encore tout compris....