Clic droit "copier/coller"

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

j’aurais jamais pensé à ca et franchement ca merite un feedback …

Et l’utilissation de & (sous Windows donc) ?

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.

http://documentation.xojo.com/api/language/me.htmlnuItem

C’est vrai si tu veux afficher exactement le même menu que le menu Edition. Si tu veux d’autres items, tu dois construire le menu autrement.

Tu peux aussi composer ton menu partir des items du menu Edit, et ajouter ce que tu veux. Voici ce que j’ai post dans le thread https://forum.xojo.com/54511-adding-to-the-os-supplied-contextual-menu

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…

Windows n’implmente pas le menu contextuel par dfaut. C’est aux applications de l’implmenter.

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.

Bonjour,
Je tenais remercier tout les intervenants qui m’ont permis d’avancer !
Amicalement