Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [VB6&CR] Proprietà .Suppress: non funziona correttamente.

    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

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  2. #2
    mi spieghi che tipo di funzionameto errato restituisce?

    non so' tipo:

    anche se il campo non è presente si genera lo spazio sull'etichetta...

    etc etc
    -Raia Riccardo-
    Un forumello gnocco
    La vita è strana per questo bella

    non ero moderatore quando zork era un alcolizzato

  3. #3
    Originariamente inviato da chisono
    mi spieghi che tipo di funzionameto errato restituisce?

    non so' tipo:

    anche se il campo non è presente si genera lo spazio sull'etichetta...

    etc etc
    ciao gioia
    hai ragione, l'ho omesso

    Succede questo: se ad esempio nella 3a etichetta non è presente la qualifica (= ""), il codice che ho scritto io assegna False alla proprietà Suppress della Qualifica. Logicamente non fa una piega.
    Ma se l'ultima etichetta ha Qualifica <> "" il codice setta Suppress = True e succede che tutte le etichette precedenti perdono le impostazioni settata in precedenza. E quindi nell'etichetta in cui non c'è qualifica avrò una riga bianca tra nominativo e indirizzo.
    Ed è sbagliato.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  4. #4
    considerato che era meglio che non ti chiedevo spiegazioni:
    codice:
    Succede questo: se ad esempio nella 3a etichetta non è presente la 
    qualifica (= ""), il codice che ho scritto io assegna False alla 
    proprietà Suppress della Qualifica.
    al massimo è il contrario.


    il problema si genera perchè ovviamente le etichette vengono prima elaborate e poi mandate in stampa, ovviamente se non identifichi una singolarità per ogni etichetta succede che ad es:

    TitoloPostale.suppres = true
    sarà valido sia per l'etichetta 1 che per quella 100 in quanto l'oggetto "titolopostale" non è unico per ogni etichetta.

    prova così:
    codice:
    Private Sub Etichetta_Format(ByVal pFormattingInfo As Object)
        PosizionaControlli
    End Sub
    
    Sub PosizionaControlli()
        set  CrystalReport1.Status = 3
        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
         set  CrystalReport1.Status = -1
    End Sub
    lo status indica l'apertura(3) e la chiusura (-1) del report così dovresti creare report separati, non so' pero' se funziona in una function
    -Raia Riccardo-
    Un forumello gnocco
    La vita è strana per questo bella

    non ero moderatore quando zork era un alcolizzato

  5. #5
    hai ragione gioia, ho scritto al contrario
    stamattina sto battendo tutti i recordi di rincretinimento



    cmq, tornando a noi.
    Impossibile trovare il metodo o il membro dei dati

    non posso usare questo tuo sistema. ovviamente, CrystalReport1 è il nome del mio report, quindi nella function ho sostituito CrystalReport1 con Me.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  6. #6
    Originariamente inviato da ladyBlu
    hai ragione gioia, ho scritto al contrario
    stamattina sto battendo tutti i recordi di rincretinimento



    cmq, tornando a noi.
    Impossibile trovare il metodo o il membro dei dati

    non posso usare questo tuo sistema. ovviamente, CrystalReport1 è il nome del mio report, quindi nella function ho sostituito CrystalReport1 con Me.
    :master:

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

    solo questo è il codice che usi per lanciare il report
    -Raia Riccardo-
    Un forumello gnocco
    La vita è strana per questo bella

    non ero moderatore quando zork era un alcolizzato

  7. #7
    Originariamente inviato da chisono
    :master:

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

    solo questo è il codice che usi per lanciare il report
    utilizzo un modulo di classe.
    codice:
    Dim rsRs As New ADODB.Recordset
    Dim rpReport As New crEtichettePiccoleA4
    Dim frForm As New frmMostraAnteprima
    Dim strSql As String
    
    strSql = "EXEC sp_CreaElencoPerStampaBusteEtichette " & strFiltro
    rsRs.Open strSql, miaConn, 1, 3
    rpReport.Database.SetDataSource rsRs
    
    rsRs.Close
    Set rsRs = Nothing
    
    With frForm
         .Caption = "Stampa..."
                                                   
         Set .rpReport = rpReport
         Set rpReport = Nothing
                
         .crViewer.ReportSource = .rpReport
         .crViewer.ViewReport
                                
         .Show 1
    End With
                        
    Set frForm = Nothing

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  8. #8
    .Show 1


    a quale form si riferisce
    -Raia Riccardo-
    Un forumello gnocco
    La vita è strana per questo bella

    non ero moderatore quando zork era un alcolizzato

  9. #9
    Originariamente inviato da chisono
    .Show 1


    a quale form si riferisce
    gioia sei ciecato?! :gren:

    si riferisce all'oggetto frForm che è l'istanza del form frmMostraAnteprima. Contiene il CrystalReportViewer pre visualizzare l'anteprima di stampa.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  10. #10
    Originariamente inviato da ladyBlu
    gioia sei ciecato?! :gren:

    si riferisce all'oggetto frForm che è l'istanza del form frmMostraAnteprima. Contiene il CrystalReportViewer pre visualizzare l'anteprima di stampa.
    intendo dire frfrom.show 1 <--- cosa c'è dentro? il codice appena postato?
    -Raia Riccardo-
    Un forumello gnocco
    La vita è strana per questo bella

    non ero moderatore quando zork era un alcolizzato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.