Ohne Zweifel gehört das sevDataGrid durch seine enorme Flexibilität zu den besten Datagrids, die es für VB gibt. Doch genau wie bei den meisten anderen Grids fehlt auch hier die Möglichkeit, die Spalten auf die optimale Breite einzustellen. Doch wie lässt sich das Realisieren? Um das zu bewerkstelligen, müssen ein paar Dinge berücksichtigt werden:
Hier die Routine. Fügen Sie den nachfolgenden Code in ein Modul ein: Public Sub AutoColSevGrid(oForm As Form, oGrid As sevDataGrid.Grid, _ Optional WithColHeaders 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 oGrid ' Prüfen, ob es Zeilen und Spalten ' zum Einstellen gibt... If .Rows < 1 Or .Cols < 1 Then Exit Sub ' Eigenschaften der Form und Grid ' in Variablen retten Screen.MousePointer = 11 Set OldFont = New StdFont OldFont = oForm.Font Set oForm.Font = .Font ReDim xColValue(1 To .Cols) ReDim xColHeaderValue(1 To .Cols) .LockUpdate True ' Erst die Schriftbreite der ColHeaders ermitteln ' und in das Array übertragen If WithColHeaders Then For xCol = 1 To .Cols xColHeaderValue(xCol) = oForm.TextWidth(.Columns(xCol).Caption) If .AutoSort And .ShowSortSymbols Then _ xColHeaderValue(xCol) = xColHeaderValue(xCol) + 250 If .Columns(xCol).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 .Cols AktColWidth = oForm.TextWidth(.Text(yRow, xCol)) If AktColWidth > xColValue(xCol) Then _ xColValue(xCol) = AktColWidth Next xCol Next yRow ' Jetzt die Spaltenbreite aus dem Array Einstellen For xCol = 1 To .Cols If xColHeaderValue(xCol) > xColValue(xCol) Then _ xColValue(xCol) = xColHeaderValue(xCol) .Columns(xCol).Width = xColValue(xCol) + 100 Next xCol ' Formparameter zurücksetzen Set oForm.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 Grid befindet: ' Spaltenheader berücksichtigen AutoColSevGrid Me, Grid1 Oder: ' Spaltenheader nicht berücksichtigen AutoColSevGrid Me, Grid1, False Hinweis: Die Geschwindigkeit der Funktion ist Abhängig von der Anzahl der Spalten und Zeilen. Auf meinem Testrechner (Pentium IV, 1.4 GHz) benötigt eine Tabelle mit 15 Spalten und knapp 4000 Records ca. 3 Sekunden. Die Funktion überprüft nicht, ob in den einzelnen Zellen ein Icon vorhanden ist. Ich habe aus Performance-Gründen bewusst darauf verzichtet. Dieser Tipp wurde bereits 14.926 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |