fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008
-
15 oct. 2007 à 22:40
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
18 oct. 2007 à 12:02
Bonjour, je voudrais créer un curseur (ou utiliser ce type de curseur) pour reproduire ce qu'il y a dans l'image :
Dans cette image, on voir le curseur après "salut" et il avance au fur et à mesure que l'on écrit dans la console (une fausse console puisque c'est en faut une RichTextBox).
Je voudrais donc mettre en place ce genre de curseur en vb.net 2005. Est ce possible ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 16 oct. 2007 à 00:16
salut,
oui c'est possible, avec l'API CreateCaret ++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 16 oct. 2007 à 18:07
Salut et merci pour ta réponse,
Je n'ai pas trouvé d'exemple d'utilisation de cette API : VOici mon code :
Declare Function CreateCaret Lib "user32" (ByVal hwnd As Integer, ByVal hBitmap As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer
CreateCaret(rtb.Handle, 0, 10, 10) 'utilisation du carret sur ma RichTextBox
Cependant, cela ne marche pas (le curseur n'ai pas changé) et je ne vois aucun exemple sur le Net. Pourrais tu me donner un exemple d'utilisation de cette API pour obtenir un curseur comme sur la photo ci haut ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 16 oct. 2007 à 22:49
un exemple?
umm... OK mais sous VB6. les différences sont néanmoins minimes pour adapter en DotNet
'nécessite une TextBox et
une PictureBox
'capture visible ici :
http://img99.imageshack.us/img99/9449/sanstitre2yn6.jpg '
Option Explicit
Private Declare Function CreateCaret Lib "user32" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As
Long
Private Declare Function ShowCaret Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Form_Load()
' créé
l'image
With Picture1
.Width = 135
.Height = 255
.Picture = .Image
.Visible = False
End With
End Sub
Sub Text1_GotFocus()
Dim h As Long, p As Long
h& = Text1.hwnd
p& = Picture1.Picture
CreateCaret h&, p&, 0, 0
ShowCaret h&
End Sub
et çà nous donne
++
PCPT [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 16 oct. 2007 à 23:00
Oui j'avais trouvé un code en vb6 mais les controles ont changé. Que mets tu dans ta picturebox comme image ? car je ne vois pas de chemin d'accès à un fichier image... serais ce une fausse image ?
Sinon comment récupères tu un Long avec p& = Picture1.Picture ? je ne vois pas à quoi cela correspond en .NET !
En .net la propriété c'est Image et ca retourne un "Image" et non un Integer.
Sinon c'est exactement ce que je veux d'après le screen :)
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 16 oct. 2007 à 23:08
C'est incroyable, y'a rien sur le net a propos de cette API on dirait que je suis le seul à me poser la question ! Je me demande si cette api fonctionne sous dotnet 2003 ou 2005 !?
Pour traduire les API pas de soucis, on remplace les Long par des Integer pour ne pas désiquilibrer la pile d'appel. Sinon pour le reste ca va aussi sauf pour l'histoire de l'image dont je n'ai pas compris l'astuce (cf mon post précédent).
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 16 oct. 2007 à 23:57
oups je réponds à moitié à ta question (désolé pour les multiposts)
en fait en VB .picture retourne un objet stdpicture
mais la valeur par défaut du stdpicture est le .handle donc un long (comme le .text pour la textbox)
l'astuce ici est de "créer" l'image par la partie visible, donc un rectangle. mais une image suffit, comme indiqué dans "remarque"
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 17 oct. 2007 à 00:00
Ah ok donc en fait, le rectangle qui clignote dans la console en vert c'est ta picture box en forme de rectangle ?
Si c'est ca alors en .net je ne sais pas si c'est possible... snif !
Mais il n'y a pas la possibilité de mettre 0 ou 1 comme argument au lieu d'une image, d'après MSDN ca devrait marcher mais pas en .net avec une RichTextBox...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 17 oct. 2007 à 00:08
non on modifie vraiment le caret! la picturebox est masquée au load et ne bouge pas.
0 ou 1 en argument? non il faut le handle de l'image!!
tiens, voici une variante qui fonctionne également
Option Explicit
Private Declare Function CreateCaret Lib "user32" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As
Long
Private Declare Function ShowCaret Lib "user32" (ByVal hwnd As Long) As Long
Dim O As New StdPicture
Private Sub Form_Load()
Set O = LoadPicture("C:\c.jpg")
End Sub
Sub Text1_GotFocus()
CreateCaret Text1.hwnd, O.Handle, 0, 0
ShowCaret Text1.hwnd
End Sub
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 17 oct. 2007 à 22:57
testé en VB6 avec RTB, nop
peut-être en subclassant sur le tick du curseur qui semble ne pas être créé avec createcaret, et en trichant avec une image de fond... en subclassant....
çà reste hasardeux et çà va consommer énormément de ressource pour rien
pourquoi ne pas passer par une simple textebox?
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 18 oct. 2007 à 00:23
Je ne peux pas utiliser une Textbox car j'ai besoin d'avoir du texte enrichie dans ma console... sinon je me serais pas pris la tete !!
Cependant, c'es trop bizarre des que je donne le focus à ma RTB alors je vois le caret correctement mais dès que je tape un caractère, il redevient comme avant !
J'ai collé le code dans l'event GotFocus mais c'est peut etre pas le bon. En tout cas je n'ai rien trouvé d'autre...
Enfin, je tourne et rond et je n'arrive toujours pas à faire fonctionner le caret sur ma RTB en VB.NET 2005 (je sais que en BVB6 ca marche très bien **)
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 18 oct. 2007 à 10:33
Dans l'event TextChanged ca marche lorsque je tape un caractère (au début le curseur est toujours normal dès que je tape un caractère il change... bizarre). Si la RTB pert le focus et que je re-entre dedans alors j'ai le meme problème, il faut taper au moins un caractère. Pour finir, si je tape sur Entree pour aller à la ligne, rebelotte le meme problème ^^
Je pense qu'il faut trouver le bon event ou les bon events...