141 lines
5.7 KiB
VB.net
141 lines
5.7 KiB
VB.net
Imports System.Collections.Generic
|
|
Imports System.Linq
|
|
Imports System.Text
|
|
Imports System.Drawing
|
|
Imports System.Drawing.Imaging
|
|
Imports DevExpress.XtraGrid.Views.Base
|
|
Imports DevExpress.XtraGrid.Blending
|
|
Imports DevExpress.XtraGrid
|
|
Imports DevExpress.XtraGrid.Views.Grid
|
|
Imports DevExpress.XtraGrid.Views.Grid.ViewInfo
|
|
|
|
Public Class ClassBackgroundHelper
|
|
Private _blendingComponent As XtraGridBlending
|
|
Private _originalImage As Bitmap
|
|
Private _grid As GridView
|
|
Private _pictureAlignment As ContentAlignment
|
|
|
|
Public Property Image() As Bitmap
|
|
Get
|
|
Return _originalImage
|
|
End Get
|
|
Set(value As Bitmap)
|
|
_originalImage = value
|
|
GenerateBackgroundImage()
|
|
End Set
|
|
End Property
|
|
Public Property PictureAlignment() As ContentAlignment
|
|
Get
|
|
Return _pictureAlignment
|
|
End Get
|
|
Set(value As ContentAlignment)
|
|
_pictureAlignment = value
|
|
GenerateBackgroundImage()
|
|
End Set
|
|
End Property
|
|
Public Sub New(grid As GridView, image As Bitmap, Optional alignment As ContentAlignment = ContentAlignment.BottomRight)
|
|
_grid = grid
|
|
InitializingBlendingComponent()
|
|
_originalImage = image
|
|
_grid.GridControl.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
|
|
PictureAlignment = alignment
|
|
|
|
AddHandler _grid.GridControl.Resize, AddressOf GridControl_Resize
|
|
GenerateBackgroundImage()
|
|
End Sub
|
|
|
|
Private Sub GridControl_Resize(sender As Object, e As EventArgs)
|
|
GenerateBackgroundImage()
|
|
End Sub
|
|
|
|
Public Shared Function SetImgageOpacity(ByVal imgPic As Image, ByVal imgOpac As Double) As Image
|
|
|
|
Dim bmpPic As New Bitmap(imgPic.Width, imgPic.Height)
|
|
Dim gfxPic As Graphics = Graphics.FromImage(bmpPic)
|
|
Dim cmxPic As New ColorMatrix()
|
|
Dim iaPic As New ImageAttributes()
|
|
|
|
cmxPic.Matrix33 = imgOpac
|
|
|
|
iaPic.SetColorMatrix(cmxPic, ColorMatrixFlag.[Default], ColorAdjustType.Bitmap)
|
|
gfxPic.DrawImage(imgPic, New Rectangle(0, 0, bmpPic.Width, bmpPic.Height), 0, 0, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, iaPic)
|
|
|
|
gfxPic.Dispose()
|
|
iaPic.Dispose()
|
|
|
|
Return bmpPic
|
|
|
|
End Function
|
|
|
|
Private Sub GenerateBackgroundImage()
|
|
If IsNothing(_originalImage) Then
|
|
Exit Sub
|
|
End If
|
|
Try
|
|
Dim gvInfo As GridViewInfo = TryCast(_grid.GetViewInfo(), GridViewInfo)
|
|
Dim _processedImage As New Bitmap(gvInfo.ViewRects.Client.Width + 1, gvInfo.ViewRects.Client.Height + 1)
|
|
Using g As Graphics = Graphics.FromImage(_processedImage)
|
|
Dim p As Point = CalculateImageLocation(_originalImage.Width, _originalImage.Height, gvInfo, _pictureAlignment)
|
|
Dim transparentImage As Bitmap = SetImgageOpacity(_originalImage, 0.5)
|
|
g.DrawImage(transparentImage, p)
|
|
g.Save()
|
|
End Using
|
|
_grid.GridControl.BackgroundImage = _processedImage
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in GenerateBackgroundImage: " & ex.Message)
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
Private Function CalculateImageLocation(imageWidth As Integer, imageHeight As Integer, gvInfo As GridViewInfo, alignment As ContentAlignment) As Point
|
|
Try
|
|
Dim location As Point = Point.Empty
|
|
Dim rect As Rectangle = gvInfo.ViewRects.Rows
|
|
Dim indicatorWidth As Integer = gvInfo.ViewRects.IndicatorWidth
|
|
Dim vScrollSize As Integer = If(gvInfo.VScrollBarPresence = ScrollBarPresence.Visible, 20, 0)
|
|
Dim hSctollSize As Integer = If(gvInfo.HScrollBarPresence = ScrollBarPresence.Visible, 20, 0)
|
|
|
|
Select Case alignment
|
|
Case ContentAlignment.BottomCenter
|
|
location.Offset((rect.Width / 2) - (imageWidth / 2), rect.Bottom - imageHeight - hSctollSize)
|
|
Exit Select
|
|
Case ContentAlignment.BottomLeft
|
|
location.Offset(indicatorWidth, rect.Bottom - imageHeight - hSctollSize)
|
|
Exit Select
|
|
Case ContentAlignment.BottomRight
|
|
location.Offset(rect.Right - imageWidth - vScrollSize, rect.Bottom - imageHeight - hSctollSize)
|
|
Exit Select
|
|
Case ContentAlignment.MiddleCenter
|
|
location.Offset((rect.Width / 2) - (imageWidth / 2), (rect.Height / 2) - (imageHeight / 2))
|
|
Exit Select
|
|
Case ContentAlignment.MiddleLeft
|
|
location.Offset(indicatorWidth, (rect.Height / 2) - (imageHeight / 2))
|
|
Exit Select
|
|
Case ContentAlignment.MiddleRight
|
|
location.Offset(rect.Width - imageWidth - vScrollSize, (rect.Height / 2) - (imageHeight / 2))
|
|
Exit Select
|
|
Case ContentAlignment.TopCenter
|
|
location.Offset((rect.Width / 2) - (imageWidth / 2), rect.Top)
|
|
Exit Select
|
|
Case ContentAlignment.TopLeft
|
|
location.Offset(indicatorWidth, rect.Top)
|
|
Exit Select
|
|
Case ContentAlignment.TopRight
|
|
location.Offset(rect.Right - imageWidth - vScrollSize, rect.Top)
|
|
Exit Select
|
|
Case Else
|
|
Exit Select
|
|
End Select
|
|
Return location
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in CalculateImageLocation: " & ex.Message)
|
|
Return Nothing
|
|
End Try
|
|
|
|
End Function
|
|
|
|
Private Sub InitializingBlendingComponent()
|
|
_blendingComponent = New XtraGridBlending()
|
|
_blendingComponent.GridControl = _grid.GridControl
|
|
End Sub
|
|
End Class |