FAQ VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 37, nombre de questions : 240, dernière mise à jour : 12 mai 2018 Ajouter une question
Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées sur le forum Développement DotNET
Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle contient sont correctes. Les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci.
Sur ce, je vous souhaite une bonne lecture.
Personnaliser le caret (signe d'omission en français ou plus simplement le curseur du texte) d'un Textbox est relativement aisé. Dans le cas d'une Richtextbox, la taille des caractères variant, le caret est recréé à chaque action de peinture ou de déplacement au sein du texte.
Il convient donc, pour chacune de ces actions, de recréer le caret personnalisé en utilisant l'API CreateCaret et de l'afficher par l'API ShowCaret, car la Richtextbox n'expose pas de méthode de gestion de son caret.
En l'absence du focus (tester via la propriété focused), la création du caret ne doit cependant pas être effectuée, la position de celui-ci ne correspondant pas à une position au sein du control.
Dans le code suivant, le caret personnalisé correspond à une image placée dans les ressources du projet.
Code vb.net : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | Public Class RichTextBoxCustomCaret Inherits RichTextBox Dim hMenuImg As Long Public Img As System.Drawing.Bitmap Private Declare Function CreateCaret Lib "user32" (ByVal hwnd As Integer, ByVal hBitmap As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer Private Declare Function ShowCaret Lib "user32" (ByVal hwnd As Integer) As Integer Private Enum WM WM_KEYDOWN = &H100 WM_KEYUP = &H101 WM_PAINT = &HF WM_CAPTURECHANGED = &H215 WM_LBUTTONDOWN = &H201 WM_LBUTTONUP = &H202 WM_SETFOCUS = &H7 End Enum Protected Overrides Sub WndProc(ByRef m As Message) Select Case m.Msg Case WM.WM_SETFOCUS ' WM_SETFOCUS : le control prend le focus MyBase.WndProc(m) loadCaret() Exit Sub Case WM.WM_KEYDOWN, WM.WM_KEYUP, _ WM.WM_PAINT, _ WM.WM_CAPTURECHANGED, _ WM.WM_LBUTTONDOWN, WM.WM_LBUTTONUP ' WM_KEYDOWN , WM_KEYUP : pour les entrées clavier ' WM_PAINT : pour le redessin ' WM_CAPTURECHANGED : pour gérer l'entrée sur le rtb ' WM_LBUTTONDOWN , WM_LBUTTONUP : clic gauche de la souris ' WM_SETFOCUS : le control prend le focus If Me.Focused Then MyBase.WndProc(m) loadCaret() Exit Sub End If End Select MyBase.WndProc(m) End Sub Private Sub loadCaret() Img = New Drawing.Bitmap(My.Resources.MyCatError) Dim h As Integer = Me.Handle.ToInt32 CreateCaret(h, Img.GetHbitmap.ToInt32, 10, 10) ShowCaret(h) End Sub End Class |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.