Buongiorno

Ho creato un report con CrystalReports per stampare delle etichette. I dati da stampare si trovano su un db di SQLServer, quindi l'origine dati del report è una StoredProcedure.
I campi che mi interessa stampare sono:
- TitoloPostale
- Nominativo
- Qualifica
- Indirizzo

I controlli presenti sul report sono dei Field collegati direttamente alla procedura origine dei dati e sono posizionati uno sotto l'altro:
codice:
____________________
|                  |
|  TitoloPostale   |
|  Nominativo      |
|  Qualifica       |   
|  Indirizzo       |    
|                  |
____________________
Ognuno di questi controlli può aumentare verticalmente e può non essere presente qualora il valore sia uguale a stringa vuota.

Per gestire il Top di ognuno di questi controlli ho quindi creato una procedura che per ogni campo controlla se questi sia stringa vuota o meno; qualora lo sia il campo stesso deve avere proprietà .Suppress pari a True altrimenti uguale a False. Ho quindi implementato anche il calcolo del Top da assegnare ad ogni campo.
Il corpo del report si chiama "Etichetta";
Riporto qui di seguito la Sub:
codice:
'nel report

Private Sub Etichetta_Format(ByVal pFormattingInfo As Object)
    PosizionaControlli
End Sub

Sub PosizionaControlli()

    Dim sngTop As Single
    Dim altezza As Integer
        
    sngTop = TitoloPostale.Top
        
    If TitoloPostale.Value = "" Then
        TitoloPostale.Suppress = True
    Else
        TitoloPostale.Suppress = False
        altezza = fnAltezzaH(TitoloPostale.Value)
        sngTop = sngTop + (altezza * TitoloPostale.Height)
    End If

    If Nominativo.Value = "" Then
        Nominativo.Suppress = True
    Else
        Nominativo.Suppress = False
        Nominativo.Top = sngTop
        altezza = fnAltezzaH(Nominativo.Value)
        sngTop = sngTop + (altezza * Nominativo.Height)
    End If
        
    If Qualifica.Value = "" Then
        Qualifica.Suppress = True
    Else
        Qualifica.Top = sngTop
        altezza = fnAltezzaH(Qualifica.Value)
        sngTop = sngTop + (altezza * Qualifica.Height)
    End If
           
    If Indirizzo.Value = "" Then
        Indirizzo.Suppress = True
    Else
        Indirizzo.Suppress = False
        Indirizzo.Top = sngTop
    End If
          
End Sub

'nel modulo
'Dichiarazioni
Public Type POINTAPI
    X As Long
    Y As Long
End Type

Public Declare Function GetWindowDC _
      Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetTextExtentPoint32 _
      Lib "gdi32"  Alias "GetTextExtentPoint32A" _
     (ByVal hdc As Long, ByVal lpsz As String, _
      ByVal cbString As Long, lpSize As POINTAPI) As Long

'Funzione
'*********************************************************
'Scopo:       calcola la lngLunghezza della strValore e
'                calcola le righe del controllo che
'                contiene la strValore
'Restituisce: un valore Long corrispondente all'altezza
'                della text contenente la strValore
'*********************************************************
Public Function fnAltezzaH(ByVal strValore As String) As Integer
    
    Dim lngMaxLunghezza As Long 

    lngMaxLunghezza = (3477 / Screen.TwipsPerPixelX)
    
    Dim dimensione As POINTAPI
    Dim lngLunghezza As Long
    Dim intTemp As Integer
    Dim winHDC As Long

    winHDC = GetWindowDC(frmCambiaPassword.hWnd)
    GetTextExtentPoint32 winHDC, strValore, _
                         Len(strValore), dimensione
    
    lngLunghezza = dimensione.X
        
    If lngLunghezza = 0 Then
        fnAltezzaH = 0
    Else
        If lngLunghezza Mod lngMaxLunghezza = 0 Then
            fnAltezzaH = lngLunghezza / lngMaxLunghezza
        Else
            intTemp = lngLunghezza / lngMaxLunghezza
            
            If intTemp = 1 Then
                If lngLunghezza <= lngMaxLunghezza Then intTemp = 0
            Else
                If lngLunghezza * intTemp > lngMaxLunghezza Then
                   intTemp = intTemp - 1
                End If
            End If
            
            fnAltezzaH = 1 + intTemp
            
        End If
    End If
    
End Function
Cioè che vorrei quindi sapere è se sono io a non aver capito come va gestita questa proprietà oppure c'è qualcosaltro che non va.

Grazie a tutti per la collaborazione

ladyBlu