AD
Administrator
Syncfusion Team
June 29, 2003 11:26 AM UTC
The button is drawn using the ControlPaint. DrawButton routine (or using WinXP Themed draw button code) and that will always have the same system color used for buttons.
In order to change the color you could instead provide your own drawing logic by handling the DrawCellButtonBackground event.
Here is an example: (from OnDrawCellButtonBackground classref of Essential Grid 1.6 version)
[C#]
public static void Draw3dFrame(Graphics g, int x0, int y0, int x1, int y1, int w, Color rgbTopLeft, Color rgbBottomRight)
{
Rectangle rc;
for (int i = 0; i != w; i++)
{
// Top
Brush brTL = new SolidBrush(rgbTopLeft);
rc = Rectangle.FromLTRB(x0, y0, x1, y0+1);
g.FillRectangle(brTL, rc);
// Left
rc = Rectangle.FromLTRB(x0, y0, x0+1, y1);
g.FillRectangle(brTL, rc);
brTL.Dispose();
Brush brBR = new SolidBrush(rgbBottomRight);
// Bottom
rc = Rectangle.FromLTRB(x0, y1, x1+1, y1+1);
g.FillRectangle(brBR, rc);
// Right
rc = Rectangle.FromLTRB(x1, y0, x1+1, y1);
g.FillRectangle(brBR, rc);
brBR.Dispose();
if (i != w-1)
{
x0++;
y0++;
x1--;
y1--;
}
}
}
protected override void OnDrawCellButtonBackground(GridCellButton button, Graphics g, Rectangle rect, ButtonState buttonState, GridStyleInfo style)
{
bool drawPressed = (buttonState & ButtonState.Pushed) != 0;
Color hilight = SystemColors.ControlLightLight;
Color shadow = SystemColors.ControlDarkDark;
if (!drawPressed)
{
GridPaint.Draw3dFrame(g, rect.Left, rect.Top, rect.Right-1, rect.Bottom-1, 1,
hilight, shadow);
}
else
{
Brush br = new SolidBrush(shadow);
g.FillRectangle(br, Rectangle.FromLTRB(rect.Left, rect.Bottom-1, rect.Right-1, rect.Bottom));
g.FillRectangle(br, Rectangle.FromLTRB(rect.Right-1, rect.Top, rect.Right, rect.Bottom));
br.Dispose();
}
}
[VB]
Public Shared Sub Draw3dFrame(g As Graphics, x0 As Integer, y0 As Integer, x1 As Integer, y1 As Integer, w As Integer, rgbTopLeft As Color, rgbBottomRight As Color)
Dim rc As Rectangle
Dim i As Integer
While i <> w
' Top
Dim brTL = New SolidBrush(rgbTopLeft)
rc = Rectangle.FromLTRB(x0, y0, x1, y0 + 1)
g.FillRectangle(brTL, rc)
' Left
rc = Rectangle.FromLTRB(x0, y0, x0 + 1, y1)
g.FillRectangle(brTL, rc)
brTL.Dispose()
Dim brBR = New SolidBrush(rgbBottomRight)
' Bottom
rc = Rectangle.FromLTRB(x0, y1, x1 + 1, y1 + 1)
g.FillRectangle(brBR, rc)
' Right
rc = Rectangle.FromLTRB(x1, y0, x1 + 1, y1)
g.FillRectangle(brBR, rc)
brBR.Dispose()
If i <> w - 1 Then
x0 += 1
y0 += 1
x1 -= 1
y1 -= 1
End If
i += 1
End While
End Sub 'Draw3dFrame
Protected Overrides Sub OnDrawCellButtonBackground(button As GridCellButton, g As Graphics, rect As Rectangle, buttonState As ButtonState, style As GridStyleInfo)
Dim drawPressed As Boolean = (buttonState And ButtonState.Pushed) <> 0
Dim hilight As Color = SystemColors.ControlLightLight
Dim shadow As Color = SystemColors.ControlDarkDark
If Not drawPressed Then
GridPaint.Draw3dFrame(g, rect.Left, rect.Top, rect.Right - 1, rect.Bottom - 1, 1, hilight, shadow)
Else
Dim br = New SolidBrush(shadow)
g.FillRectangle(br, Rectangle.FromLTRB(rect.Left, rect.Bottom - 1, rect.Right - 1, rect.Bottom))
g.FillRectangle(br, Rectangle.FromLTRB(rect.Right - 1, rect.Top, rect.Right, rect.Bottom))
br.Dispose()
End If
End Sub 'OnDrawCellButtonBackground
Stefan
FA
fabrizio
June 30, 2003 08:46 AM UTC
Thanks Stefan.
I try but the example is not directly usable.
I define the following event :
Private Sub MyG_DrawCellButtonBackground(ByVal sender As Object, ByVal e As Syncfusion.Windows.Forms.Grid.GridDrawCellButtonBackgroundEventArgs) Handles GridControl1.DrawCellButtonBackground
Dim drawPressed As Boolean = (e.ButtonState And e.ButtonState.Pushed) <> 0
Dim hilight As Color = SystemColors.ControlLightLight
Dim shadow As Color = SystemColors.ControlDarkDark
If Not drawPressed Then
Draw3dFrame(e.Graphics, e.Button.Bounds.Left, e.Button.Bounds.Top, e.Button.Bounds.Right - 1, e.Button.Bounds.Bottom - 1, 1, hilight, shadow)
Else
Dim br = New SolidBrush(shadow)
e.Graphics.FillRectangle(br, Rectangle.FromLTRB(e.Button.Bounds.Left, e.Button.Bounds.Bottom - 1, e.Button.Bounds.Right - 1, e.Button.Bounds.Bottom))
e.Graphics.FillRectangle(br, Rectangle.FromLTRB(e.Button.Bounds.Right - 1, e.Button.Bounds.Top, e.Button.Bounds.Right, e.Button.Bounds.Bottom))
br.Dispose()
End If
e.Cancel = True
End Sub
Now some grafic of buttons are modified but are no good, only partial buttons are drawing .
The sub Draw3dFrame does not fill the rectagle of botton but only the border.
In any case only forcing e.cancel = true the layout of buttons is modified.
Can You give me some more litte help?
Thanks
Fabrizio
AD
Administrator
Syncfusion Team
June 30, 2003 10:35 AM UTC
Attached is a little sample based on Stefan's code.
Is this what you need?
FA
fabrizio
June 30, 2003 11:58 AM UTC
Thanks Clay ,
but i don't see any file attached
Bye
Fabrizio
AD
Administrator
Syncfusion Team
June 30, 2003 08:42 PM UTC
it has been a long day. Sorry...
FA
Fabrizio
July 1, 2003 02:08 AM UTC
> it has been a long day. Sorry...
>
Thanks is perfect !
Every day is a to long day for me !
Bye
Fabrizio
GW
Greg Wright
March 18, 2004 01:21 PM UTC
I need to do something similar, but need to know which row the button be drawn is on, and the event args for DrawCellButtonBackground doesn''t contain the row index. Is this possible?
Thanks.
Greg
AD
Administrator
Syncfusion Team
March 18, 2004 03:48 PM UTC
Check
e.Style.CellIdentity.RowIndex
to see if that has what you need.
AD
Administrator
Syncfusion Team
September 19, 2006 11:39 PM UTC
>The button is drawn using the ControlPaint. DrawButton routine (or using WinXP Themed draw button code) and that will always have the same system color used for buttons.
>
>In order to change the color you could instead provide your own drawing logic by handling the DrawCellButtonBackground event.
>
>Here is an example: (from OnDrawCellButtonBackground classref of Essential Grid 1.6 version)
>
>[C#]
>public static void Draw3dFrame(Graphics g, int x0, int y0, int x1, int y1, int w, Color rgbTopLeft, Color rgbBottomRight)
>{
> Rectangle rc;
>
> for (int i = 0; i != w; i++)
> {
> // Top
> Brush brTL = new SolidBrush(rgbTopLeft);
> rc = Rectangle.FromLTRB(x0, y0, x1, y0+1);
> g.FillRectangle(brTL, rc);
>
> // Left
> rc = Rectangle.FromLTRB(x0, y0, x0+1, y1);
> g.FillRectangle(brTL, rc);
> brTL.Dispose();
>
> Brush brBR = new SolidBrush(rgbBottomRight);
>
> // Bottom
> rc = Rectangle.FromLTRB(x0, y1, x1+1, y1+1);
> g.FillRectangle(brBR, rc);
>
> // Right
> rc = Rectangle.FromLTRB(x1, y0, x1+1, y1);
> g.FillRectangle(brBR, rc);
> brBR.Dispose();
>
> if (i != w-1)
> {
> x0++;
> y0++;
> x1--;
> y1--;
> }
> }
>}
>protected override void OnDrawCellButtonBackground(GridCellButton button, Graphics g, Rectangle rect, ButtonState buttonState, GridStyleInfo style)
>{
> bool drawPressed = (buttonState & ButtonState.Pushed) != 0;
> Color hilight = SystemColors.ControlLightLight;
> Color shadow = SystemColors.ControlDarkDark;
> if (!drawPressed)
> {
> GridPaint.Draw3dFrame(g, rect.Left, rect.Top, rect.Right-1, rect.Bottom-1, 1,
> hilight, shadow);
> }
> else
> {
> Brush br = new SolidBrush(shadow);
> g.FillRectangle(br, Rectangle.FromLTRB(rect.Left, rect.Bottom-1, rect.Right-1, rect.Bottom));
> g.FillRectangle(br, Rectangle.FromLTRB(rect.Right-1, rect.Top, rect.Right, rect.Bottom));
> br.Dispose();
> }
>}
>
>[VB]
>
>Public Shared Sub Draw3dFrame(g As Graphics, x0 As Integer, y0 As Integer, x1 As Integer, y1 As Integer, w As Integer, rgbTopLeft As Color, rgbBottomRight As Color)
> Dim rc As Rectangle
>
> Dim i As Integer
>
> While i <> w
> '' Top
> Dim brTL = New SolidBrush(rgbTopLeft)
> rc = Rectangle.FromLTRB(x0, y0, x1, y0 + 1)
> g.FillRectangle(brTL, rc)
>
> '' Left
> rc = Rectangle.FromLTRB(x0, y0, x0 + 1, y1)
> g.FillRectangle(brTL, rc)
> brTL.Dispose()
>
> Dim brBR = New SolidBrush(rgbBottomRight)
>
> '' Bottom
> rc = Rectangle.FromLTRB(x0, y1, x1 + 1, y1 + 1)
> g.FillRectangle(brBR, rc)
>
> '' Right
> rc = Rectangle.FromLTRB(x1, y0, x1 + 1, y1)
> g.FillRectangle(brBR, rc)
> brBR.Dispose()
>
> If i <> w - 1 Then
> x0 += 1
> y0 += 1
> x1 -= 1
> y1 -= 1
> End If
> i += 1
> End While
>End Sub ''Draw3dFrame
>
>Protected Overrides Sub OnDrawCellButtonBackground(button As GridCellButton, g As Graphics, rect As Rectangle, buttonState As ButtonState, style As GridStyleInfo)
> Dim drawPressed As Boolean = (buttonState And ButtonState.Pushed) <> 0
> Dim hilight As Color = SystemColors.ControlLightLight
> Dim shadow As Color = SystemColors.ControlDarkDark
> If Not drawPressed Then
> GridPaint.Draw3dFrame(g, rect.Left, rect.Top, rect.Right - 1, rect.Bottom - 1, 1, hilight, shadow)
> Else
> Dim br = New SolidBrush(shadow)
> g.FillRectangle(br, Rectangle.FromLTRB(rect.Left, rect.Bottom - 1, rect.Right - 1, rect.Bottom))
> g.FillRectangle(br, Rectangle.FromLTRB(rect.Right - 1, rect.Top, rect.Right, rect.Bottom))
> br.Dispose()
> End If
>End Sub ''OnDrawCellButtonBackground
>
>
>Stefan