Visualizzazione dei risultati da 1 a 8 su 8

Discussione: VB6 - ScaleWidth, ecc.

  1. #1
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291

    VB6 - ScaleWidth, ecc.

    Vi pongo queste domande,
    dato che non riesco ad avere un quadro operativo preciso.
    Le proprietà ScaleHeight - ScaleWidth, ecc. ... si usano per mantenere costanti i punti di inserimento dei controlli sulle Frm al variare delle dimensioni delle stesse?
    E ancora. Non modificano proporzionalmente le dimensioni dei controlli al variare delle dimensioni delle Frm?
    Grazie per le risposte.
    LM

  2. #2
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Possibile che tra i super esperti del forum non ci sia nessuno che dà una risposta?
    LM

  3. #3
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Effettivamente non si capisce molto dalla documentazione ufficiale.
    Meglio un esempio per chiarire che :

    1) ScaleXXXX cambia il sistema di riferimento delle coordinate in
    termini di unità grafiche stabilite da ScaleMode.
    Per cui se imposti ScaleHeight = 1000 per quell'oggetto ci
    saranno mille unità grafiche (pixel, millimetri ...) ed un
    controllo posizionato a .Height = 500 sarà a mezz'altezza.
    Stesso discorso per ScaleWidth

    2) Qualsiasi modifica avviene dopo l'impostazione dei valori
    corrispondenti ed è responsabilità del programmatore.

    Prova a commentare e scommentare le DUE righe di codice prima
    di Me.Refresh nell'esempio che ti posto.

    codice:
    Private Sub Command1_Click()
       Dim nT As Single
       Dim nL As Single
       
       nT = Command1.Top
       nL = Command1.Left
       
       ScaleHeight = ScaleHeight * 2   ' Imposta le unità per l'altezza.
       ScaleWidth = ScaleWidth * 2     ' Imposta le unità per la larghezza.
       
       ' Provare commentate e non
       Command1.Top = nT
       Command1.Left = nL
       
       Me.Refresh
       
    End Sub
    Ciao,

    PS: In questo forum nessuno crede di essere un superesperto.
    Ciao, Brainjar

  4. #4
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Brainjar, grazie per la risposta.
    La mia affermazione era provocatoria.
    Ho fatto delle prove ed effettivamente i predetti comandi servono per tenere "Relativamente" fisse le cordinate dei controlli al variare delle dimensioni della Frm.
    Sono alle prese con una routine per ridimensionare/aumentare le proporzioni dei controlli e della Frm al variare della risoluzione dello schermo. Ci sono sostanzialmente riuscito mediante delle matrici ed acquisendo la risoluzione iniziale (di programmazione).
    Ora mi sorge un problema. Dato che ci sono lo illustrarlo a te.
    Dunque i controlli si ridimensionano al diminuire della risoluzione (as esempio da 1024x768 > 800x600)però o notato che in questa particolare situazione dovrei anche diminuire le font. Avendo già i controlli nella matrice, secondo te é fattibile?
    Grazie per l'attenzione.
    LM

  5. #5
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Si è fattibile. Tieni solo presente che, i font non hanno dimensioni
    lineari. Nel senso che se sono disponibili i size 6,8,10,12 e tu
    vuoi dimezzare un font.size = 10 non lo riuscirai ad impostare a 5
    ma a quello disponibile più vicino. In tutti i casi è accettabile
    come risultato.

    Non credo che tu abbia bisogno di matrici. Ogni Form ha una
    collectio ni controlli Form.Controls, che è già una matrice e ci
    puoi loop-are dentro tramite il ciclo For ... Each.

    Ho già dato una traccia in una mia risposta di qualche mesetto fa.
    Purtroppo la ricerca sul forum non funziona, ma avevo postato un
    algoritmo semplice che, con pochi interventi, risolve anche il
    problema dei fonts.

    L'unica cosa che ho trovato, spulciandomi 48 pagine da 100 a giorni
    a oggi, è questo :

    http://forum.html.it/forum/showthrea...hreadid=783216

    Se trovo nel mio PC l'esempio te lo posto.

    Ciao,
    Ciao, Brainjar

  6. #6
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Grazie Brainjar, se stato prezioso.
    LM

  7. #7
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Trovato!

    Metti due textbox in un frame su form. L'uso del frame ti consente
    di avere dimensioni dell'area dei controlli reali e non viziate
    dalle dimensioni dell'area del titolo della Form.
    Piazza questo codice e prova il resize della Form.


    codice:
    Option Explicit
    Dim xp As Double
    Dim yp As Double
    Dim xg1 As Double
    Dim xg2 As Double
    
    Private Sub Form_Load()
        xp = Frame1.Width / Text1.Width
        yp = Frame1.Height / Text1.Height
        xg1 = Text1.Top
        xg2 = Text1.Top + Text1.Height - Text2.Top
        
    End Sub
    
    Private Sub Form_Resize()
        Frame1.Width = Me.Width - 30
        Frame1.Height = Me.Height - 30
        
        Frame1.Move 15, 15
        
        Text1.Width = Frame1.Width / xp
        Text1.Height = Frame1.Height / yp
        
        Text2.Top = Text1.Top + Text1.Height + (xg1 * xp) + (xg2 * xp)
        Text2.Width = Frame1.Width / xp
        Text2.Height = Frame1.Height / yp - (xg2 * xp)
    End Sub

    Ciao,
    Ciao, Brainjar

  8. #8
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Hai perfettamente ragione sulle frame, infatti le prove le ho eseguite con due frame contenenti in totale 150 controlli Txt.
    Sembra funzionare bene. Mi rimane da sostituire le font, ma solo per la ris. 800x600 - per risoluzioni maggiori non serve.
    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.