PDA

Visualizza la versione completa : [VB6] PrintForm


ladyBlu
03-12-2002, 14:37
Salve forum...:ciauz:

Ho un problema con la PrintForm.
In pratica ho la necessità di stampare un form che è a tutto schermo, la cui risoluzione è 1280x1024 su un A4-orizzontale. Ora, mentre a risoluzione 1024x768 stampa tutto il form in un A4, con risoluzioni superiori taglia senza scrupolo alcuno il form.

Ragazzi, ho tentato in tutti i modi di effettuare correttamente questa stampa, ma non c'è niente da fare... non riesco a trovare una soluzione.

Mi sapete aiutare?...:bhò:


Vi ringrazio tutti per la collaborazione...;)


:ciauz:

xegallo
03-12-2002, 14:54
potrsti fare un piccolo escamotage
che va a leggere la risoluzione


Public Function CheckRez(pixelWidth As Long, pixelHeight As Long) As Boolean

Dim lngTwipsX As Long
Dim lngTwipsY As Long

'converte i pixels in twips
lngTwipsX = pixelWidth * 15
lngTwipsY = pixelHeight * 15

' rileva la risoluzione corrente
If lngTwipsX <> Screen.Width Then
CheckRez = False
Else
If lngTwipsY <> Screen.Height Then
CheckRez = False
Else
CheckRez = True
End If
End If
End Function


se non è quella che vuoi tu



Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
Public Const LOGPIXELSX = 88
Public Const LOGPIXELSY = 90
'MODULO:
Public Function IsScreenFontSmall() As Boolean
Dim hWndDesk As Long
Dim hDCDesk As Long
Dim logPix As Long
Dim r As Long
hWndDesk = GetDesktopWindow()
hDCDesk = GetDC(hWndDesk)
logPix = GetDeviceCaps(hDCDesk, LOGPIXELSX)
r = ReleaseDC(hWndDesk, hDCDesk)
If logPix = 96 Then IsScreenFontSmall = True
Exit Function
End Function

Sub ResizeControls(frmName As Form, winstate As Integer)
On Error Resume Next
Dim designwidth As Integer, designheight As Integer, designfontsize As Integer, currentfontsize As Integer
Dim numofcontrols As Integer, a As Integer
Dim movetype As String, moveamount As Integer
designwidth = 1024
designheight = 768
designfontsize = 96
' qui al posto di rilegger la risoluzioni imposti tu le dimensioni dello screen
GetResolutionX = 'esempio 1024
GetResolutionY = ' esempio 768
ratiox = GetResolutionX / designwidth
ratioy = GetResolutionY / designheight
'check to see what size of fonts are being used
If IsScreenFontSmall Then
currentfontsize = 96
Else
currentfontsize = 120
End If
'work out the ratio for the fontsize
fontratio = designfontsize / currentfontsize
If ratiox = 1 And ratioy = 1 And fontratio = 1 Then Exit Sub
numofcontrols = frmName.Controls.Count - 1 'count the number of controls on the form
If winstate = 0 Then
frmName.Height = frmName.Height * ratioy
frmName.Width = frmName.Width * ratiox
If frmName.Tag <> "" Then
movetype = Left(frmName.Tag, 1)
moveamount = Mid(frmName.Tag, 2, Len(frmName.Tag))
Select Case movetype
Case "L"
frmName.Left = frmName.Left + moveamount
Case "T"
frmName.Top = frmName.Top + moveamount
Case "H"
frmName.Height = frmName.Height + moveamount
Case "W"
frmName.Width = frmName.Width + moveamount
End Select
End If

ElseIf winstate = 2 Then
frmName.Width = Screen.Width
frmName.Height = Screen.Height
frmName.Top = 0
frmName.Left = 0
End If
For a = 0 To numofcontrols
If frmName.Controls(a).Font.Size <= 8 And ratiox < 1 Then
frmName.Controls(a).Font.Name = "Small Fonts"
frmName.Controls(a).Font.Size = frmName.Controls(a).Font.Size - 0.5
Else
frmName.Controls(a).Font.Size = frmName.Controls(a).Font.Size * ratiox
End If
If TypeOf frmName.Controls(a) Is Line Then
frmName.Controls(a).X1 = frmName.Controls(a).X1 * ratiox
frmName.Controls(a).Y1 = frmName.Controls(a).Y1 * ratioy
frmName.Controls(a).X2 = frmName.Controls(a).X2 * ratiox
frmName.Controls(a).Y2 = frmName.Controls(a).Y2 * ratioy
ElseIf TypeOf frmName.Controls(a) Is PictureBox Then
frmName.Controls(a).Width = frmName.Controls(a).Width * ratiox
frmName.Controls(a).Height = frmName.Controls(a).Height * ratioy
frmName.Controls(a).Top = frmName.Controls(a).Top * ratioy
frmName.Controls(a).Left = frmName.Controls(a).Left * ratiox
frmName.Controls(a).ScaleHeight = frmName.Controls(a).ScaleHeight * ratioy
frmName.Controls(a).ScaleWidth = frmName.Controls(a).ScaleWidth * ratiox
ElseIf TypeOf frmName.Controls(a) Is Toolbar Then
frmName.Controls(a).ButtonHeight = frmName.Controls(a).ButtonHeight * ratioy
frmName.Controls(a).ButtonWidth = frmName.Controls(a).ButtonWidth * ratiox
frmName.Controls(a).Width = frmName.Controls(a).Width * ratiox
frmName.Controls(a).Height = frmName.Controls(a).Height * ratioy
frmName.Controls(a).Top = frmName.Controls(a).Top * ratioy
frmName.Controls(a).Left = frmName.Controls(a).Left * ratiox
ElseIf TypeOf frmName.Controls(a) Is MSFlexGrid Then
frmName.Controls(a).ColWidth = frmName.Controls(a).ColWidth * ratiox
frmName.Controls(a).RowHeight = frmName.Controls(a).RowHeight * ratioy
frmName.Controls(a).Width = frmName.Controls(a).Width * ratiox
frmName.Controls(a).Height = frmName.Controls(a).Height * ratioy
frmName.Controls(a).Top = frmName.Controls(a).Top * ratioy
frmName.Controls(a).Left = frmName.Controls(a).Left * ratiox
Else
frmName.Controls(a).Width = frmName.Controls(a).Width * ratiox
frmName.Controls(a).Height = frmName.Controls(a).Height * ratioy
frmName.Controls(a).Top = frmName.Controls(a).Top * ratioy
frmName.Controls(a).Left = frmName.Controls(a).Left * ratiox
End If
If frmName.Controls(a).Tag <> "" Then
movetype = Left(frmName.Controls(a).Tag, 1)
moveamount = Mid(frmName.Controls(a).Tag, 2, Len(frmName.Controls(a).Tag))
Select Case movetype
Case "L"
frmName.Controls(a).Left = frmName.Controls(a).Left + moveamount
Case "T"
frmName.Controls(a).Top = frmName.Controls(a).Top + moveamount
Case "H"
frmName.Controls(a).Height = frmName.Controls(a).Height + moveamount
Case "W"
frmName.Controls(a).Width = frmName.Controls(a).Width + moveamount
End Select
End If


poi stampi
poi lo rimetti normale

ladyBlu
03-12-2002, 15:40
Originariamente inviato da xegallo
potrsti fare un piccolo escamotage
che va a leggere la risoluzione


Public Function CheckRez(pixelWidth As Long, pixelHeight As Long) As Boolean

Dim lngTwipsX As Long
Dim lngTwipsY As Long

'converte i pixels in twips
lngTwipsX = pixelWidth * 15
lngTwipsY = pixelHeight * 15

' rileva la risoluzione corrente
If lngTwipsX <> Screen.Width Then
CheckRez = False
Else
If lngTwipsY <> Screen.Height Then
CheckRez = False
Else
CheckRez = True
End If
End If
End Function


xegallo, grazie x l'aiuto...:smack:
questa funzione, se ho capito bene, mi restituisce SI o NO a seconda se la larghezza e l'altezza del form sono o meno uguali alla risoluzione dello schermo, giusto?
ma, io già so che le dimensioni del form sono quanto lo schermo... il problema me lo da la stampa proprio.
e cmq, una volta che CheckRez mi restituisce True o False, che dovrei fare?...:master:

xegallo
03-12-2002, 15:46
questa ti restituice si o no in base ad una risoluzione che voui controllare ad esmpio se la risoluzione è 1024 X 768 e tu passi alla funzione 600 X 400 risulta falsa risulta vera solo quando i valori che gli passi sono uguali alla risoluzione


nel tuo caso prima di stampare controlla che la risoluzione sia pari a 1024 X 768

se risulta false ridimensioni il form come per simulare quella risoluzione
lanci la stampa
e poi se vuoi lo ridimensioni normali

ladyBlu
03-12-2002, 15:52
Originariamente inviato da xegallo
questa ti restituice si o no in base ad una risoluzione che voui controllare ad esmpio se la risoluzione è 1024 X 768 e tu passi alla funzione 600 X 400 risulta falsa risulta vera solo quando i valori che gli passi sono uguali alla risoluzione


nel tuo caso prima di stampare controlla che la risoluzione sia pari a 1024 X 768

se risulta false ridimensioni il form come per simulare quella risoluzione
lanci la stampa
e poi se vuoi lo ridimensioni normali
intanto la mia risoluzione è 1280x1024, e poi io ho un form pieno zeppo di matrici di controlli e tu sai che mi ci vuole un'eternità a ridisegnarli e riposizionarli tutti. possibile che non si riesce a far andare d'accordo form e stampante senza fare troppo casino?...:(


:smack:

vonkranz
03-12-2002, 15:52
...magari non serve anulla, ma prova ad impostare la prop. AUTOREDRAW del form che devi stampare su TRUE...

ladyBlu
03-12-2002, 15:53
Originariamente inviato da vonkranz
...magari non serve anulla, ma prova ad impostare la prop. AUTOREDRAW del form che devi stampare su TRUE...
già fatto e rifatto... se ne strafrega...:dhò:

vonkranz
03-12-2002, 16:08
...prova a fare una cosa:
Modifica manualmente l'impostazione della stampante che utilizzi, anziche' farlo da programma.

L'help dice:
La stampante alla quale si riferisce PrintForm è determinata dalle impostazioni del Pannello di controllo del sistema operativo.

ladyBlu
03-12-2002, 16:14
Originariamente inviato da vonkranz
...prova a fare una cosa:
Modifica manualmente l'impostazione della stampante che utilizzi, anziche' farlo da programma.

L'help dice:
La stampante alla quale si riferisce PrintForm è determinata dalle impostazioni del Pannello di controllo del sistema operativo.

e quindi che devo fare?...:master:...devo andare su pannello di controllo e poi...???...:confused:

vonkranz
03-12-2002, 16:19
Originariamente inviato da ladyBlu

e quindi che devo fare?...:master:...devo andare su pannello di controllo e poi...???...:confused:
...modificare l'impostazione del foglio della stampante sulla dimensione che ti serve... ma da pannello di controllo.... e poi provare il PrintForm...

...ho la sensazione che questa funzione se ne sbatta ampiamente le OO delle impostazioni che dai alla stampante via codice....:dottò:...

Loading