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

    [VB6]Stessa Risoluzione - diverso PC - form grande

    Ciao ragazzi.
    Lo so... è un argomento già trattato diverse volte, e per questo ho letto molte discussioni sulla risoluzione, evitando così di richiederle, però questo a quanto pare è uno strano problema; ho un progetto che graficamente ho preparato ad un monitor da 17'', con risoluzione 1024 * 768.
    Ora ho passato il mio progetto su un PC sempre ad un monitor da 17" e sempre con la stessa risoluzione, identica. Unica differenza è il sistema operativo: nel mio XP e nel PC di prova Windows ME.
    Nel PC dove vi è installato Windows ME stranamente visualizzo il tutto come se fosse impostata la risoluzione 800*600, quindi solamente la parte alta a sinistra, e per altro con tutti i controlli giganti... VVoVe:
    Il mio form è impostato così:
    - borderStyle 2 Sizable
    - WindowsState 2 Maximized

    Girando in rete ho trovato questo codice; inserito nel form_Load. però a quanto pare non funzia come dovrebbe

    codice:
     Const H = 768
     Const W = 1024
    
    Dim currH As Single
    Dim currW As Single
        currH = Screen.Height / Screen.TwipsPerPixelY
        currW = Screen.Width / Screen.TwipsPerPixelX
        If currH = H And currW = W Then
            'ok ha la stessa risoluzione
        Else
            'la risoluzione è diversa
            Me.Width = Me.Width * (currW / W)
            Me.Height = Me.Height * (currH / H)
        End If
    Mentre fino a poca ho usato questo:

    codice:
    Me.Height = Screen.Height
     Me.Width = Screen.Width
    Per il ridimensionamento degli oggetti avevo pensato di usare il codice presente in questa discussione, però mi dà errore su ArrayOfProportions, questo il link della discussione LINK

    Come mai?


  2. #2
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao Fryderyk,
    fare un esempio richiederebbe molto spazio e tempo, è meglio che dai uno sguardo qui ove è esposto un esempio di codice funzionante.
    LM

  3. #3
    Ciao, grazie per il codice; c'ho messo un pò a sistemarlo, ma poi è andato bene.
    Chiedo a voi esperti: questo codice è ottimo, purtroppo però ho dei controlli (pulsanti, label, combo) che mi sono stati spostati, alcuni sovrapposti e inutilizzabili, e sinceramente non so come fare per sistemarli, sapete indicarmi come agire?
    Dovrei ridimensionare anche le msgbox, però stesso problema, non so come manipolarle...
    D'altra parte credo sia bruttino costringere l'utente ogni volta ad adpoerare la risoluzione 1024*768; ho visto che molti usano 800*600... Ecco... almeno farlo per questi due tipi di risoluzioni

    A presto

  4. #4
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao Fryderyk,
    Ciao, grazie per il codice; c'ho messo un pò a sistemarlo, ma poi è andato bene.
    Chiedo a voi esperti: questo codice è ottimo, purtroppo però ho dei controlli (pulsanti, label, combo) che mi sono stati spostati, alcuni sovrapposti e inutilizzabili, e sinceramente non so come fare per sistemarli, sapete indicarmi come agire?
    E' molto strano ciò che ti accade, dato che ho sottomano proprio il codice che ti ho proposto applicato ad una Frm contenente diversi Txt allineati e della stessa misura, delle Frame, Picture, Line, Label ed una Toolbar; al cambio della risoluzione tutti i controlli permangono nella loro posizione e non evidenziano difetti di allineamento.
    Ti consiglio di applicare il codice ad una Frm di esempio, in modo da capire il funzionamento della routine e solo dopo applicarlo al progetto cui stai lavorando.
    Per quanto riguarda la risoluzione, ti assicuro che la 1024x768 è quella che va per la maggiore!
    LM

  5. #5
    LMondi.
    Non ti ho risposto subito perchè stavo facendo delle prove; allora, il problema è stato individuato: sono le combo. In pratica succede che, a risoluzione DIVERSA da 768*1024 non restano nella loro posizione, ma si spostano, e in maniera irregolare; si ci sono altri oggetti vicino, ti ritrovi un pasticcio (come il mio caso).
    D'altra parte sarebbe da rimettere mano al codice, in fondo chi l'ha postato già ci ha fatto un grande favore, però giustamente non poteva compilare per tutti gli oggetti.

    Io non sono in grado di farlo, ho guardato per bene il codice, però ancora non programmo a quel livello. :rollo:

    Oltre alle combo aggiungerei:

    - gli option button, occhio alla grandezza, se ha poco spazio la caption viene "tagliata".
    - le msgbox, queste non sono state programmate, quindi se hai 800*600 verranno visualizzate più grandi di quello che dovrebbero.
    - le immagini ai pulsanti (queste credo non puoi farci nulla...)

    Oltre a gli controlli, ho provato ad aggiungere lo shape, un frame, le righe e le immagini; queste funzionano.

    Se qualcuno vuole provarci ricito il LINK

    ciao.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    scusate se mi intrometto, nn ho ben capito il problema da te esposto, ma da quel poco ke ho recepito forse è successo qlcosa di simile a me... nn è ke puoi mettere uno screenshot della situazione anomala?
    Mi pare che nel mio caso la form "sballava" perchè c'eran impostati i "caratteri grandi" in windows...

  7. #7
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao Fryderyk,
    per quanto riguarda le combobox (che non vengono spostate in modo adeguato specialmente se la risoluzione è maggiore di 1024x768) ritengo che ciò avvenga perchè hanno la proprietà Heigth in sola lettura. Quindi si dovrebbe intervenire nella Sub Riproporziona() con apposite linee di codice; non rimane che provarci ...
    e vedrai che poi non è così difficile.
    LM

  8. #8
    Ciao LMondi.

    Io all'inizio proprio in quel punto ho cercato di modificare il listato.
    Lui (programmatore del codice) adopera un ciclo FOR che scorre tutti controlli, e ad ognuno gli dice di cambiare le dimensioni; lo stesso codice è valido per le text, label, command, e via dicendo... quindi tutti i controlli... non capisco perchè non funziona con le combo.

    Se adoperava una sintassi del tipo:

    se incontri le text
    se incontri i command
    se incontri le label
    (ecc...)
    Applica il ridimensionamento


    sarei stato in grado di effettuare la modifica, ma con questo listato non so come manomettere:

    codice:
      For ii = 0 To Controls.Count - 1
            'Se alcuni controlli sono invisibili non si deve fare nulla:
                If TypeOf Controls(ii) Is Timer Or TypeOf Controls(ii) Is ImageList Then
                    'non fa nulla
                    ElseIf TypeOf Controls(ii) Is CommonDialog Then
                    'non fa nulla
                    Else
                    'i controlli vengoni ridimensionati e spostati:
                    Controls(ii).Move _
                    ArrayProportion(ii).LeftProportions * ScaleWidth * dblRapL, _
                    ArrayProportion(ii).TopProportions * ScaleHeight * dblRapH, _
                    ArrayProportion(ii).WidthProportions * ScaleWidth * dblRapL, _
                    ArrayProportion(ii).HeightProportions * ScaleHeight * dblRapH
                End If
            Next ii
        End If

    Arthas83, ciao.
    Il problema dei caratteri grandi di Windows, è un'altra cosa; il listato di cui stiamo parlando serve solo ed esclusivamente ad un programma che è stato progetto ad una determinata risoluzione (nel mio caso 1024*768), e modifica i vari controlli (text, label, command...) nel caso il programma viene avviato su una macchina che ha un'altra risoluzione, esempio 800*600; ciò avendo impostato i caratteri piccoli.
    Mentre per i caratteri grandi (supponendo che il programmatore nella progettazione abbia utilizzato quelli piccoli), credo ci serva un altro codice, che ridimensiona il tutto ulteriormente.
    Questo problema, volevo affrontarlo subito dopo terminato l'inconveniete del cambio risoluzione.


  9. #9
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Al riguardo leggi questo articolo della Microsoft, è molto interessante e ti può aiutare a risolvere.
    LM

  10. #10
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Fryderyk,
    ho modificato la Sub di cui trattasi, prendendo lo spunto dall'articolo che ti ho segnalato della Microsoft; il codice può essere migliorato anche se sembra funzionare:

    codice:
    Sub Riproporziona()
        On Error Resume Next
    
        Dim picTemp As VB.PictureBox
        
        'Variabile per le PictureBox:
        Dim c As Control
        
        'Variabile per le Line:
        Dim c2 As Control
        Dim btRid As Byte
        
        If (sngHAtt And sngLAtt) <> (sngH And sngL) Then
            Dim ii As Integer
            For ii = 0 To Form1.Controls.Count - 1
            'Se alcuni controlli sono invisibili non si deve fare nulla:
                If TypeOf Form1.Controls(ii) Is Timer Or TypeOf Form1.Controls(ii) Is ImageList Then
                    'non fa nulla
                    ElseIf TypeOf Form1.Controls(ii) Is CommonDialog Then
                    'non fa nulla
                    ' Qualora il controllo sia il ComboBox riduce la dimensione della Font: 
                    ElseIf TypeOf Form1.Controls(ii) Is ComboBox Then
                        Form1.Controls(ii).FontSize = Form1.Controls(ii).FontSize * ((0.5 * dblRapL) + (0.5 * dblRapH))
                        Form1.Controls(ii).Move _
                            ArrayProportion(ii).LeftProportions * Form1.ScaleWidth * dblRapL, _
                            ArrayProportion(ii).TopProportions * Form1.ScaleHeight * dblRapH, _
                            ArrayProportion(ii).WidthProportions * Form1.ScaleWidth * dblRapL
                    Else
                    'i controlli vengoni ridimensionati e spostati:
                    Form1.Controls(ii).Move _
                        ArrayProportion(ii).LeftProportions * Form1.ScaleWidth * dblRapL, _
                        ArrayProportion(ii).TopProportions * Form1.ScaleHeight * dblRapH, _
                        ArrayProportion(ii).WidthProportions * Form1.ScaleWidth * dblRapL, _
                        ArrayProportion(ii).HeightProportions * Form1.ScaleHeight * dblRapH
                End If
        'Riproporziona le linee:
                For Each c2 In Form1.Controls
                    If TypeOf c2 Is Line And btRid = 0 Then
                        c2.X1 = c2.X1 * dblRapL
                        c2.Y1 = c2.Y1 * dblRapH
                        c2.X2 = c2.X2 * dblRapL
                        c2.Y2 = c2.Y2 * dblRapH
                        btRid = 1
                    End If
                Next
            Next ii
        
        'Adatta l'immagine al nuovo controllo PictureBox:
                For Each c In Form1.Controls
                    'Controlla che si tratti di una PictureBox e che la ris. larghezza
                    'del controllo sia diversa da quella di sviluppo:
                    If TypeOf c Is PictureBox And btLoad = 0 Then
                        'PictureBox temporanea:
                        Set picTemp = Form1.Controls.Add("VB.PictureBox", "picTemp")
                        'La PictureBox temporanea assume le dimensioni del controllo:
                        picTemp.Width = c.Width
                        picTemp.Height = c.Height
                        picTemp.AutoRedraw = True
                        picTemp.AutoSize = False
                        'Disegna l'immagine sulla PictureBox Temporanea
                        'tenuto conto delle nuove dimensioni del controllo PictureBox:
                        picTemp.PaintPicture c.Picture, 0, 0, (picTemp.Width), (picTemp.Height)
                        'Carica l'immagine grafica nella PictureBox:
                        c.Picture = LoadPicture()
                        c.Picture = picTemp.Image
                        'Rimuove l'immagine temporanea:
                        Form1.Controls.Remove picTemp
                        btLoad = 1
                    End If
                Next
                
    'Rapporta la dimensione Altezza della Frm considerata:
    'l'altezza della barra superiore del Titolo,la barra dei menu e la TollBar:
            Form1.Height = ((Form1.Height - Hs) * dblRapH) + Hs
            Form1.Width = Form1.Width * dblRapL
        End If
    End Sub
    Spero che ti sia d'aiuto.
    LM

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.