Soyez le premier à donner votre avis sur cette source.
Vue 11 474 fois - Téléchargée 871 fois
'voici un exemple de code d'utilisation de la classe : Dim Cl As New DrawClass Private Sub Form_Load() 'creer l'image Cl.newImage Me.ScaleWidth / 2, Me.ScaleHeight / 2, Cl.GetSystemColor(vbButtonFace), 1 'modifi la police Cl.Font.Size = 20 Cl.Font.Name = "Comic Sans ms" End Sub Private Sub Form_Paint() 'affiche l'image sur la form Cl.PaintTo Me.hdc, 0, 0 Cl.DrawWidth = 1 End Sub Private Sub Form_Resize() 'redimensionne à la fenetre Cl.ResizeImage Me.ScaleWidth, Me.ScaleHeight 'dessine Cl.drawRect 0, 0, Me.ScaleWidth, Me.ScaleHeight / 2, 0, RGB(0, 200, 0), vbSolid, vbDiagonalCross Cl.drawRect 0, Me.ScaleHeight, Me.ScaleWidth, Me.ScaleHeight / 2, 0, RGB(200, 200, 0), vbDashDotDot, vbUpwardDiagonal Cl.drawRect Me.ScaleWidth / 2, 0, Me.ScaleWidth, Me.ScaleHeight / 2, 0, RGB(0, 0, 200), vbSolid, vbFSSolid Cl.drawRect Me.ScaleWidth / 2, Me.ScaleHeight, Me.ScaleWidth, Me.ScaleHeight / 2, 0, RGB(200, 0, 0), vbDashDotDot, vbUpwardDiagonal Cl.DrawText "Voici du texte", 5, 5, True Cl.DrawText "Voici du texte non transparent", 5, 100, False, 255 'envoi sur le picture Cl.PaintTo Me.hdc, 0, 0 End Sub Private Sub Form_Unload(Cancel As Integer) 'ne pas oublier si possible ! 'sinon de la memoire reste occupée pour rien 'donc eviter de fermer VB avec le STOP, fermer la fenetre plutot Cl.CloseImage End Sub
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=42861&lngWId=1
Hugo
et apres une minute de redimensionnement intense (lol) le processus (avec la fenetre a taille égale) occupait exactement la meme quantité de mémoire.
merci pour les infos
++
comme te le dit DARKSIDIOUS, tu dois absolument libérer la mémoire par DeleteObject sinon ton prog va saturer, ralentir Windows et enfin se faire expulser par Windows.
SelectObject ne fait que placer l'objet GDI spécifié en lieu et place de l'ancien, il n'a pas à libérer la mémoire, on peut très bien avoir à utiliser plus tard l'ancien objet. La libération mémoire est toujours la responsabilité du développeur.
Bonne continuation.
Et là, le problème est le même pour ta source : tu perds environ 8 à 12 Ko pour chaque redimensionnement de la feuille (ce qui oblige de tout retracer), et environ 10 objets graphiques à chaque fois ! (pour t'en rendre compte, utilise le gestionnaire de processus de Windows, et affiche la colonne "Objets GDI", tu verra vite !
En théorie, lorsque tu fait un SelectObject, Windows est censé libérer les ressources de l'ancien objet graphique, mais il ne le fait pas malheureusement, et du coup, on arrive très vite à la limite des objets graphiques d'un processus !
DarK Sidious
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.