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:
Ognuno di questi controlli può aumentare verticalmente e può non essere presente qualora il valore sia uguale a stringa vuota.codice:____________________ | | | TitoloPostale | | Nominativo | | Qualifica | | Indirizzo | | | ____________________
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:
Cioè che vorrei quindi sapere è se sono io a non aver capito come va gestita questa proprietà oppure c'è qualcosaltro che non va.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
Grazie a tutti per la collaborazione
ladyBlu



Rispondi quotando