| |
Fragen & Antworten rund um sev-KomponentenSpaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: JoSa | Datum: 07.03.16 14:33 |
| Hallo Dieter,
ich muss nochmal nerven...
Gibt es eine einfache Möglichkeit die Spaltenbreite automatisch anzupassen, so dass auch die Spaltenüberschrift mit einbezogen wird? Das ist mit DoColumnAutoSize ja nicht der Fall soweit ich gesehen habe.
Danke! | |
Re: Spaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: JoSa | Datum: 07.03.16 14:37 |
| Du bist echt so unglaublich schnell mit dem Antworten - Super!
Über die MinWidth-Eigenschaft habe ich auch schon nachgedacht, nur ist es schwierig hier die richtige Breite zu finden.
Wenn die Überschrift "llll" lautet ist das je nach Schriftart kürzer als "OOOO" sodass ich hier nicht die Anzahl der Buchstaben als Maßstab nehmen kann. Oder habe ich hier einen Denkfehler?
Beitrag wurde zuletzt am 07.03.16 um 14:38:31 editiert. | |
Re: Spaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: Franki | Datum: 08.03.16 02:45 |
| Hallo,
warum machst du dir diesen Stress?
Das Optimum kannst du sowieso nicht erreichen, da für die Anzeige in Windows ganz allgemein ja auch die Einstellungen des Users eine wichtige Rolle spielen.
Also was hat der User für eine Auflösung, was für eine (benutzerdefinierte) Schriftgröße usw. usw. eingestellt, das kannst du nicht wissen.
Ich mache das mit dem Grid so, dass ich im Code einigermassen vernünftige Werte vorgebe, aber der User die Spaltenbreiten (und auch Reihenforlge) selbst seinen Bedürfnissen nach einstellen kann. Die werden beim Beenden des Formulars gespeichert und beim nächsten Aufruf wieder eingelesen.
So bist du völlig unabhängig von den Vorlieben des Users.
Also wie breit jetzt ein I, X oder O ist spielt keine Rolle.
Und spätestens dann wenn du das Grid auf eine dir unbekannte DB des Users los lässt wo du die Spaltenüberschriften nicht kennst, kannst du sowieso nichts machen mit festen Breiten der Spalten.
Der einfachste Weg ist, dem User die Möglichkeit zu geben das selbst zu konfigurieren.
Gruß
Frank
Gruß
Frank | |
Re: Spaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: JoSa | Datum: 08.03.16 07:06 |
| Hallo Frank, danke für deine Antwort.
Wir veröffentlichen meine Anwendung per Citrix XenApp und da hat der User keine wirkliche Möglichkeit irgendwas an den Schriftarten einzustellen.
Natürlich hast du in gewisser Weise schon Recht. Da muss man eben einen guten Mittelweg finden. | |
Re: Spaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: Manfred X | Datum: 08.03.16 14:45 |
| Hallo!
Bei Proportionalschriften kannst Du durchzählen,
wie viele Buchstaben in einer Spalten-Überschrift
jeweils vorliegen, die breit bzw. schmal dargestellt werden.
Aus der Summation dieser Breiten-Faktoren über alle
Zeichen läßt sich eine "halbwegs" geeignete Spaltenbreite
ermitteln. | |
Re: Spaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: Danny Grobe | Datum: 21.04.16 10:53 |
| Hier unser Quellcode für das Problem:
' wenn keine Spalte angebeben, werden die Spalten anhand ihres Inhaltes und der
' Überschrift angepasst
' wenn eine Spalte oder mehrere (durch Komma getrennt) übergeben werden, dann
' wird der verbleibende
' Platz auf diese Spalten aufgeteilt; alle anderen Spalten bleiben unverändert
Public Sub sevGridSpaltenbreiteAnGridAnpassen(ByVal Grid As sevGrid, Optional _
ByVal Spalte, _
Optional ByVal _
MindestSpaltenbreite As Long = _
1000, _
Optional ByVal _
ZeilenFürSpaltenbreitenanpassung _
As Integer = 30)
Dim w As Long
Dim i As Integer
Dim j As Integer
Dim Spaltenanzahl As Integer
Dim Spalten() As String
Dim Breite As Long
Dim Key
w = 0
Grid.LockUpdate True
If Not IsMissing(Spalte) Then
Spalten = Split(Spalte, ",")
Spaltenanzahl = UBound(Spalten) + 1
For i = 1 To Grid.Cols
If Grid.Columns(i).visible Then
w = w + Grid.Columns(i).Width
End If
Next
For Each Key In Spalten
If Not Grid.Columns(Key) Is Nothing Then
If Grid.Columns(Key).visible Then
w = w - Grid.Columns(Key).Width
Else
Spaltenanzahl = Spaltenanzahl - 1
End If
End If
Next
If Grid.ScrollBars = SB_VERTICAL Or Grid.ScrollBars = SB_BOTH Or _
(Grid.ScrollBars = SB_AUTO And Grid.Rows >= Grid.ScreenRows) Then
w = w + 20 * Screen.TwipsPerPixelX
Else
w = w + 4 * Screen.TwipsPerPixelX
End If
If Grid.FixedCol Then
w = w + Grid.FixedColCount * Grid.FixedColWidth
End If
For Each Key In Split(Spalte, ",")
If Not Grid.Columns(Key) Is Nothing Then
If Grid.Columns(Key).visible Then
Breite = Int((Grid.Width - w) / Spaltenanzahl)
If Breite < MindestSpaltenbreite Then
Grid.Columns(Key).Width = MindestSpaltenbreite
Else
Grid.Columns(Key).Width = Breite
End If
w = w + Grid.Columns(Key).Width
Spaltenanzahl = Spaltenanzahl - 1
End If
End If
Next
Else
With Grid
For i = 1 To .Cols
If .Columns(i).visible Then
On Error Resume Next
w = Max(MindestSpaltenbreite, Grid.Parent.TextWidth(.Columns( _
i).Caption))
For j = 1 To Min(.Rows, IIf(ZeilenFürSpaltenbreitenanpassung = _
0, .Rows, ZeilenFürSpaltenbreitenanpassung))
w = Max(Grid.Parent.TextWidth(.Text(j, i)), w)
Next
On Error GoTo 0
.Columns(i).Width = w + 10 * Screen.TwipsPerPixelX
End If
Next
End With
End If
Grid.LockUpdate False
Grid.RefreshEx
End Sub Public Function Max(Wert1, Wert2) As Variant
If Wert1 > Wert2 Then Max = Wert1 Else Max = Wert2
End Function
Public Function Min(Wert1, Wert2) As Variant
If Wert1 > Wert2 Then min = Wert2 Else min = Wert1
End Function
Beitrag wurde zuletzt am 21.04.16 um 10:54:07 editiert. | |
Re: Spaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: JoSa | Datum: 27.04.16 14:01 |
| Danke für deinen Beitrag!
Ich wollte deinen Code testen, leider kennt er den Parameter "Width" des Grids nicht. Ebenso Grid.Parent scheint er nicht zu kennen.
Zur Anmerkung: Ich nutze Microsoft Access 2010
Grüße! | |
Re: Spaltenbreite mindestens so breit wie Spaltenüberschrift | | | Autor: Danny Grobe | Datum: 27.04.16 14:05 |
| Ja, das kann sein. Der Quellcode ist für VB6. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
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.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|