Ir para conteúdo
Fórum Script Brasil
  • 0

Configurar tamanho dos Forms.


Danleonhart

Pergunta

Pessoal...

Como posso configurar meus Forms para que eles tenham o mesmo tamanho sempre, em qualquer resolução ?

Tipo: tenho um Form em 800x600 com todo seu conteúdo organizado...porém, quando maximizado fica aquele "lado" cinza todo vazio...sobrando...

Li mas não entendí, sobre o comando "Screen", que com ele pode-se configurar o Form para que tenha o mesmo tamanho sempre...quer seja do tamanho padrão ou quando maximizado... que souber posta aqui um exemplo :blush:

Obrigado !

Editado por Danleonhart
Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

você pode impedir q o form seja redimensionado, mudando a propriedade BorderStyle para FixedSingle.

quanto ao objeto Screen, ele retorna as propriedades da tela. pegando Screen.Height e Screen.Width, você tem as dimensoes da tela. ai você poderia alterar o Height e o Width do form de acordo com o tamanho da tela.

Link para o comentário
Compartilhar em outros sites

  • 0

@Kuroi...

Me desculpa a ignorância, mas você poderia me dá um exemplo de como funciona este comando ? acho que ele vai servir para o meu propósito no projeto...porém não sei direito como usá-lo...

se você posta um exemplo (ou mais se quiser e puder) ficarei agradecido. ^_^

Link para o comentário
Compartilhar em outros sites

  • 0

@Kuroi... Essa dica ajudou bastante... agora tou tentando configurar para que o conteúdo do form fique inalteravel quando maximizado...

em estado normal:

ima01.png

Depois de maximizado:

ima02.png

Quero deixar proporcional tipo "Bloco de notas" do Windows... este lado sem utilização fica um pouco estranho...

Link para o comentário
Compartilhar em outros sites

  • 0

Coloque tudo dentro de um Picturebox, sete a opção borderstyle como none e faça:

Private Sub Form_Resize()
On Error Resume Next 'Usado para sanar o erro provocado ao minimizar a janela
    'Seta o tamanho mínimo da janela.
    If Me.Width < Picture1.Width Then Me.Width = Picture1.Width
    If Me.Height < Picture1.Height Then Me.Height = Picture1.Height

    'Centraliza o Picturebox
    Picture1.Move (Me.ScaleWidth / 2) - (Picture1.ScaleWidth / 2), (Me.ScaleHeight / 2) - (Picture1.ScaleHeight / 2)
    
End Sub

Espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

  • 0

legal o codigo, mas acho q teria mais sentido com frame do q com picture box. alias, nem sabia q funcionava com picture.

fora isso, em vez do On Error, você podia testar se o form não tava minimizada pela propriedade WindowState (não lembro de cabeca qual o valor da janela minimizada, mas é so testar).

daleon, meu MSN é rafaelsposito arroba hotmail.com

se quiser meu google talk, o endereco é o mesmo acima, so q @gmail.com, deve ser mais facil me encontrar ai, já q to viajando e não devo entrar no MSN tão cedo.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pelas dicas pessoal !

Mas ainda não foi dessa vez... sabe aqueles aplicativos que se alto redimensiona quando clicamos no "Maximizar" ?! é isso que quero fazer...estou achando que o VB-6 não dá esse tipo de opção... e se der, está muito escondido...

Também não conseguí deixar de maneira que o Form reconheça a resolução que o PC está usando quando iniciado... tipo: se usar em um PC com 1024x768 a tela tem de se alto-redimensionar...mesmo válido para se for iniciado em um PC com resolução de 800x600... esta é mais outra coisa que desejo fazer, mas até o momento não obtive sucesso...mesmo assim agradeço as opniões de todos... e estou aberto a novas sugestões !

Link para o comentário
Compartilhar em outros sites

  • 0

Tente fazer isto:

Em um form:

Option Explicit
  Dim MyForm As FRMSIZE
  Dim DesignX As Integer
  Dim DesignY As Integer

    Private Sub Form_Load()
      Dim ScaleFactorX As Single, ScaleFactorY As Single  ' fatores da escala
      ' Tamanho do formulario em Pixels na resolução de trabalho
      DesignX = 800
      DesignY = 600
      RePosForm = True
      DoResize = False
      ' define os valores da tela
      Xtwips = Screen.TwipsPerPixelX
      Ytwips = Screen.TwipsPerPixelY
      Ypixels = Screen.Height / Ytwips
      Xpixels = Screen.Width / Xtwips

      ' Determina os valores da escala
      ScaleFactorX = (Xpixels / DesignX)
      ScaleFactorY = (Ypixels / DesignY)
      ScaleMode = 1  ' twips

      Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
      Label1.Caption = "Resolução Atual " & Str$(Xpixels) + _
       "  por " + Str$(Ypixels)
      MyForm.Height = Me.Height ' Lembra o tamanho atual
      MyForm.Width = Me.Width
   End Sub

   Private Sub Form_Resize()
      Dim ScaleFactorX As Single, ScaleFactorY As Single

      If Not DoResize Then  ' Para evitar um loop sem fim
         DoResize = True
         Exit Sub
      End If

      RePosForm = False
      ScaleFactorX = Me.Width / MyForm.Width   ' Quanto mudar ?
      ScaleFactorY = Me.Height / MyForm.Height
      Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
      MyForm.Height = Me.Height ' Lembra o tamanho atual
      MyForm.Width = Me.Width
   End Sub
Em um modulo:
Public Xtwips As Integer, Ytwips As Integer
Public Xpixels As Integer, Ypixels As Integer

   Type FRMSIZE
      Height As Long
      Width As Long
   End Type
   Public RePosForm As Boolean
   Public DoResize As Boolean
   Sub Resize_For_Resolution(ByVal SFX As Single, ByVal SFY As Single, MyForm As Form)
      
      Dim I As Integer
      Dim SFFont As Single

      SFFont = (SFX + SFY) / 2  ' escala média
      ' Tamanho dos controles para a nova resolução
      On Error Resume Next  '
      With MyForm
        For I = 0 To .Count - 1
         If TypeOf .Controls(I) Is ComboBox Then 'Combobox não altera a propriedade Height
           .Controls(I).Left = .Controls(I).Left * SFX
           .Controls(I).Top = .Controls(I).Top * SFY
           .Controls(I).Width = .Controls(I).Width * SFX
         Else
           .Controls(I).Move .Controls(I).Left * SFX, _
            .Controls(I).Top * SFY, .Controls(I).Width * SFX, .Controls(I).Height * SFY
         End If
           ' Redimensiona e reposiciona antes de alterar o tamanho da fonte
           .Controls(I).FontSize = .Controls(I).FontSize * SFFont
        Next I
        If RePosForm Then
          ' Redimensiona o formulario
          .Move .Left * SFX, .Top * SFY, .Width * SFX, .Height * SFY
        End If
      End With
   End Sub

Link para o comentário
Compartilhar em outros sites

  • 0
Cara testei este código, ele atende bem ao que tou fazendo no meu projeto...

o único pro que aconteceu agora foi ao "Minimizar"...

Fique minimizando e aumentando constantemente que você vai ver...

mas é por aí... a ideia é essa mesmo !

Obrigado pela sugestão !

Puts! não tinha percebido este bug.

mas ta ai a solução:

Altere a sub Form_Resize()

Adicione na primeira linha:

If Me.WindowState = 1 Then Exit Sub

Veja:

Private Sub Form_Resize()
    If Me.WindowState = 1 Then Exit Sub 'Verifica se a janela foi minimizada.
   
      Dim ScaleFactorX As Single, ScaleFactorY As Single

      If Not DoResize Then  ' Para evitar um loop sem fim
         DoResize = True
         Exit Sub
      End If

      RePosForm = False
      ScaleFactorX = Me.Width / MyForm.Width   ' Quanto mudar ?
      ScaleFactorY = Me.Height / MyForm.Height
      Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
      MyForm.Height = Me.Height ' Lembra o tamanho atual
      MyForm.Width = Me.Width
   End Sub

Faz um teste ai acho q agora vai rs!

Link para o comentário
Compartilhar em outros sites

  • 0

Ok ! deu certinho agora !

Sabe como posso fazer para na tela de "login" (meu projeto tem uma...) ela se auto-configurar para tomar conta de toda a tela... de acordo com a resolução que tenha o micro ? tipo: se tou em PC onde a resolução seja de 1024x768, a tela de login tome conta de toda tela, sem ficar fora de padrão... o mesmo para um micro com res. de 800x600, ou 1280x960... e assim por diante... sei que tem, pois tinha um projeto assim...só que perdí e não o encontrei mais... :blush:

Link para o comentário
Compartilhar em outros sites

  • 0
Ok ! deu certinho agora !

Sabe como posso fazer para na tela de "login" (meu projeto tem uma...) ela se auto-configurar para tomar conta de toda a tela... de acordo com a resolução que tenha o micro ? tipo: se tou em PC onde a resolução seja de 1024x768, a tela de login tome conta de toda tela, sem ficar fora de padrão... o mesmo para um micro com res. de 800x600, ou 1280x960... e assim por diante... sei que tem, pois tinha um projeto assim...só que perdí e não o encontrei mais... :blush:

Pelo o que eu entendi você que q o form fique maximizado, certo?

bom... ao carregar o form você pode mandar ele maximizar

Mude o BorderStyle para 1 - Fixed Single

Private Sub Form_Load()  
    Me.WindowState = 2
End Sub
ou isso:
Private Sub Form_Load()
    Me.Move 0, 0, Screen.Width, Screen.Height
End Sub

ou simplesmente mude em tempo de designe a propriedade do windowsstate para 2 - Maximizado.

t breve!

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Anderson mais uma vez !

Isso eu já fiz... mas continua do mesmo jeito...tou tentando agora ocultar ou desabilitar o botão de "fechar" (X), é mais pratico... nas propriedades mostram apenas os de maximizar e minimizar...tou tentando pelo código...

Editado por Danleonhart
Link para o comentário
Compartilhar em outros sites

  • 0
Valeu Anderson mais uma vez !

Isso eu já fiz... mas continua do mesmo jeito...tou tentando agora ocultar ou desabilitar o botão de "fechar" (X), é mais pratico... nas propriedades mostram apenas os de maximizar e minimizar...tou tentando pelo código...

Para retirar o botão fechar use estas API's:

Public Const MF_BYPOSITION = &H400&

Public Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long) As Long

Public Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, _
ByVal bRevert As Long) As Long

Public Sub RemoveCloseButton(hwnd As Long)
Dim hSysMenu As Long
hSysMenu = GetSystemMenu(hwnd, 0)
RemoveMenu hSysMenu, 6, MF_BYPOSITION
RemoveMenu hSysMenu, 5, MF_BYPOSITION
End Sub
e chame no load do form desta forma:
RemoveCloseButton Me.hwnd

Editado por Anderson Fernandes
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...