vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
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:  13.428 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    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 13.428 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-2015 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