Lucyberad
Messages postés414Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention26 juillet 2007
-
16 janv. 2006 à 21:32
Lucyberad
Messages postés414Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention26 juillet 2007
-
17 janv. 2006 à 18:58
Bonjour a tous,
mon titre parait vague, mais c'est plutot dur de definir vraiment en 1 phrase.
donc voici ce que j'aimerais faire:
j'aimerais faire un carré ou je peut mettre n'importe quel controle, le truc c'est que seul une partie de ce carré est affiche et que le tout s'affiche quand soit on appuie sur une fleche (dans la partie visible) soit quand on passe la souris dessus et quand la souri ressort de la zone, elle reprend une taille petite.
le mieux est de faire un dessin, voici un petit dessin :
ceci est un photo montage de ce que je voudrai. j'ai mis un petit groupbox derriere pour bien montrer que quand la partie est agrandie elle ne change pas la taille du groupbox mais se "pose dessus" a la maniere d'un combobox (sinon j'aurai pu trouver comment faire mais la c un peu dur)
merci de m'aider pour ce prblm qui (je ne sait pas) peut en fait se reveler tres simple, ou bien se reveler tres difficile.
En faite, c'est assez compliquer.
J'ai codé une approche (assez rapidement), sans trop faire de détails. (Juste pour les testes et pour voir si, en gros, ca marche)
Le p'tit code (désolé pour les couleurs, la mise en formes ne se fait pas automatiquement , et c'est trop long de le faire à la main )
Private WithEvents DroleDeCombo1 As New DroleDeCombo
Private WithEvents Btn As New System.Windows.Forms.Button
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MyClass.DroleDeCombo1.Location = New System.Drawing.Point(100, 100)
MyClass.DroleDeCombo1.Size = New System.Drawing.Size(120, 21)
MyBase.Controls.Add(MyClass.DroleDeCombo1)
MyClass.Btn.Location = New System.Drawing.Point(10, 10)
MyClass.Btn.Size = New System.Drawing.Size(80, 22)
MyClass.DroleDeCombo1.PnlForm.Controls.Add(MyClass.Btn)
End Sub
Private Sub Btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Btn.Click
System.Windows.Forms.MessageBox.Show("Hello World !!!")
End Sub
End Class
Public Class DroleDeCombo
Inherits System.Windows.Forms.Control
Public WithEvents PnlForm As New System.Windows.Forms.Form
Dim ClientBounds As System.Drawing.Rectangle
Dim DropDownButtonBounds As System.Drawing.Rectangle
Dim DropDrownState As System.Windows.Forms.ButtonState
Dim FormSize As System.Drawing.Size
Public Sub New()
MyBase.BackColor = System.Drawing.Color.White
MyClass.PnlForm.FormBorderStyle = FormBorderStyle.None
MyClass.PnlForm.BackColor = System.Drawing.Color.White
MyClass.PnlForm.StartPosition = FormStartPosition.Manual
Call CalcSize()
End Sub
Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
Call CalcSize()
MyBase.OnResize(e)
End Sub
Private Sub CalcSize()
MyClass.ClientBounds = New System.Drawing.Rectangle(0, 0, MyBase.ClientRectangle.Width - 1, MyBase.ClientRectangle.Height - 1)
MyClass.FormSize = New System.Drawing.Size(MyClass.ClientBounds.Width, 200) '// Taille au pif, mettre une prop. pour la régler
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
System.Windows.Forms.ControlPaint.DrawVisualStyleBorder(e.Graphics, MyClass.ClientBounds)
System.Windows.Forms.ControlPaint.DrawComboButton(e.Graphics, MyClass.DropDownButtonBounds, MyClass.DropDrownState)
MyBase.OnPaint(e)
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
If DropDownButtonBounds.Contains(e.Location) Then
MyClass.DropDrownState = ButtonState.Pushed
MyBase.Invalidate(DropDownButtonBounds)
MyClass.PnlForm.Location = New System.Drawing.Point(MyBase.RectangleToScreen(MyClass.ClientBounds).Left, MyBase.RectangleToScreen(MyClass.ClientBounds).Bottom)
MyClass.PnlForm.Show()
End If
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
If DropDownButtonBounds.Contains(e.Location) Then
MyClass.DropDrownState = ButtonState.Normal
MyBase.Invalidate(DropDownButtonBounds)
End If
MyBase.OnMouseUp(e)
End Sub
Private Sub PnlForm_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PnlForm.MouseLeave
If MyClass.PnlForm.ClientRectangle.Contains(Windows.Forms.Cursor.Position) = False Then
DropDrownState = ButtonState.Normal
MyBase.Invalidate(DropDownButtonBounds)
MyClass.PnlForm.Hide()
End If
End Sub
Private Sub PnlForm_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PnlForm.Paint
System.Windows.Forms.ControlPaint.DrawVisualStyleBorder(e.Graphics, New System.Drawing.Rectangle(0, -1, MyClass.PnlForm.ClientRectangle.Width - 1, MyClass.PnlForm.ClientRectangle.Height))
End Sub
Donc, ce code très bref et mal fait, devrait faire le principale de ce que tu veut faire (mise à part les éventuelles erreurs. (Pas de design xp, taille de la zone ...)
Vois déjà ca. Si ca te convient, j'essaierais de l'améliorer. (Dans quelques jours car je suis débordé avec le travail).
Kenji
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.