IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] Copier, Coller, Couper, Undo, Redo


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut [VB6] Copier, Coller, Couper, Undo, Redo
    Bonjour à tous,

    J'ai tenté une recherche sur ce forum, rien. Dans la FAQ, j'ai trouvé un code, mais à ce que j'ai vu c'est pour copier quelque chose de bien précis. MSDN, pareil. Soit ce n'est pas clair, soit ce n'est pas utile.

    Donc ce que je veux faire, c'est Copier, Coller, Couper, Annuler, Refaire sans spécifier un contrôle ou un texte en particulier. J'ai tenté plusieurs codes, sans succès.
    J'ai un seul code qui marche, c'est celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SendKeys "^c"
    SendKeys "^v"
    SendKeys "^x"
    ' etc
    Le problème, c'est que j'ai un raccourci Ctrl + C, Ctrl+V, etc...

    Donc je ne sais pas comment faire pour copier rien en particulier, seulement ce que l'utilisateur a sélectionner.

    Si la réponse a déjà été posée, je m'en excuse. Mes recherches ont bel et bien été vaines.

    Merci d'avance,

    Thunder

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Si tu nous précisais, Thunder :

    ce que l'utilisateur a sélectionné dans quoi ?

    Je te rappelle que les boutons de la souris fonctionnent (exactement comme dans Word, par exemple).

    Je te rappelle également l'existence de l'objet clipboard (aide en ligne).

    Quoi qu'il en soit : si tu veux une aide précise, il va falloir que tu te montres très précis également sur ce que tu veux faire et dans quelles circonstances tu veux le faire.

  3. #3
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    Justement, ça peut être n'importe quoi : Une ligne dans un RichTextBox comme une ligne dans un TextBox. Je veux simplement être capable de Copier, Couper ce qui est sélectionné, et aussi Annuler (Ctrl + Z) et Refaire (Ctrl + Y)

    Je connais l'objet Clipboard, mais sa seule utilité dans ce cas-ci, c'est .GetText. C'est ce que j'utilise, soit dit en passant.

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    oui ?
    Et où est alors ton problème ?
    Il te suffit de gérer ...

    Voilà un exemple : :
    sur une form : une textbox text1 et 2 boutons de commande command1 et command2
    et le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Command1_Click()
      Text1.Text = Text1.Text & Clipboard.GetText
     End Sub
     
    Private Sub Command2_Click()
     Clipboard.Clear
    End Sub
     
    Private Sub Form_Activate()
      Command2.Caption = "vider le presse-papier"
      Command1.Caption = "coller le presse papier"
    End Sub
     
    Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Clipboard.SetText "/" & Clipboard.GetText & Text1.SelText
    End Sub
    en séparant par un séparateur (ici un slash) les mots que tu mets dans le presse-papiers tu peux ensuite les gérer (instr, mid, etc...) comme tu le veux... et donc décider d'agir avec telle ou telle autre partie de clipboard (pour tes Undo, par exemple).

    A toi de faire maintenant preuve d'astuce (ce sera plus une gymnastique de la pensée que de la syntaxe)

  5. #5
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    Justement, ce qui peut être sélectionné peut être n'importe où, je veux juste copier ce qui est sélectionné ^^

    Exactement comme la commande de base.

    Si je sais copier, normalement, je devrais être capable de faire le reste... je crois.

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Si je sais copier, normalement, je devrais être capable de faire le reste... je crois.
    et où est donc ton problème, pour copier, Thunder ?

    Prends un verre d'eau, un pastis, ce que tu veux... et regarge les choses simplement :

    Tu as dis plus haut ; "ce que sélectionne l'utilisateur"...
    Où peut-ib sélectionner ? (les contrôles possibles sont peu nombreux, non ?)
    A quoi reconnait-t-on qu'un texte est sélectionné ?
    Pour une textbox, par exemple, à la propriété seltext...

    Je pourrais tout te dire, Thunder, mais préfèrerais vraiment (comme d'habitude) que tu trouves toi-même le mécanisme simple à imaginer et mettre en oeuvre...

    Je ne viendrai m'en mêler que si indispensable.

    Allez ! vas-y ! tu peux, crois-moi ...

  7. #7
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    Bon, je voulais éviter de le faire pour tous les contrôles possibles, mais si je n'ai pas le choix...

    Merci beaucoup, je vais faire quelques tests et je vais revenir

    Edit: J'ai réussi à copier, coller et couper, merci ^^
    Le problème, c'est Annuler, Refaire et Tout Sélectionner.
    En rapport à ce dernier, comment savoir si un contrôle a le focus ?

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    L'aide en ligne, Thunder, parle de la propriété ActiveControl (à lire)
    Pour le reste (le undo..) c'est l'utilisation des chaînes de caractères séparées dans ton clipboard par le séparateur de ton choix, qu'il te faut examiner de la dernière à la 1ère...
    C'est là une question d'organisation de gestion (la syntaxe n'y a qu'une toute petite place !)
    Pour tout sélectionner ? Lire selstart dans l'aide en ligne, mais aussi (s'il s'agit vraiment de tout : passer au presse-papier la totalité du texte du contrôle). Je ne vois vraiment pas où est ton problème, dans une affaire aussi simple .

  9. #9
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    En fait, tu peux mettre en oeuvre mille et une méthodes de ton choix, à ton gré et selon ta créativité...
    Je t'en ai cité une (utilisation du seul presse papier).

    En voilà une autre :
    Mettre dans le presse-papier, séparés par un séparateur de ton choix et dans l'ordre de traitement, le nom des contrôles modifiés...et utliser la propriété tag de ces contrôles pour y mettre, dans l'ordre et également séparés par un séparateur de ton choix, les modifications successives...
    Tout celà, Thunder, relève d'une gymnastique de la pensée et de rien d'autre...
    Je pourrais inventer dans la foulée une dizaine d'autres méthodes, aucune d'entre elles n'étant bien évidemment enseignée nulle part puisqu'elles résulteraient, chacune d'entre elles, de ma seule créativité !

    Encore une autre ?
    Te servir de 2 variables contenant des chaines séparées par un "séparateur", l'une avec le nom des contrôles et l'autre avec les modifications...

    Une autre ? te servir d'un tableau dynamique à deux colonnes...

    etc...
    etc...

    EDIT : si tu n'y parviens pas par la seule pensée (sans écrire) : prends une feuille de papier et un stylo et écris un algo (c'est le plus difficile). La syntaxe à appliquer à cet algo sera quant à elle des plus simples ! Commence donc par ton algo, s'il te plait.

  10. #10
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Salut

    Pour l'avoir testé dans un RichTextBox et un TextBox, ces deux contrôles gèrent déjà naturellement le copier, couper et coller. Quant à l'annulation (CTRL+Z), ça fonctionne aussi mais pour la seule dernière action effectuée. Un nouveau Ctrl+Z provoque un Refaire. Si tu veux gérer un plus grand nombre d'annulation pour pouvoir les refaire, tu devra gérer une Pile. En VB, la gestion de piles, c'est toute une histoire puisqu'il n'existe, à ma connaissance, rien qui permette de le faire.
    Tu devra enregistrer tes commandes dans un tableau dynamique à chaque annulation et si tu a la solicitation d'une commande refaire, exécuter la commande de plus grand indice du tableau et détruire cet item.

    Personnellement, je n'ai jamais fait... Alors, pour les détails cuisine... Suis pas votre homme!

  11. #11
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Bonjour zaza,

    Tout peut servir de pile, à commencer par le presse-papier bien géré (on prend en mains l'objet clipboard..), mais aussi une ou des variables, les propriétés tag, etc...
    Il suffit de gérer des séparaterurs et de définir le nombre maximum d'actions que peut contenir cette "pile". Lorsque ce nombre est atteint, on supprime l'article (ou la chaine) le plus ancien mis en mémoire et on en ajoute un autre.

    Je crois qu'asdorve pourrait parler d'une appli qu'il a entre les mains, signée jmf, et qui comporte la mémorisation des actions précédentes avec possibilité de les annuler, dans le bon ordre

  12. #12
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Tout à fait!

    Ceci dit, pour la gestion naturelle des annulation dans un textBox et/ou dans un RichTextBox... Vaut mieux avoir une bonne routine de gestion de ces trucs. Parce que suite à d'autres petits tests, je peux vous assurer que c'est n'importe quoi! Vive Microsoft!

  13. #13
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Lis mon rajout par EDIT, zaza, et laissons asdorve nous dire ce qu'il a constaté

  14. #14
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    Tout va bien pour le moment ^^
    Mais j'ai un problème... comment sélectionner un texte ?

    J'ai essayé avec les .SelXXXXX, mais ça ne marche pas :/ (ou je le fais mal ^^)

    Merci d'avance,

    Thunder

  15. #15
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    je pense que tu veux dire "sélectionner dynamiquement" , n'est-ce-pas ?
    Car manuellement, ma foi... : avec la souris, pardi

    Dynamiquement alors ?
    Où est le problème ?

    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command1_Click()
      Text1.SelStart = 2
      Text1.SelLength = 3
      MsgBox Text1.SelText
    End Sub

  16. #16
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    Tu as raison.

    Le problème, c'est que rien n'est surligné, en fait rien n'est visible.

    C'est la visibilité que je cherche (exactement comme un Ctrl + A).

  17. #17
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Ah, Thunder, ah...
    Tu es un voyeur, hein ? (t'as pas honte, non ?)

    Bon, alors , pour satisfaire ton vice ainsi découvert, essaye donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command1_Click()
      Text1.SelStart = 2
      Text1.SetFocus
      Text1.SelLength = 3
      SendKeys "{ENTER}"
    End Sub


    Allez ! C'est l'heure de ma siestita préférée...A +

  18. #18
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    Me trompe-je en disant que SendKeys "{ENTER}" va effacer le texte si le contrôle est multi-ligne ?

    Sans ce SendKeys, toutefois, tout marche parfaitement, merci beaucoup

  19. #19
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Tu as raison, pour une multiligne, le setfocus sera suffisant... et celà marche fort bien.
    A ma sieste maintenant ...

Discussions similaires

  1. VB6 - copier/coller entre 2 appli ayant VBA - erreur 1004
    Par thomaz dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/10/2012, 17h47
  2. Fonction Copier Coller Couper
    Par seb-65 dans le forum jQuery
    Réponses: 2
    Dernier message: 25/07/2012, 16h10
  3. Fonction copier, coller, couper
    Par PhoeniX1405 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 23/09/2008, 16h24
  4. TextBox copier/coller/couper [Java]
    Par am.adnane dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/07/2006, 03h38
  5. Réponses: 2
    Dernier message: 10/05/2006, 00h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo