[PAP - VB6] - Dúvida!

MuseBass

Membro
Pessoal estou a fazer a minha pap do 12º dum curso profissional de informatica em vb6. consiste numa base de dados para uma federeção de columbofilia (sei que é invulgar xD) feita em acess e depois com interface no vb6.

tenho algumas dúvidas mas de momento esta é a mais pertinente:

-estou a fazer o trabalho num portatil de um amigo meu e a definição do ecra é diferente da minha. quando fazemos o executavel ele nao se "adapta" a minha definição de ecra. Ha alguma maneira de mudar isto?

agradeço toda a ajuda possivel. só dei vb o ano passado e a memória não ajuda :lol:
obrigado desde já.
 
Última edição pelo moderador:
No VB.NET tens "Anchor".
No VB6 tens "la pata".

Terás de efectuar cálculos de redimensionamento em todos os controlos, a partir do evento "RESIZE" da form.

Começa por construír um GUI o mais compacto possível para garantires a mínima resolução, para que depois, através dos cálculos, possas determinar as novas posições e/ou tamanhos.

Em alternativa podes caçar a resolução do ecran e avisares, ou teres forms específicos para diferentes resoluções de ecran.

VB6 já lá vai, mas para teres uma ideia, exprimenta espetar isto num botão:

Código:
MsgBox(CInt(Screen.Width / 15) & "x" & CInt(Screen.Height / 15))

Divide-se por 15, porque o VB6 trabalha com twips, e existem 15 twips por cada pixel.
Se não dividires por 15, podes aplicar directamente onde pretendes, pois todos os valores de posição e tamanho no VB6 estão em twips.
 
Acho que o número de twips pode mudar. Existe uma variável para isso, até porque assim evitam-se números "mágicos": Screen.TwipsPerPixelX e Screen.TwipsPerPixelY.
 
Sim isso facilita as continhas, mas penso que 15 é assumido como valor por defeito.
Como 15 twips = 1 pixel, se não mexeres em nada, acho preferível explicar dessa forma.

Mas MuseBass, explora a conversão padrão e depois brinca com os TwipPerPixel.
Torna o código mais "legível" se fores olhar para ele mais tarde e não te lembrares do que raio faz um "15" ali para o meio.
 
No VB.NET tens "Anchor".
No VB6 tens "la pata".

Terás de efectuar cálculos de redimensionamento em todos os controlos, a partir do evento "RESIZE" da form.

Começa por construír um GUI o mais compacto possível para garantires a mínima resolução, para que depois, através dos cálculos, possas determinar as novas posições e/ou tamanhos.

Em alternativa podes caçar a resolução do ecran e avisares, ou teres forms específicos para diferentes resoluções de ecran.

VB6 já lá vai, mas para teres uma ideia, exprimenta espetar isto num botão:

Código:
MsgBox(CInt(Screen.Width / 15) & "x" & CInt(Screen.Height / 15))

Divide-se por 15, porque o VB6 trabalha com twips, e existem 15 twips por cada pixel.
Se não dividires por 15, podes aplicar directamente onde pretendes, pois todos os valores de posição e tamanho no VB6 estão em twips.

Eu experimentei no load do form inicial e a msgbox dá-me a definição correcta do ecrã, mas não altera nada, continua com o tamanho maior (do outro ecrã)

E não há maneira de aplicar esse código aos forms directamente? Porque assim teria de implementar isso em cada janela e msgbox não é?

obrigado pela ajuda pessoal:x2:
 
Óbvio que não ia fazer nada. É uma messagebox.
Servia-te apenas para veres a facilidade com que vais buscar a resolução do ecran para poderes agora proceder aos cálculos "à la pata" de todas as posições e dimensões de todos os controlos.
 
Óbvio que não ia fazer nada. É uma messagebox.
Servia-te apenas para veres a facilidade com que vais buscar a resolução do ecran para poderes agora proceder aos cálculos "à la pata" de todas as posições e dimensões de todos os controlos.

então mas se eu centrar a janela e ela se redimensionar para a minha definição de ecra não altera tambem o seu conteudo? é que se em cada botao, listbox e etc tiver de usar isto nunca mais acabo o projecto =S
 
Como disse no primeiro post:
VB.NET tens "anchors", mas no VB6 tens "la pata".

Podes centrar o form sem problemas, mas terás SIM de redimensionar/recolocar todos os controlos se redimensionares o form.
O truque no VB6, para não ter chatices desse género, é desenhar o ecran apontado para uma resolução mínima aceitável, como por exemplo 640x480. Assim venha que resolução vier, acima dessa, terás o form centrado e os controlos bonitos.

Se estiveres mesmo "clueless", e quiseres um exemplo de colocação manual dos componentes consoante o resize da form, posso fazer-te um exemplo em VB.NET (como são propriedades simplíssimas como Height, Width, Top e Left, é compatível com VB6)
 
Como disse no primeiro post:
VB.NET tens "anchors", mas no VB6 tens "la pata".

Podes centrar o form sem problemas, mas terás SIM de redimensionar/recolocar todos os controlos se redimensionares o form.
O truque no VB6, para não ter chatices desse género, é desenhar o ecran apontado para uma resolução mínima aceitável, como por exemplo 640x480. Assim venha que resolução vier, acima dessa, terás o form centrado e os controlos bonitos.

Se estiveres mesmo "clueless", e quiseres um exemplo de colocação manual dos componentes consoante o resize da form, posso fazer-te um exemplo em VB.NET (como são propriedades simplíssimas como Height, Width, Top e Left, é compatível com VB6)

Mas la pata significa...? lol


agradecia muito é que estou mesmo no ar com isto...a matéria que dei de vb não foi nada de muito aprofundado e nunca falamos sobre estas propriedades mais manhosas...

obrigado pela ajuda :009:
 
Exacto.

Eis o tal exemplo prometido em VB.NET

Código:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CalcularPosicoes()
    End Sub

    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        CalcularPosicoes()
    End Sub

    Private Sub CalcularPosicoes()
        With TextBox1
            .Top = 5
            .Left = 5
            .Width = Me.Width - 18
            .Height = Me.Height - 65
        End With

        With TextBox2
             TextBox2.Top = TextBox1.Top + TextBox1.Height + 2
             TextBox2.Left = 5
             TextBox2.Width = TextBox1.Width - Button1.Width - 2
        End With

        Button1.Top = TextBox2.Top - 1
        Button1.Left = TextBox2.Left + TextBox2.Width + 2
    End Sub
End Class

As alterações para o VB6 são mínimas.
Do que me lembro:

- O "Me" para "Form1"
- Não copies as designações dos Subs, apenas o conteúdo.
- Os valores do VB6 são, por defeito, 15twip=1px, e os valores usados aqui são pixeis (ou seja, multiplica por 15)
- É muito provável que vejas os controlos um pouco fora do sítio. O desenho das forms é diferente entre o VB6 e o VB7+

Acabei de escrever o código e fiz copy/paste, por isso está testado.
O efeito produz uma configuração de controlos semelhante a uma janela de chat:

TextBox1 - 1
TextBox2 - 2
Button1 - 3

1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111

2222222222222222222333333

BTW, não são propriedades manhosas... são as mais básicas. Muito simples:

TOP equivale ao Y, num referencial de 2 eixos, no ponto 0,0 do controlo
LEFT equivale ao X, num referencial de 2 eixos, no ponto 0,0 do controlo
WIDTH é o comprimento do controlo
HEIGHT é a altura do controlo

Desculpem lá a extensão do texto :wow:

EDIT: 15twip=1px, boa correção Kayvlim :) Tanto texto baralha as ideias.
 
Última edição:
Muito obrigado pela ajuda. Assim que estiver com o meu colega vou tentar implementar esse código e alterar essas definições "a la pata" para ver se resulta =D

vou dando noticias mais tarde. provavelmente com mais duvidas...inté.
 
Já experimentei usar o código enão há maneira de funcionar. O nome das funções das variaveis nao sao os mesmos, porque aqui nem sequer aparecem na lista. já tentei alterar mas como não sei a qual corresponde...=S ele chega a correr o form mas aparece vazio. mesmo com os valores multiplicados por 15 e com as alterações que sugeriste...

pelo menos já sei configurar as propriedades de tamanho, pode ser que ajude mais tarde
 
Por cá funcionou perfeitamente. Tens a certeza que criaste os controlos com os nomes certos?
O código do ribeiro55 adaptado ao VB6 é o seguinte:

Código:
Private Sub Form_Load()
        CalcularPosicoes
End Sub
Private Sub Form_Resize()
        CalcularPosicoes
End Sub
Private Sub CalcularPosicoes()
        With Text1
            .Top = 5 * 15
            .Left = 5 * 15
            .Width = Me.Width - 18 * 15
            .Height = Me.Height - 65 * 15
        End With
        With Text2
             .Top = Text1.Top + Text1.Height + 2 * 15
             .Left = 5 * 15
             .Width = Text1.Width - Command1.Width - 2 * 15
        End With
        Command1.Top = Text2.Top - 1 * 15
        Command1.Left = Text2.Left + Text2.Width + 2 * 15
    End Sub

Nota que isto é para ser posto num Form com 3 controlos: duas textboxes e uma command button, sem mudares nada. Simplesmente abre um novo projecto, dois duplo-cliques na Textbox, um duplo-clique no Command Button, colas o código e executas.

edit - as multiplicações por 15 que ali estão são a tal conversão pixels -> twips ;)
 
Por cá funcionou perfeitamente. Tens a certeza que criaste os controlos com os nomes certos?
O código do ribeiro55 adaptado ao VB6 é o seguinte:

Código:
Private Sub Form_Load()
        CalcularPosicoes
End Sub
Private Sub Form_Resize()
        CalcularPosicoes
End Sub
Private Sub CalcularPosicoes()
        With Text1
            .Top = 5 * 15
            .Left = 5 * 15
            .Width = Me.Width - 18 * 15
            .Height = Me.Height - 65 * 15
        End With
        With Text2
             .Top = Text1.Top + Text1.Height + 2 * 15
             .Left = 5 * 15
             .Width = Text1.Width - Command1.Width - 2 * 15
        End With
        Command1.Top = Text2.Top - 1 * 15
        Command1.Left = Text2.Left + Text2.Width + 2 * 15
    End Sub

Nota que isto é para ser posto num Form com 3 controlos: duas textboxes e uma command button, sem mudares nada. Simplesmente abre um novo projecto, dois duplo-cliques na Textbox, um duplo-clique no Command Button, colas o código e executas.

edit - as multiplicações por 15 que ali estão são a tal conversão pixels -> twips ;)

Sim, já consegui. Eu quando testei não retirei o conteudo das descrições dos forms, logo estava mal adaptado, osrry...lol
Pois eu quando experimentei tinha criado as textboxes e o botão, obvio xD

Bem agora daqui acho que já me consigo orientar para fazer um modelo para o meu programa.
Mas em relação a definiçao do ecra não há nada "simples" que me possa ajudar?
Obrigadão pela ajuda.
 
Nova dúvida pessoal XD:

Existe maneira de por uma barra de navegação vertical num form?
Ha e qual é a sintaxe que se usa para pesquisar por um termo? ex: temos um campo nome e quero pesquisar uma pessoa, aparece uma msgbox que pergunta qual o nome e carregando em ok ele encontra ou diz que nao existe. Como faço isto?


thanks ;)
 
Barra de navegação vertical?
Com imaginação, uns labels e umas imageboxes fazes o que bem entenderes ;)

Pesquisar algo. Em uma DB? Usa uma query.

Algo do género:

Código:
SELECT nome FROM utilizadores WHERE nome LIKE 'Ze%'
ou
Código:
SELECT COUNT(nome) FROM utilizadores WHERE nome LIKE 'Ze%'
ou sem o LIKE para pesquisa "exacta"

Depende de onde e como estás a pesquisar.

Já agora, uma messagebox não permite o que queres. Dá uma olhadela a uma Inputbox. Ainda que não ache esse método o mais correcto para introdução de critério numa pesquisa.
 
Última edição:
Bom, afinal ja não vou precisar de usar barra vertical, cabe tudo numa pagina lol

Agora no caso da pesquisa é o seguinte: tenho uma textbox para inserir o texto que quero pesquisar e 2 botoes (ok e limpar). Ao carregar no ok ele iria dar-me os resultados. Assim nao uso nem inputbox nem msgbox o que é mais facil.

entao apenas de preciso de fazer de fazer corresponder a parte do codigo "Ze%" ao nome da textbox com o texto não é? e será que funciona? lol

com a pesquisa ele iria apontar para o item na bd automaticamente?
 
Não. Apenas o "Ze".
O símbolo % é um wildcard do LIKE. Neste caso iria devolver todos os registos cuja coluna "nome" começassem por "Ze".

A query vai devolver os itens certos, sim, mas terás que os apanhar na tua aplicação como é óbvio.
 
Back
Topo