Problème avec l'objet screen

Résolu
lightedge
Messages postés
6
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
12 novembre 2006
- 11 nov. 2006 à 18:28
lightedge
Messages postés
6
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
12 novembre 2006
- 12 nov. 2006 à 20:38
bonsoir^^
voila j'ai un problème j'ai voulu faire un code pour faire le couper, copier, coller mais j'ai un problème.
en effet, lorsque j'utilise l'objet screen comme suit:
Clipboard.SetText Screen.ActiveControl.
j'arrive pas a voir les propriétés de ActiveControl.
remarquez qu'ici je devais utilisé la propriété SelText

merci d'avance pour votre aide^^ et désolé si j'ai posté dans une rubrique inapproprié

6 réponses

cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
12 nov. 2006 à 04:19
Salut
La réaction de l'IDE de VB6 est normale : Au moment où tu codes ces lignes, il ne peut pas savoir à l'avance quel type de controle ce "ActiveControl" représente.
Si par exemple il s'agit d'une TextBox, il faudra utiliser .Text
Alors que si c'est un Label, ce sera .Caption.
Il te faudra donc repérer le type de controle avant de savoir quel attribut lire.
Utiliser la syntaxe du style (à vérifier) :
If TypeOf Screen.ActiveControl Is TextBox Then
   ' C'est une TextBox
ElseIf TypeOf Screen.ActiveControl Is Label Then
   ' C'est un Label
ElseIf ...
End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
3
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
12 nov. 2006 à 20:11
Ok, beaucoup mieux expliqué  ;-)
En effet, l'utilisation de bouton (un objet) change la Screen.ActiveControl, logique.
A mon avis, la propriété .SelText n'existe pas dans tous les composants.
Donc, ça marchera avec une TextBox mais pas avec une ListBox ... Inutile de passer par l'objet, ça t'obligerait à tester le type d'objet pour connaitre la bonne méthode d'accès à la donnée (voir exemple avec TypeOf).

Ce que tu peux faire, c'est mémoriser la donnée intéressante lorsque le composant perd son focus :
Dans ta partie déclaration de ta forme, tu déclares une variable qui collectera le nom du composant sur lequel tu te trouves :
Private sLastText As String
Dans chaque composant de ta forme d'où tu veux récupérer du texte, dans _Validate :
Private Sub List1_Validate(Cancel As Boolean)
    sLastText = List1.Text
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
    sLastText = Text1.Text
End Sub
Et quand tu as besoin de la dernière valeur, elle est contenue dans ta chaine sLastText
Private Sub Command1_Click()
    Debug.Print sLastText
End Sub

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
3
lightedge
Messages postés
6
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
12 novembre 2006

12 nov. 2006 à 15:19
Vous aviez raison^^. Mais dans ce cas qu'est ce que je peux faire si je ve créer un bouton pour copier l'ActiveControle devient le bouton et pas le text par exemple. auriez vous une idée sur la manière avec laquelle je pe savoir quelle est le contrôle qui a perdu le focus?
Merci encore pour votre précieuse aide^^
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
12 nov. 2006 à 15:49
"si je ve créer un bouton pour copier l'ActiveControle devient le bouton et pas le text par exemple"
Incompréhensible
Pour détecter la perte de focus, il suffit d'aller dans l'évènement _Validate de chaque composant, par exemple maTextBox_Validate se déclenche à chaque fois que l'utilisateur ressort de la TextBox.

Explique plutôt se que tu veux faire, j'ai l'impression que tu es parti dans un truc bien compliqué.
Précise nous aussi qu'il s'agit bien de VB6 (et pas de VBA de Excel/Word qui a hélas aussi la version 6 (une intuition))
0

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

Posez votre question
lightedge
Messages postés
6
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
12 novembre 2006

12 nov. 2006 à 16:07
Non je travaille bien avec vb6. Mais je veux créer dans mon application les bouttons pour faire couper copier coller je suis aller voir beaucoup de tutos. Ils sont presque les même.
Mon projet contient des textbox, treeviex listbox et autres je voulais alors réussir a copier du texte de n'importe quel autre qui contient du texte vers un autre. voila les fonctions que j'ai trouvé pour faire cela:



Private Sub EditCut_Click ()

      ' Clear the contents of the Clipboard.

      Clipboard.Clear

      ' Copy selected text to Clipboard.

      ClipBoard.SetText Screen.ActiveControl.SelText

      ' Delete selected text.

      Screen.ActiveControl.SelText = ""

End Sub



Private Sub EditCopy_Click ()

      ' Clear the contents of the Clipboard.

      Clipboard.Clear

      ' Copy selected text to Clipboard.

      ClipBoard.SetText Screen.ActiveControl.SelText

End Sub



Private Sub EditPaste_Click ()

      ' Place text from Clipboard into active control.

      Screen.ActiveControl.SelText = ClipBoard.GetText ()

End Sub



Private Sub EditDelete_Click ()

      ' Delete selected text.

      Screen.ActiveControl.SelText = ""

End Sub

Mais cela ne marchais pas car si j'ai bien compris quand j'appy sur le boutton par exemple pour faire copier le ActiveControle n'est pas alors le controle qui posséder le texte mais le boutton lui même et comme il n'a pas de seltext ça génère une erreur.
Alors si vous avez une quelconque solution a ce problème merci d'avance^^ et encore merci pour votre patience^^
0
lightedge
Messages postés
6
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
12 novembre 2006

12 nov. 2006 à 20:38
merci encore l'idée de mémorisé dans une variable va résoudre mon blem encore merci pour votre aide^^
0