Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VB Express 2008 et GDI+ : clipping déconcertant...

1 réponse
Avatar
Newsgroups Microsoft
Bonsoir,

J'ai pondu un petit code pour faire un splash screen digne du 21è siècle à
une application VB2002 que je migre en VB2008.
Le clipping censé ne montrer qu'une region circulaire de ma form de
lancement (celle contenant le logo) se révèle inefficace, quelquesoit mes
tentatives d'invocation de méthodes liées à l'objet Clip.
=> elle laisse apparaitre toute la form, et c'est carrément mocheux. :)

Fais-je mal ? Ai-je oublié quelquechose ?
Je vous colle le code, ça sautera sûrement plus à vos yeux qu'aux miens...
;)

Merci d'avance
--------------------------------------------------------------
Un projet contenant une resource graphique (le logo), une winform SplashForm
et un module Main qui contient la méthode Main invoquée comme point de
démarrage d'exécution.
SplashForm est une winform ne contenant qu'un picturebox docké fill,
affichant en centré l'image PNG contenue dans le fichier ressource.

a) Le module
Module Main
Public Sub Main()

Dim form As New SplashForm()
Application.Run(form)
End Sub
End Module


b) La form
Imports System.Drawing.Drawing2D
Public Class SplashForm

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim rectangle As Rectangle
Dim path As GraphicsPath

e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
rectangle = New Rectangle(106, 82, 326, 314)
path = New GraphicsPath()
path.AddEllipse(rectangle)

e.Graphics.SetClip(path, CombineMode.Intersect)

rectangle = Nothing
path.Dispose()
End Sub
End Class

1 réponse

Avatar
Patrice
Voir la doc qui explique comment faire :
http://msdn.microsoft.com/fr-fr/library/6k15y9et.aspx

Ici on intervient dans le tracé de la zone cliente de la fênêtre, ce qui n'a
pas spécialement d'effet tout le reste ayant été déjà tracé au préalable...

--
Patrice

"Newsgroups Microsoft" a écrit dans le
message de news:
Bonsoir,

J'ai pondu un petit code pour faire un splash screen digne du 21è siècle à
une application VB2002 que je migre en VB2008.
Le clipping censé ne montrer qu'une region circulaire de ma form de
lancement (celle contenant le logo) se révèle inefficace, quelquesoit mes
tentatives d'invocation de méthodes liées à l'objet Clip.
=> elle laisse apparaitre toute la form, et c'est carrément mocheux. :)

Fais-je mal ? Ai-je oublié quelquechose ?
Je vous colle le code, ça sautera sûrement plus à vos yeux qu'aux miens...
;)

Merci d'avance
--------------------------------------------------------------
Un projet contenant une resource graphique (le logo), une winform
SplashForm et un module Main qui contient la méthode Main invoquée comme
point de démarrage d'exécution.
SplashForm est une winform ne contenant qu'un picturebox docké fill,
affichant en centré l'image PNG contenue dans le fichier ressource.

a) Le module
Module Main
Public Sub Main()

Dim form As New SplashForm()
Application.Run(form)
End Sub
End Module


b) La form
Imports System.Drawing.Drawing2D
Public Class SplashForm

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim rectangle As Rectangle
Dim path As GraphicsPath

e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
rectangle = New Rectangle(106, 82, 326, 314)
path = New GraphicsPath()
path.AddEllipse(rectangle)

e.Graphics.SetClip(path, CombineMode.Intersect)

rectangle = Nothing
path.Dispose()
End Sub
End Class