1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[PAP - VB6] - Dúvida!

Discussão em 'Programação' iniciada por MuseBass, 18 de Fevereiro de 2009. (Respostas: 28; Visualizações: 1362)

  1. 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: 18 de Fevereiro de 2009
  2. ribeiro55

    ribeiro55 Power Member

    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.
     
  3. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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.
     
  4. ribeiro55

    ribeiro55 Power Member

    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.
     
  5. 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:
     
  6. ribeiro55

    ribeiro55 Power Member

    Ó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.
     
  7. 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
     
  8. ribeiro55

    ribeiro55 Power Member

    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)
     
  9. 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:
     
  10. Armadillo

    Armadillo Folding Member

    ...significa que terás de programar as localizações dos objectos dentro dos formulários, associados ao evento resize. Não é nada de complicado, mas sempre são umas linhas de código.
     
  11. ribeiro55

    ribeiro55 Power Member

    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: 20 de Fevereiro de 2009
  12. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Só uma correcção: 1 pixel = 15 twips, e não o contrário :P
     
  13. 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é.
     
  14. 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
     
  15. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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 ;)
     
  16. 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.
     
  17. 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 ;)
     
  18. ribeiro55

    ribeiro55 Power Member

    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: 4 de Março de 2009
  19. 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?
     
  20. ribeiro55

    ribeiro55 Power Member

    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.
     

Partilhar esta Página