Lorsque (par exemple) la fentre Window1 est slectionne dans la partie gauche (Navigation), dans la partie droite, tu peux changer le nom de la fentre de WIndow1 wMain.
La super classe se situe dessous le nom Window1, en face de Super. Cest l que la slection se fait.
En revanche, il faut la crer. Dans le menu Insert, il y a toute une srie de commandes, cest l que lon ajoute une Classe. On y fixe le type (Window dans notre cas), puis on y ajoute des lments (Menu Handlers, Properties, Methods, etc.).
Cela permet de personnaliser une fentre (cest plus complexe, mais cest lide.
De retour du futur (ce soir la TV: Back to the Future)
Lance TextEdit et ouvre un texte: que se passe-t-il lorsque tu slectionn un bout de texte et effectue un clic droit sur ce texte ?
Tu dois voir apparatre un menu contextuel qui contient (entre autres) les fonctions Copier / Coller
Clic droit: ou bien un clic gauche effectu avec la touche Control presse (puis relche).
Bonnes questions: Quels sont les noms et numros de version de lIDE que tu utilises ? Pareil pour macOS.
Au fait, le glisser/dposer fonctionne-t-il ? (drag and drop en anglais)
Dans quel coin de France (du monde) te situes-tu ?
Luc raison, a ne fonctionne pas par dfaut sur Windows (pas de soucis sur macOS) !
Du coup j’ai regard comment j’avais fait dans mes programmes, et en fait je ne me souvenais plus que j’avais fait une classe base sur une TextArea pour grer le menu contextuel via ConstructContextualMenu et ContextualMenuAction.
Grosso modo dans ConstructContextualMenu j’ai
[code]base.append( New MenuItem( kXCVCut ) ) // 0
base.append( New MenuItem( kXCVCopy ) ) // 1
base.append( New MenuItem( kXCVPaste ) ) // 2
base.append( New MenuItem( kXCVClear ) ) // 3
base.append( New MenuItem( MenuItem.TextSeparator ) ) // 4
base.append( New MenuItem( kXCVSelectAll ) ) // 5
// Si pas de slection, Couper/Copier/Effacer sont dsactivs
If Me.SelLength = 0 Then
base.Item( 0 ).Enabled = False
base.Item( 1 ).Enabled = False
base.Item( 3 ).Enabled = False
End If
// Si pas de texte, Tout slectionner est dsactiv
If len( Me.Text ) = 0 Then
base.Item( 5 ).Enabled = False
End If
// Si presse-papiers vide, Copier/Coller est dsactiv
Dim c As New Clipboard
If Not c.TextAvailable Then
base.Item( 2 ).Enabled = False
End If
c.Close
If Not Me.Enabled Or ( Me.Parent <> Nil And Not Me.Parent.Enabled ) Or ( Me.Parent.Parent <> Nil And Not Me.Parent.Parent.Enabled ) Then
base.Item( 0 ).Enabled = False
base.Item( 2 ).Enabled = False
base.Item( 3 ).Enabled = False
End If
Return True
[/code]
et dans ContextualMenuAction j’ai
Select Case hitItem.Text
Case kXCVCut
Me.Copy
Me.SelText = ""
Case kXCVCopy
Me.Copy
Case kXCVPaste
Me.Paste
Case kXCVClear
Me.SelText = ""
Case kXCVSelectAll
Me.SelectAll
End Select
Encore une petite prcision, j’ai la mme chose pour les TextField
La solution est simplissime, elle est dcrite dans la page menuitem de la rfrence :
Function MouseDown(X As Integer, Y As Integer) Handles MouseDown as Boolean
If IsContextualClick Then
Dim m As MenuItem
m = EditMenu.Popup
End If
End Function
Ceci est dans l’vnement MouseDown de la TextArea ou du TextField.
Function ConstructContextualMenu(base as MenuItem, x as Integer, y as Integer) Handles ConstructContextualMenu as Boolean
for i as integer = 0 to EditMenu.count-1
base.append(EditMenu.Item(i))
next
base.Append(New MenuItem("This is my menuItem"))
End Function
Function ContextualMenuAction(hitItem as MenuItem) Handles ContextualMenuAction as Boolean
if hitItem.Text = "This is my menuItem" then MsgBox("This is my menuItem")
End Function
En tout cas, pour rpondre @LucLeroy , le plus simple est donc de crer une subclass de TextField et/ou TextArea et d’implmenter le code pour le menu contextuel, puis d’utiliser cette subclass dans les windows.
Cela tant dit, cela n’explique pas pourquoi par dfaut le menu contextuel d’edition est disponible sur macOS mais pas sur Windows…
Bonjour,
Alors rsultat j’ai russi faire fonctionner le copier/coller dans un Textarea et mettant le code de Michel Bujardet mais en enlevant la dernire ligne sinon cela me gnre une erreur.
Quel serait le moyen de gnraliser a l’ensemble de l’application ? Au pire la solution est compliqu je ferais a textarea par textarea
Encore une fois merci vous tous pour cette aide plus que bienvenue !
[quote=442367:@Luc Leroy]Bonjour,
Alors résultat j’ai réussi à faire fonctionner le copier/coller dans un Textarea et mettant le code de Michel Bujardet mais en enlevant la dernière ligne sinon cela me génère une erreur.
Quel serait le moyen de généraliser ça à l’ensemble de l’application ? Au pire la solution est compliqué je ferais ça textarea par textarea[/quote]
Comme je l’ai indiqué : tu sous-classes TextArea avec la gestion des menus contextuels, et dans tes fenêtres, tu utilises ta sous-classes. C’est le principe même de la programmation objet : tu utilises un objet existant (la classe TextArea par exemple), tu l’enrichi avec tes fonctionnalisés (le menu contextuel) et ensuite tu peux utiliser ta classe enrichie dans le reste de ton application.