Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MIDDLEBUTTON COPYPASTE [ADDIN VB6]


Information sur la source

Catégorie :Trucs & Astuces Classé sous : addins, MiddleButton, Copy, Paste, Copier coller Niveau : Débutant Date de création : 06/05/2008 Date de mise à jour : 10/05/2008 10:28:05 Vu / téléchargé: 2 353 / 114

Note :
Aucune note

Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
J'avais remarqué que sous UNIX, lorsque l'on sélectionne du texte, grâce au bouton du milieu, ça faisait une sorte de copier coller.

En fait, le mot sélectionné se 'recopie' à l'endroit ou l'on place le curseur.

Le mieux, c'est de l'essayer.

Installation :
Si la dll n'est pas supprimée du zip, lancez simplement le fichier Install.Bat, sinon
il faut ouvrir le projet et compiler la dll.
 

Conclusion

Base de travail : source d'EBArtSoft et sa MouseWheel
http://www.vbfrance.com/codes/UTILISER-ROULETTE-DANS-VB6-IDE-ADDIN_21802.aspx
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

06 mai 2008 18:38:40 :
Erreur monumentale d'orthographe :$
10 mai 2008 10:28:05 :
** Utilisation de la méthode GetSelection pour récupération du texte sélectionné. | ** Abandon de l'utilisation du Clipboard. | Merci Renfield ;) | Le détail des modifications se trouve dans l'entête du module

Commentaires et avis

signaler à un administrateur
Commentaire de Charles Racaud le 06/05/2008 20:47:11

Mais c'est super pratique ca. Et je ne connaissais même pas ca sur Linux en plus ^^

Par contre, j'ai eu un crash lors de la fermeture de l'ide mais celà l'as fait qu'une seule fois. Je n'ai pas réussit à le reproduire. Donc, je sais pas trop d'où ca peu venir.

Et bon retour parmis nous ^^
__
Kenji

signaler à un administrateur
Commentaire de PCPT le 06/05/2008 21:44:29 administrateur CS

salut mortalino,

çà peut être pratique, c'est rigolo. un réflexe à prendre sans doute, mais apparemment faut être prudent :
si j'ai qqc dans le presse papier (image) et que je click-molette sur la form, je me retrouve avec l'image dedans
une texte, caption sélectionné (propriété), il prend le presse-papier

apparemment la zone d'action n'est pas "que" le code

(pas eu de crash mais dés-installée avant la fermeture)

signaler à un administrateur
Commentaire de mortalino le 07/05/2008 04:14:44

Salut Kenji,

Oui c'est pratique, il faut s'habituer mais ça permet d'être rapide sur certaines actions (copie de mots, instructions voir un bloc).
Concernant le plantage que tu as eu, je ne sais pas ce qu'il s'est passé, je n'ai pas (encore) eu de problème.

Je ne sais pas si c'est propre à Unix ou Linux, mais mon outil de travail au taf est sous Unix, c'est peut-être nos administrateurs système qui ont programmé cette fonction.
Je leur demanderai à l'occas.

Salut PCPT,

j'aime ton terme 'click-molette'  ;)
J'ai vu effectivement que si tu sélectionnes une propriété (comme le Caption), ce n'était pas pris en compte, ce qui est en fait normal, car seule la fenêtre de code est sous-classée.
Par contre s'est bizarre ton histoire d'image, je n'ai pas pu le reproduire. Mais j'ai trouvé un bug, tu sélectionnes un contrôle situé sur la Form, tu 'click-molette'  ;)  et ton contrôle est dupliqué. C'était pas prévu  :$

Pour stabiliser ça et le coup des images, avant de copier coller, je ferai une vérif avec GetSelection (VBIDE)

Voilà, sinon, perso, jusqu'à présent aucun crash. Par contre j'ai essayé de créer la dll pour vba (en changeant dans le Connect) mais au chargement de vba, j'ai une erreur de compatibilité de type.

Merci pour vos comms  :p

signaler à un administrateur
Commentaire de Renfield le 07/05/2008 04:20:41 administrateur CS

l'interêt d'une manipulation differente de Ctrl+C/Ctrl+V, qui se fait naturellement et rapidement, tout de même ^^ serait de ne pas passer par le presse-papier, offrant une sorte de deuxième clipboard.

signaler à un administrateur
Commentaire de mortalino le 07/05/2008 04:26:28

Salut Renfield,

en fait ça me gène de passer par le presse papier, à l'origine, je ne voulais récupérer que le texte sélectionné par l'intermédiaire d'une variable, mais GetSelection ne te donne que la position de la sélection, je n'ai pas trouvé le moyen de récupérer le texte. Un indice ?

++

signaler à un administrateur
Commentaire de Renfield le 07/05/2008 06:54:13 administrateur CS

ben tu peux passer par:

Property Lines(StartLine As Long, Count As Long) As String
    Lecture seule
    Membre de VBIDE.CodeModule
    Renvoie le bloc de lignes spécifié.

signaler à un administrateur
Commentaire de mortalino le 07/05/2008 07:14:20

merci pour les infos, j'avais pas vu Lines, j'y travaille déjà pour ne récupérer que la sélection.

signaler à un administrateur
Commentaire de moustachu le 07/05/2008 09:20:11

>Commentaire de Renfield le 07/05/2008 04:20:41
>Commentaire de Renfield le 07/05/2008 06:54:13
Heu, t'as arrêté de dormir ?

Ca m'a l'air pratique ça. Je dois avouer que le Ctrl+C Ctrl+V c'est rapide... trop parfois :o)

++
Moustachu

signaler à un administrateur
Commentaire de cirec le 07/05/2008 09:32:19 administrateur CS

Salut les djeune's, :)

si j'ai bien compris cette extension n'est que pour l'IDE VB

bon moi je ne le possède pas (VB) mais une question me taraude néanmoins: si comme chez moi le click molette est réaffecté à la fermeture des fenêtres (ALT+F4) est ce que ça fonctionne quand même ???

signaler à un administrateur
Commentaire de Renfield le 07/05/2008 09:47:01 administrateur CS

Moustachu> ben si! je dors.... entre minuit et trois/quatre heures du matin.
ca laisse du temps libre (entre ma femme, ma fille, etc...)

signaler à un administrateur
Commentaire de mortalino le 07/05/2008 19:37:25

Salut Cirec,

excellente question, il faudrait tester !
Ca a beau être sous-classé, je ne sais pas comment cela fonctionne avec une affectation de click par un programme tiers.

T'as plus qu'à te mettre à VB pour le savoir  :D

Ou si quelqu'un d'autre connait la réponse  ;)
@++

signaler à un administrateur
Commentaire de jack le 07/05/2008 21:52:24 administrateur CS

Rxcrllrnyr if"r <-- ça c'est quand on écrit dans le noir, lol : allumage
Excellente idée, Mortalino
J'utilise aussi beaucoup cette fonctionnalité souris sous OpenVMS. Très pratique, j'adopte !
Ca fait plaisir de te "revoir" dans le coin !

Pour ce qui est du Ctrl-C / Ctrl-V : Je ne m'y suis pas adapté : Trop d'erreur de C à la place de V = énervement. J'utilisai la méthode Windows 3.1 : Ctrl-Ins / Shift-Ins qui semble abandonné sur certains logiciels de Microsoft.

signaler à un administrateur
Commentaire de mortalino le 08/05/2008 23:54:40

Salut Jack, et merci pour ton comm  ;)

Il est vrai que c'est pratique, dommage que je n'arrive pas à l'adapter pour vba  :(
(erreur incompatibilité, impossible à débugger vu que la dll est déjà lié en tant que complément à Office)

J'essaie juste de restaurer le clipboard (voir ne pas l'utiliser, ce serait mieux) mais ça ne fait pas ce que je veux (Topic ouvert d'ailleurs à ce sujet, aujourd'hui).
On verra si l'avenir m'est favorable  :D

C & V étant proche, je reconnais qu'il est facile de se mélanger les pinceaux. pareil, sous notre OS, on a F3 pour copier et F4 pour coller. Bien pratique aussi.

++

signaler à un administrateur
Commentaire de Renfield le 09/05/2008 08:33:44 administrateur CS

bouges pas l'ami, je te le corrige ton code.

signaler à un administrateur
Commentaire de Renfield le 09/05/2008 10:36:06 administrateur CS

a améliorer, mais la base est là... (a toi de modifier pour gérer le SDI)

Sub HookWindow(ByRef voComponent As VBComponent)
Dim hMdiWnd As Long
    '# On cherche la fenetre MDI
    hMdiWnd = FindWindowEx(VBInstance.MainWindow.hwnd, 0, WNDNAME, vbNullString)
    '# Et la fenetre de code courante
    mhWnd = FindWindowEx(hMdiWnd, 0, "VbaWindow", voComponent.CodeModule.CodePane.Window.Caption)

    If mhWnd Then
        mhProc = SetWindowLong(mhWnd, GWL_WNDPROC, AddressOf WindowProc)
    End If
End Sub


et donc :
Private Sub CmpHandler_ItemActivated(ByVal VBComponent As VBIDE.VBComponent)
    UnhookWindow
    HookWindow VBComponent
End Sub

Private Sub CmpHandler_ItemSelected(ByVal VBComponent As VBIDE.VBComponent)
    UnhookWindow
    HookWindow VBComponent
End Sub


ainsi, on hook la fenetre, et non la MDI

Option Explicit

Private Const GWL_WNDPROC           As Long = (-4)
Private Const WM_KILLFOCUS          As Long = &H8
Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202
Private Const WM_MBUTTONDOWN As Long = &H207

Private 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
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public VBInstance   As VBIDE.VBE
Private mhWnd As Long
Private mhProc As Long

Public Sub HookWindow(ByRef voComponent As VBComponent)
Dim hMdiWnd As Long
    '# On cherche la fenetre MDI
    hMdiWnd = FindWindowEx(VBInstance.MainWindow.hwnd, 0, WNDNAME, vbNullString)
    '# Et la fenetre de code courante
    mhWnd = FindWindowEx(hMdiWnd, 0, "VbaWindow", voComponent.CodeModule.CodePane.Window.Caption)

    If mhWnd Then
        mhProc = SetWindowLong(mhWnd, GWL_WNDPROC, AddressOf WindowProc)
    End If
End Sub

Public Sub UnhookWindow()
    If mhWnd Then
        SetWindowLong mhWnd, GWL_WNDPROC, mhProc
        mhWnd = 0
    End If
End Sub

Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim nStartLine As Long
Dim nStartColumn As Long
Dim nEndLine As Long
Dim nEndColumn As Long
Dim nSelLine As Long
Dim nSelColumn As Long
Dim sBuffer As String
Dim sClipboard As String
Dim nPos As Long
    Select Case uMsg
        Case WM_MBUTTONDOWN
            With VBInstance.ActiveCodePane
                '# on récupère la selection (coordonnées)
                .GetSelection nStartLine, nStartColumn, nEndLine, nEndColumn
                '# Les lignes de code contenant le texte séléctionné
                sBuffer = .CodeModule.Lines(nStartLine, nEndLine - nStartLine + 1)
                '# On découpe en fonction des colonnes
                If nEndLine <> nStartLine Then
                    nPos = InStrRev(sBuffer, vbNewLine)
                    sClipboard = Mid$(sBuffer, nStartColumn, nPos + 1 - nStartColumn + nEndColumn)
                Else
                    sClipboard = Mid$(sBuffer, nStartColumn, nEndColumn - nStartColumn)
                End If
                '# On transmet le click gauche a la fenetre de code, aux mêmes coordonnées
                WindowProc = CallWindowProc(mhProc, hwnd, WM_LBUTTONDOWN, wParam, lParam)
                '# Relache le bouton
                CallWindowProc mhProc, hwnd, WM_LBUTTONUP, wParam, lParam
                
                '# On récupère les coordonnées de l'insertion
                .GetSelection nSelLine, nSelColumn, nPos, nPos
                
                '# On récupère la ligne contenant le curseur de saisie
                sBuffer = .CodeModule.Lines(nSelLine, 1)
                '# On supprime cette ligne
                .CodeModule.DeleteLines nSelLine
                '# Et on la remplace avec notre version (potentiellement multi-lignes)
                .CodeModule.InsertLines nSelLine, Left$(sBuffer, nSelColumn - 1) & sClipboard & Mid$(sBuffer, nSelColumn)
                
                '# Et justement ; si multiligne et placée en amont de notre selection initiale,
                If nEndLine <> nStartLine And nSelLine < nStartLine Then
                    '# On décale celle-ci
                    nPos = nEndLine - nStartLine
                    nStartLine = nStartLine + nPos
                    nEndLine = nEndLine + nPos
                End If
                
                '# Et on reselectionne notre texte de départ
                .SetSelection nStartLine, nStartColumn, nEndLine, nEndColumn
            End With
        Case Else
            WindowProc = CallWindowProc(mhProc, hwnd, uMsg, wParam, lParam)
    End Select
End Function

signaler à un administrateur
Commentaire de mortalino le 10/05/2008 10:29:55

Source MAJ
Merci Renfield ;)

signaler à un administrateur
Commentaire de moustachu le 11/05/2008 09:58:19

Bonjour,

Renfield, le ItemActivated ou ItemSelected sont exécutés à quel moment. J'avais posté une source pour sous classer l'IDE de VB mais je ne parvenais pas à sous classer la fenêtre qui n'avait pas été ouverte via l'explorateur de projet.

++
moustachu

signaler à un administrateur
Commentaire de Renfield le 12/05/2008 07:01:05 administrateur CS

depend de la fenetre en question. Pour ne pas subir de limitations, un hook WH_CBT peut surement faire l'affaire.

quand tu selectionne un element de la liste "Explorateur de projet" => ItemSelected

lorsque tu actives une nouvelle fenetre (Form1 (Code) / Form1 ...) => ItemActivated

signaler à un administrateur
Commentaire de moustachu le 14/05/2008 12:13:24

Bonjour,

je modifie mon code grâce à celui-ci et ça va mieux. Il reste un problème, c'est quand sélectionnant un item dans le gestionnaire de projet, la fenêtre de code correspondante s'ouvre car on recherche le nom de la fenêtre. Il faudrait pouvoir savoir si la fenêtre de code est ouverte avant d'appeler la procédure Hook.

++
Moustachu

signaler à un administrateur
Commentaire de Renfield le 14/05/2008 14:51:25 administrateur CS

à regarder via GetWindowClass

signaler à un administrateur
Commentaire de mortalino le 21/05/2008 19:10:33

Salut,

juste pour info, ce n'est pas mes administrateurs systèmes qui ont programmé la chose, apparemment ça fait parti d'Applix, sous Unix..

J'en sais pas plus, je n'ai aucune connaissance de cet os
++

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Copy paste de word a Excel [ par raphexdev ] Lorsque que j'effectue un copy paste de excel a word le formatage de ligne et colonne n'est pas respectéLes lignes sont plus large et les colonne sont help sur macro vba copy/paste [ par clemgara ] Bonjour, Je souhaiterais adapter les macros Copy et Paste ci-dessous,afin de pouvoir s&#233;lectionner plusieurs cellules en m&#234;me temps.(Copy et Copy Paste Events [ par OneHacker ] Comment savoir si l'utilisateur copie ou colle dans une textbox ?Redman Macro 3 sur feuilles [ par enilec89 ] Bonjour a tous, J'ai cette macro qui copie des cellules de F1 à F2. (Ci-dessous) Il faudra automatisation word excel [ par raphexdev ] En fait je travaille actuellement sur la realisation d'un document word celui-ci est composé de tableauxj'ai donc crée des tremplate excel qui se mod SHFileOperation FO_Copy [ par ohector ] Je souhaiterai avev la fonction SHFileOperation FO_copy ne copier que les fichiers qui on une date plus recente qu ceux deja dans le dossier de destin Copie de gros fichiers sous windows 98 vers reseau ? [ par Rockit72 ] Salut tout le monde !Je suis tres embeté, parcequ'il y a un probleme sous windows 98 concernant la copy de fichiers superieur a 2 GoJe m'explique.sous Problème avec Copy [ par twist3z ] Bonjour à tous,Ma commande VB suivante ne fonctionne pas :Shell("Command.Com copy K:\adresse source C:\Documents and Settings\All Users\Desktop")Donc Macro Excel devenue lente avec Erreur -2147417848 (80010108) [ par bambival ] Bonjour à tous,j'ai ecris une macro sous excel pour le traitement de certaine et tout marchait bien.mais depuis que j'ai installé .NET Framework 3.5 m erreur 1004 sur vba [ par SAMANTHA2 ] Salut !Je suis une GRANDE débutante en VBA6.3. Et je travaille sur Windows XP.J'ai créer un Userform qui copie une feuille dans un même classeur. Cela


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,702 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.