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

(Resolvido)Aba navegador, Piscar na barra


Matheus-vb6

Pergunta

Boa tarde pessoal... tenho 2 duvidas aqui

1- aba navegador: criei uma especie de navegador, e gostaria de trabalhar com abas nele... como eu crio objetos(programados) via código??

2- Piscar na barra: tipo MSN, quando ele pisca... gostaria de saber como eu programo pra tipo ele piscar se o programa ficar fora de foco por X tempo...

Abraços :D

Editado por Matheus-vb6
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

pra trabalhar com abas, use o objeto TabStrib do Microsoft Windows Common Controls 6.0 ou a SSTab do Microsoft Tabbed Dialog Control 6.0. eu gosto mais do SSTab.

a parte dos objetos programados, você fala em criar controles em tempo de execucao??

pra adicionar um novo Label no form, seria isso, por exemplo:

Dim x As Label

Set x = Me.Controls.Add("VB.Label", "x")

Set x.Container = Form1
x.Visible = True

x.Caption = "texto"[/code] mas se a todo momento o cara puder adicionar novas tabs e novos objetos tiverem q ser mostrados, o melhor é você usar um array de objetos (seleciona um objeto qualquer, copie-o e cole. quando ele perguntar se deseja criar o array, clique em "Sim". ai sera criado um array para esse objeto, sendo q o q foi colado sera o indice 1. ai você pode apagar esse do indice 1, já q a intencao é criar depois durante a execucao). ai pra adicionar novos indices por codigo, você faria:
[code]Load seu_controle(seu_controle.Count)
e pra remover:
seu_controle(indice).Remove

a parte de piscar, mais tarde faco uns testes e dar uma pesquisada e se eu encontrar qualquer coisa eu posto aqui.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu testei aqui, e pelo visto vai ser muito trabalhoso fazer um navegador com abas... mas vou continuar tentando

Abraços :D

edit--

Deu erro ao tentar criar um webbrowser

Private Sub SSTab1_DblClick()
Dim x As WebBrowser

Set x = Me.Controls.Add("VB.WebBrowser", "x")
Set x.Container = Form1
x.Visible = True
x.Navigate ("www.youtube.com")
End Sub

Run-time error '711':

Invalid class string

Looking for object with ProgID: Vb.WebBrowser

A proposito, como eu identifico, na tab, onde está sendo o clique? no caso... em qual tab...

Editado por Matheus-vb6
Link para o comentário
Compartilhar em outros sites

  • 0

com webbrowser é mais complicado. vou passar uma explicacao aqui, mas la pra baixo passei o codigo funcionado certinho.

primeiro de tudo, naquele codigo do label, a gente passava pro Controls.Add() a string "VB.Label", certo?? essa string é um tipo de uma identificacao do objeto dentro do vb6, chamada de ProgId. no caso, o "VB" q aparece no comeco da string é o nome da biblioteca a q pertence o objeto. pra verificar isso, faca o seguinte, na janela de codigos, aperte F2. ele vai mostrar a lista de objetos, funcoes e constantes de cada uma das biliotecas adicionadas ao seu projeto. você vai ver q o objeto Label faz parte de uma biblioteca chamada "VB". por isso "VB.Label".

geralmente, mas não sempre, o ProgId do objeto é escrito "Nome_da_Biblioteca.Nome_do_Objeto", como no caso do Label. mas isso não funciona com o WebBrowser.

se você adicionar o componente do Microsoft Internet Controls (q adiciona o webbrowser no seu projeto), vai ver q o nome da biblioteca dentro do vb6 é "SHDocVwCtl".

agora, caso você tente esse codigo:

Set x = Me.Controls.Add("SHDocVwCtl.WebBrowser", "x")
você recebera a mensagem de erro falando q esse ProgId não é valido. mas, felizmente, o vb6, entende q você tava querendo apontar pro WebBrowser e aponta pra você o ProgId correto q é "Shell.Explorer.2". e ainda bem q ele faz isso, porque eu particularmente não ia saber como descobrir qual é a ProgId do objeto, se ele não avisasse na mensagem de erro. agora, a gente já sabe qual string usar no metodo Controls.Add(), mas ainda tem mais uma coisa. caso no seu projeto já haja adicionado um objeto WebBrowser em qualquer form, é so você usar o codigo normalmente q deve funcionar. agora, caso não tenha nenhum WebBrowser carregado em nenhum form, o vb6 não vai saber como carregar um novo em tempo de execucao. se você adiciona um componente qualquer no vb6, ele não é automaticamente vinculado com o .exe depois da compilacao (ou mesmo rodando o programa dentro do vb6). a não ser q algum objeto dessa biblioteca tenha sido usado, o .exe não vai conter os dados dos objetos, pra não ocupar espaco desnecessario, já q o v6 entende q a biblioteca não foi usada. mas você pode resolver isso alterando as opcoes das propriedades do projeto. RESUMINDO: clique em menu Project -> Project1 Properties.... na janela q abrir, na aba Make, descheque a opcao Remove information about unused ActiveX Controls e clique em OK. agora, use o seguinte codigo q deve funcionar:
Private Sub SSTab1_DblClick()
Dim x As WebBrowser

Set x = Me.Controls.Add("Shell.Explorer.2", "x")
Set x.Container = Form1
x.Visible = True
x.Navigate ("www.youtube.com")
End Sub[/code]

veja ai se funciona.

mas de qualquer modo, apesar da explicacao toda, esse metodo não é muito legal caso você queira um numero ilimitado de abas (ou 99 abas q é o maximo q o SSTab suporta). você teria problemas na hora de associar eventos a cada objeto.

agora, caso você usasse aquela dica q passei do array, seria muito mais simples.

A proposito, como eu identifico, na tab, onde está sendo o clique? no caso... em qual tab...

no momento do clique ele deve mudar pra aba selecionada. então você pega por SSTab1.Tab.

Link para o comentário
Compartilhar em outros sites

  • 0

Caramba cara, otima explicação... No caso então, se fosse pra mim criar um indice entre os webbrowser, seria x.index = NAVEGADORDATELA.index+1?

e para mostrar a aba escolhida, seria

numero = val(sstab1.tab)

%% codigo para ocultar todos browser %%

x(numero).visible=true
Vou implementar a logica para o funcional... Vlws kuroi :D edit==
Private Sub SSTab1_DblClick()
If SSTab1.Tab = 1 Then
Dim x As WebBrowser

Set x = Me.Controls.Add("Shell.Explorer.2", "x")

Set x.Container = Form1
x.Visible = True
x.Navigate ("www.youtube.com")
'x.index = SSTab1.Tab
x.Top = net(0).Top
x.Left = net(0).Left
x.Width = net(0).Width
x.Height = net(0).Height
End If

End Sub

Ele apresentou erro no x.index... comentei a linha e ao tentar criar outro objeto, ele disse q já existe um chamado X... como crio uma array?

Editado por Matheus-vb6
Link para o comentário
Compartilhar em outros sites

  • 0
2- Piscar na barra: tipo MSN, quando ele pisca... gostaria de saber como eu programo pra tipo ele piscar se o programa ficar fora de foco por X tempo...

achei aqui, tem uma api chamada FlashWindow() q faz isso. pra saber se a janela ta fora de foco, use a api GetForeGroundWindow(). declare assim:

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function FlashWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal bInvert As Long) As Long[/code] esse codigo faz a janela piscar caso esteja fora de foco. ai você pode por dentro dum timer e ir contando numa variavel esse X tempo ou coisa assim:
[code]If GetForegroundWindow() <> Me.hwnd Then
    FlashWindow Me.hwnd, 1
End If
Ele apresentou erro no x.index...
em vez de:
Set x.Container = Form1
coloque:
Set x.Container = SSTab1
e ele vai aparecer dentro da tab atual.
comentei a linha e ao tentar criar outro objeto, ele disse q já existe um chamado X... como crio uma array?
acho q na hora do Controls.Add(), o segundo parametro é o nome do objeto dentro do formulario. não pode ter dois com o nome de "x". você pode ir dandos os nomes "x1", "x2", "x3", etc. inicialize uma variavel com 1 e depois va somando:
Set x = Me.Controls.Add("Shell.Explorer.2", "x" & i)
i = i + 1[/code] depois pra acessar o controle, você tb pode pegar pelo nome q você passou no parametro, você não precisa mais da variavel original, exemplo:
[code]Dim x As Label

Set x = Me.Controls.Add("VB.Label", "x" & i)

Set Me.Controls("x" & i).Container = Form1
Me.Controls("x" & i).Visible = True

Me.Controls("x" & i).Caption = "texto"
agora, aquela parte do array, é so pra caso você precise criar eventos pro seu WebBrowser, ou pra qualquer outro controle q você esteja adicionando. exemplo, imagine q você queira chamar o evento GotFocus do WebBrowser pra saber em q momento ele recebe o foco. tipo assim:
Private Sub WebBrowser1_GotFocus()

End Sub[/code] a dificuldade ta em não ter q escrever no codigo um evento pra cada objeto. como você vai fazer pra saber qual das WebBrowsers ta chamando o evento. se você tiver então 99 WebBrowsers no form, você vai escrever o mesmo evento 99 vezes?? a ideia era fazer como eu expliquei aqui:
mas se a todo momento o cara puder adicionar novas tabs e novos objetos tiverem q ser mostrados, o melhor é você usar um array de objetos (seleciona um objeto qualquer, copie-o e cole. quando ele perguntar se deseja criar o array, clique em "Sim". ai sera criado um array para esse objeto, sendo q o q foi colado sera o indice 1. ai você pode apagar esse do indice 1, já q a intencao é criar depois durante a execucao). ai pra adicionar novos indices por codigo, você faria:
[code]Load seu_controle(seu_controle.Count)
e pra remover:
seu_controle(indice).Remove

ai você não usaria mais aquele codigo do Controls.Add(). pra adicionar um novo controle é so chamar esse codigo do Load().

se no seu projeto você não ta pensando em chamar eventos do WebBrowser então continue como você ta fazendo. agora, se você pretende chamar os eventos e ainda assim quer continuar como você ta fazendo, tem dois jeitos diferentes q encontrei de fazer, mas são bem complicados, de uma olhada:

http://www.vbforums.com/showthread.php?t=372811

http://www.vbforums.com/showthread.php?p=3109544#post3109544

Link para o comentário
Compartilhar em outros sites

  • 0

O formulário se inicia com um browser chamado "net" com index 0.... a idéia era que, quando o usuario clicasse em "nova aba" criasse um novo objeto com o mesmo nome "net" e o index net.count+1,... ai eu só programaria uma vez...

no caso botoes e tudo mais estão tudo certinho, tão com x(numero) nananan...

No 'Set x = Me.Controls.Add("Shell.Explorer.2", "x") não tem como espeficicar um indice??

Abraços :D

Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou cara \o... vlws mesmo, aprendi mta coisa com isso...

Não fexa o tópico ainda não pois vou testar o piscar ainda..

Vlws mesmo abraçao :D

edit---

Piscar funcionou tranquilo

Abraços cara

Tópico resolvido

Editado por Matheus-vb6
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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...