Déssiner au dessus de tout...

neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007 - 20 août 2005 à 07:14
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 21 août 2005 à 13:48
Bonjour, Mon pb est simple: Comment fait t on pour tracer une ligne
(avec movetoex et lineTo que je sais utiliser) sur l'écran, c a d au
premier plan de tout, sur la form mais sur l'écran

en fait je cherche a connaitre le hdc principal, pas celui de la form. merci

8 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 août 2005 à 08:29
Il s'agit du hDC = 0.


Attention cependant, le raffraîchissement de ce DC ne se fera que lors
d'un appel à InvalidateRect => pour effacer les lignes tracées, il
faudra l'utiliser sur toutes la largeur déssinée pour éviter d'avoir
des traces persistantes.


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007
20 août 2005 à 11:42
Un invalidate Rect sur toute la largeur?? peux tu m'en dire plus svp??

Et aussi, ôur déterminer la couleur des lignes et tout,

Il faut un truc avec Pen, mais j'ai rien compris car je sais pas comment lier et tout. peux tu m'éclairer à ce sujet? merci
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 août 2005 à 13:25
Hum, tu as déjà essayé de tracer une ligne avec les API ?



Il te faut un crayon :

Dim lPen as Long

Dim lOldPen as long



Let lPen = CreatePen(PS_SOLID, 1, vbRed)

Let lOldPen = SelectObject(0, lPen)

Call DeleteObject(lOldPen)



Et ensuite, tu peux tracer tes lignes avec MoteToEx et LineTo



Pour le InvalidateRect, tu peux l'appliquer à tout l'écran pour tout raffraichir, ou à une zone plus restreinte, à toi de voir.


Mais tu cherche à faire quoi au juste ? Car ce n'est pas très recommandé de tracer sur le DC de l'écran...


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007
20 août 2005 à 13:33
En fait je suis en train de faire un usercontrol.

C'est une grabzone en fait

Donc ce que j'aimerai c'est voir le contour de la form, lors du
déplacement, puis lorsque je relache le bouton de la souris, la form va
à cet emplacement



Mais j'ai essayé, ya des pb d'autoredraw, et j'arrive pas à tracer avec hdc=0 :(

;)merci ;)
0

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

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 août 2005 à 13:43
Et oui, c'est le problème : les raffraichissements ! C'est pour cà que je déconseille de tracer sur le DC de l'écran !



Mais pour ton problème, il y a plus simple : tracer un rectangle de
focus, comme le font les applis professionnelles : il s'agit de la
fonction DrawFocusRect, et avec cà, plus de soucis de raffraichissement.



Il faut juste penser à rappeler la fonction pour effacer le rectangle quand même !



Note : c'est la fonction que j'utilise avec mon créateur d'icône pour le rectangle de sélection, et ca marche à merveille !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007
20 août 2005 à 15:37
Merci bcp t'es trop sympa :D



Mais en fait il reste un pb, le rect se déplace mais que dans le form et si je met DrawFocusRect 0, FocusRect

Il ne s'affiche pas à l'écran:(



Mon code est le suivant:



Private Sub Usercontrol_Mousemove(button As Integer, shift As Integer, X As Single, Y As Single)

If button = 1 Then

With FocusRect

.Top = UserControl.Parent.ScaleY(UserControl.Parent.Top, vbTwips, vbPixels)

.Left = UserControl.Parent.ScaleX(UserControl.Parent.Left, vbTwips, vbPixels)

.Bottom = FocusRect.Top +
UserControl.Parent.ScaleY(UserControl.Parent.Height, vbTwips, vbPixels)

.Right = FocusRect.Right +
UserControl.Parent.ScaleY(UserControl.Parent.Width, vbTwips, vbPixels)

End With

DrawFocusRect 0, FocusRect

End If

End Sub

Merci encore!
0
neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007
21 août 2005 à 13:02
Ok j'ai réussi avec une GetDC pour obtenir l'écran :)

et sinon, comment rafraichir TOUT l'écran?

faut il fair toute une procédure pour avoire la résolution de l'écran etc?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 août 2005 à 13:48
Oups, oui le hDC de l'écran n'est pas 0, excuse moi, c'est bien GetDC(0) qu'il faut utiliser



Non non, tu fait un invalidateRect avec comme coordonnées du rectangle :



Screen.Width et Screen.Height

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
Rejoignez-nous