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