|
|
|
AutoSize für das sevDataGrid Teil II Erweiterung des Tipps "Optimale Spaltenbreite für das sevDataGrid v1.0 einstellen"
|
Produktversionen: | sevDataGrid 1.0 |
VB-Versionen: | VB 5/6 |
Autor: | Roland Wutzke |
Datum: | 08.06.04 |
Views: | 7300 |
|
|
|
  |
|
In dem Tipp AutoSize für das sevDataGrid haben
wir Ihnen bereits gezeigt, wie sich alle Spalten des sevDataGrids automatisch auf die optimale Breite einstellen lassen.
Mit den heutigen Tipp möchten wir Ihnen eine Erweiterung auch auf einzelne, bzw. ein Set von Spalten vorstellen.
Legen Sie ein neues Modul an und benennen Sie es modAutoSevGrid. Fügen Sie den nachfolgenden Code in das Modul ein.
' *****************************************************************
' *
' * Modul AutoSevGrid
' * =================
' *
' * Sub AutoColSevGrid: Es werden alle Spalten des sevDataGrids
' * auf einmal eingestellt.
' *
' * Sub MultiColSevGrid: Es kann eine einzelne bzw. ein Set von
' * Spalten eingestellt werden.
' *
' *
' * Juni 2004, www.vb-power.net und Roland Wutzke
' *
' *****************************************************************
Option Explicit
' Einstellen aller Spalten des sevDataGrids
Public Sub AutoColSevGrid(oForm As Form, oGrid As sevDataGrid.Grid, _
Optional WithColHeaders As Boolean = True)
Dim IntArray() As Integer
Dim x As Long
With oGrid
' Prüfen, ob es Zeilen und Spalten
' zum Einstellen gibt...
If .Rows < 1 Or .Cols < 1 Then Exit Sub
' Internes Array füllen
ReDim IntArray(.Cols - 1)
For x = 0 To UBound(IntArray)
IntArray(x) = x + 1
Next x
End With
' Grid einstellen
SetColSevGrid oForm, oGrid, IntArray, WithColHeaders
End Sub
' Einstellen einzelner bzw. Sets von Spalten des sevDataGrids
Public Sub MultiColSevGrid(oForm As Form, oGrid As sevDataGrid.Grid, _
ByVal ColumnArray As Variant, _
Optional WithColHeaders As Boolean = True)
' Prüfen, ob ein Array übergeben wurde
If Not IsArray(ColumnArray) Then Exit Sub
With oGrid
' Prüfen, ob es Zeilen und Spalten
' zum Einstellen gibt...
If .Rows < 1 Or .Cols < 1 Then Exit Sub
End With
' Grid einstellen
SetColSevGrid oForm, oGrid, ColumnArray, WithColHeaders
End Sub
' Interne Prozedur
Private Sub SetColSevGrid(pForm As Form, pGrid As sevDataGrid.Grid, _
ByVal pColumnArray As Variant, _
Optional pWithColHeaders As Boolean = True)
Dim xCol As Long
Dim yRow As Long
Dim xColValue() As Long
Dim xColHeaderValue() As Long
Dim AktColWidth As Long
Dim OldFont As StdFont
With pGrid
' Eigenschaften der Form und Grid
' in Variablen retten
On Error Resume Next
Screen.MousePointer = 11
Set OldFont = New StdFont
OldFont = pForm.Font
Set pForm.Font = .Font
ReDim xColValue(1 To UBound(pColumnArray) + 1)
ReDim xColHeaderValue(1 To UBound(pColumnArray) + 1)
.LockUpdate True
' Erst die Schriftbreite der ColHeaders ermitteln
' und in das Array übertragen
If pWithColHeaders Then
For xCol = 1 To (UBound(pColumnArray) + 1)
xColHeaderValue(xCol) = _
pForm.TextWidth(.Columns(pColumnArray(xCol - 1)).Caption)
If .AutoSort And .ShowSortSymbols Then _
xColHeaderValue(xCol) = xColHeaderValue(xCol) + 250
If .Columns(pColumnArray(xCol - 1)).Image > 0 Then _
xColValue(xCol) = xColValue(xCol) + 250
Next xCol
End If
' Jetzt die Schriftbreite der einzelnen Zellen
' ermitteln und in das Array übertragen. Dabei
' wird überprüft, ob die aktuelle Breite größer
' ist, als der bisher größte Wert im Array, und
' ggf. ins Array übertragen.
For yRow = 1 To .Rows
For xCol = 1 To (UBound(pColumnArray) + 1)
AktColWidth = pForm.TextWidth(.Text(yRow, pColumnArray(xCol - 1)))
If AktColWidth > xColValue(xCol) Then _
xColValue(xCol) = AktColWidth
Next xCol
Next yRow
' Jetzt die Spaltenbreite aus dem Array Einstellen
For xCol = 1 To (UBound(pColumnArray) + 1)
If xColHeaderValue(xCol) > xColValue(xCol) Then _
xColValue(xCol) = xColHeaderValue(xCol)
.Columns(pColumnArray(xCol - 1)).Width = xColValue(xCol) + 100
Next xCol
' Formparameter zurücksetzen
Set pForm.Font = OldFont
Set OldFont = Nothing
Screen.MousePointer = 0
' Grid neu zeichnen
.LockUpdate False
.Refresh
End With
End Sub
Aufrufbeispiel aus der Form, auf der sich Ihr sevDataGrid befindet:
' Automatische Spaltenbreite aller Spalten
AutoColSevGrid Me, Grid1
Oder:
' Automatische Spaltenbreite für ein Set von Spalten.
' In diesem Beispiel wird die Spalte 1,3,4 eingestellt
Dim colArray As Variant
colArray = Array(1, 3, 4)
MultiColSevGrid Me, Grid1, colArray
Viel Spass...
Zurück zur Übersichtsseite
|