vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · MSFlexGrid/DataGrid   |   VB-Versionen: VB603.09.02
Zellenhöhe in MSHFlexgrid anpassen

Eine Funktion, die automatisch die notwendige Zellenhöhe im MSHFlexgrid bei WordWrap berechnet.

Autor:   Michael BeckerBewertung:     [ Jetzt bewerten ]Views:  19.169 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Manche Datenbankfelder beinhalten Memos, die eine unbestimmte Anzahl an Buchstaben besitzen. Lädt man solch ein DB-Feld in ein MSHFlexGrid, dann wird bei aktivem WORD-WRAP zwar der Text umgebrochen, aber die Zeilenhöhe bleibt bestehen (man sieht nur die erste Zeile)

Stellt man nun die RowHeight-Eigenschaft auf einen festen Wert, dann bringt das nicht sehr viel !!!

Man kann zwar AllowUserResizing auf 2 (Zeilen) stellen, dies hat nur den Nachteil, dass der Benutzer viel hin und herschieben muß, um beispielsweise einen Text zu suchen!

Hier die Abhilfe ....

Wir benötigen:

  1. Form1
  2. 1 x das MSHFLEXGRID1 (Komponente --> Hierachical Flex Grid)
  3. und Text

Hier die Funktion:

Public Function MSH_CELLHOEHE( _
  ByVal Textbaustein As String, _
  Buchstaben As Integer, _
  Cellhoehe As Integer) As Long
 
  Dim zz As Long
 
  zz = Len(Textbaustein)
  If zz > Buchstaben Then
    zz = Int(Len(Textbaustein) / Buchstaben) + 1
    MSH_CELLHOEHE = Cellhoehe * zz
  Else
    MSH_CELLHOEHE = Cellhoehe
  End If
End Function

Beschreibung der Funktion:

Die Funktion benötigt:

  • Textbaustein (dies ist der Text der in dem MSHFlexgrid erscheint)
  • Buchstaben (dies ist die Anzahl der Buchstaben, die nebeneinander in eine Zeile passen)
  • Cellhoehe (die Standard-Zellhöhe wenn nur eine Zeile existiert)
Der Rückgabewert der Funktion besteht aus dem neuen RowHeight-Wert.

Aufruf der Funktion:

' Im nachfolgenden Beispiel werden eine ID und 4 
' Textfelder (MEMO) aus der Datenbank geladen.
' Das Flexgrid hat 5 Cols. Die Cellheight setze ich
' mit 285 und die Anzahl aller Buchstaben die in
' eine Zelle nebeneinander passen setze ich auf 33 
' (entspricht in etwa eine Colwidth von 2700)
 
Public Sub MSHFLEXGRID1_FUELLEN()
  Dim rs As New ADODB.Recordset
  Dim ff as integer   ' Rowzaehler
  Dim zellmax as long ' Prüft, welche Row die höchste Cell hat
 
  ff = 1
 
  ' Recordset erstellen
  rs.Open "SELECT ID, Text1, Text2, Text3, Text4 " & _
    " FROM tblIrgendeineTabelle ORDER BY ID", _
    adocn, adOpenForwardOnly, adLockReadOnly
 
  If rs.State = adStateOpen Then
    Do Until rs.EOF
      With Form1.MSHFlexGrid1
        .Rows = ff + 1
        .Row = ff
        .Col = 0: .Text = rs(0)      ' ID
 
        .Col = 1: .Text = nz(rs(1))  ' TEXT 1
        .RowHeight(ff) = MSH_CELLHOEHE(nz(rs(1)), 33, 285)
        zellmax = MSH_CELLHOEHE(nz(rs(1)), 33, 285)
 
        .Col = 2: .Text = nz(rs(2))  ' TEXT 2
        If MSH_CELLHOEHE(nz(rs(2)), 33, 285) >= zellmax Then
          zellmax = MSH_CELLHOEHE(nz(rs(2)), 33, 285)
          .RowHeight(ff) = MSH_CELLHOEHE(nz(rs(2)), 33, 285)
        End If
 
        .Col = 3: .Text = nz(rs(3))  ' TEXT 3
        If MSH_CELLHOEHE(nz(rs(3)), 33, 285) >= zellmax Then
          zellmax = MSH_CELLHOEHE(nz(rs(3)), 33, 285)
          .RowHeight(ff) = MSH_CELLHOEHE(nz(rs(3)), 33, 285)
        End If
 
        .Col = 4: .Text = nz(rs(4))  ' TEXT 4
        If MSH_CELLHOEHE(nz(rs(4)), 33, 285) >= zellmax Then
          zellmax = MSH_CELLHOEHE(nz(rs(4)), 33, 285)
          .RowHeight(ff) = MSH_CELLHOEHE(nz(rs(4)), 33, 285)
        End If
        zellmax = 0
        ff = ff + 1
        rs.MoveNext
      End With
    Loop
  End If
  rs.Close
  Set rs = Nothing
End Sub
Private Function nz(ByVal vValue As Variant) As Variant
  ' Prüft, ob ein Feld den Wert NULL hat, 
  ' um so den unliebsamen Fehler 94 zu vermeiden
  If IsNull(vValue) Then
    nz = ""
  Else
    nz = vValue
  End If
End Function

Dieser Tipp wurde bereits 19.169 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht 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