ALTERNAR COMANDOS DE VARIOS OBJETOS EM EXECUCAO

MARCOSCAMPOS 24/10/2013 11:21:25
#430356
Bom dia pessoal
é minha primeira postagem no Forum, alguem poderia ajudar, estou desenvolvendo um simulador de ATC ( CONTROLE DE TRAFEGO AEREO ) e preciso durante a execuçao do programa alternar o controle de direçao dos objetos ( labels ) na tela do Radar ( Display ).
exemplo: tenho um objeto sob controle usando varios Timers, tem como eu alternar o controle para outro objeto usando os mesmos timers ? tipo, estou usar uma centro de ferramentas unicas para controlar a direçao de varios objetos individualmente.
MARCOSCAMPOS 24/10/2013 11:54:35
#430358
Abaixo segue a rotina para quem quiser fazer um teste no vb6 e me ajudar!


PROJETO SIMULADOR DE ATC ( AIR TRAFFIC CONTROL )

Private Sub Command10_Click()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = True
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = False
Timer7.Enabled = False
Timer8.Enabled = False
Timer9.Enabled = False
Text3.Text = 270
End Sub

Private Sub Command11_Click()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = False
Timer7.Enabled = False
Timer8.Enabled = True
Timer9.Enabled = False
Text3.Text = 315
End Sub

Private Sub Command12_Click()
Timer1.Interval = 1
Timer2.Interval = 1
Timer3.Interval = 1
Timer4.Interval = 1
Timer5.Interval = 1
Timer6.Interval = 1
Timer7.Interval = 1
Timer8.Interval = 1
Text6.Text = 350
End Sub

Private Sub Command13_Click()
Timer1.Interval = 20
Timer2.Interval = 20
Timer3.Interval = 20
Timer4.Interval = 20
Timer5.Interval = 20
Timer6.Interval = 20
Timer7.Interval = 20
Timer8.Interval = 20
Text6.Text = 250
End Sub

Private Sub Command14_Click()
Timer1.Interval = 40
Timer2.Interval = 40
Timer3.Interval = 40
Timer4.Interval = 40
Timer5.Interval = 40
Timer6.Interval = 40
Timer7.Interval = 40
Timer8.Interval = 40
Text6.Text = 180
End Sub

Private Sub Command15_Click()
Timer1.Interval = 60
Timer2.Interval = 60
Timer3.Interval = 60
Timer4.Interval = 60
Timer5.Interval = 60
Timer6.Interval = 60
Timer7.Interval = 60
Timer8.Interval = 60
Text6.Text = 140
End Sub

Private Sub Command2_Click()
End
End Sub
Private Sub Command3_Click()
L4.Top = 2280
L4.Left = 0
End Sub

Private Sub Command4_Click()
Timer1.Enabled = True
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = False
Timer7.Enabled = False
Timer8.Enabled = False
Timer9.Enabled = False
Text3.Text = 360
End Sub

Private Sub Command5_Click()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = True
Timer6.Enabled = False
Timer7.Enabled = False
Timer8.Enabled = False
Timer9.Enabled = False
Text3.Text = 45
End Sub

Private Sub Command6_Click()
Timer1.Enabled = False
Timer2.Enabled = True
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = False
Timer7.Enabled = False
Timer8.Enabled = False
Timer9.Enabled = False
Text3.Text = 90
End Sub

Private Sub Command7_Click()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = True
Timer7.Enabled = False
Timer8.Enabled = False
Timer9.Enabled = False
Text3.Text = 135
End Sub

Private Sub Command8_Click()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = True
Timer5.Enabled = False
Timer6.Enabled = False
Timer7.Enabled = False
Timer8.Enabled = False
Timer9.Enabled = False
Text3.Text = 180
End Sub

Private Sub Command9_Click()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False
Timer6.Enabled = False
Timer7.Enabled = True
Timer8.Enabled = False
Timer9.Enabled = False
Text3.Text = 225
End Sub

Private Sub Form_Load()
End Sub
Private Sub Timer1_Timer()
L4.Top = L4.Top - 1
L4.Left = L4.Left
Text2.Text = L4.Top
Text1.Text = L4.Left
End Sub

Private Sub Timer10_Timer()
L4.Top = L4.Top
L4.Left = L4.Left + 1
Text2.Text = L4.Top
Text1.Text = L4.Left
End Sub

Private Sub Timer11_Timer()
L3.Top = L3.Top + 1
L3.Left = L3.Left - 1
L4.Top = L4.Top + 1
L4.Left = L4.Left + 1
L5.Top = L5.Top - 1
L5.Left = L5.Left + 1
L6.Top = L6.Top + 1
L6.Left = L6.Left + 1
L7.Top = L7.Top - 1
L7.Left = L7.Left - 1
L8.Top = L8.Top + 1
L8.Left = L8.Left - 1
L9.Top = L9.Top - 1
L9.Left = L9.Left + 1
End Sub

Private Sub Timer2_Timer()
L4.Top = L4.Top
L4.Left = L4.Left + 1
Text2.Text = L4.Top
Text1.Text = L4.Left
If L4.Top = 3960 And L4.Left > 5000 Then
Timer2.Enabled = False
Timer9.Enabled = True
End If
End Sub

Private Sub Timer3_Timer()
L4.Top = L4.Top
L4.Left = L4.Left - 1
Text1.Text = L4.Left
Text2.Text = L4.Top
End Sub

Private Sub Timer4_Timer()
L4.Top = L4.Top + 1
L4.Left = L4.Left
Text2.Text = L4.Top
Text1.Text = L4.Left
End Sub

Private Sub Timer5_Timer()
L4.Top = L4.Top - 1
L4.Left = L4.Left + 1
Text2.Text = L4.Top
Text1.Text = L4.Left
If L4.Top = 3960 And L4.Left > 5000 Then
Timer5.Enabled = False
Timer9.Enabled = True
End If
End Sub

Private Sub Timer6_Timer()
L4.Top = L4.Top + 1
L4.Left = L4.Left + 1
Text2.Text = L4.Top
Text1.Text = L4.Left
If L4.Top = 3960 And L4.Left > 5000 Then
Timer6.Enabled = False
Timer9.Enabled = True
End If
End Sub

Private Sub Timer7_Timer()
L4.Top = L4.Top + 1
L4.Left = L4.Left - 1
Text2.Text = L4.Top
Text1.Text = L4.Left
End Sub

Private Sub Timer8_Timer()
L4.Top = L4.Top - 1
L4.Left = L4.Left - 1
Text2.Text = L4.Top
Text1.Text = L4.Left
End Sub

Private Sub Timer9_Timer()
L4.Top = 3960
L4.Left = L4.Left + 1
If L4.Left >= 6500 Then
L4.BackColor = &H8080&
Timer9.Interval = 60
Text6.Text = 140
End If
If L4.Left >= 7800 Then
Timer9.Enabled = False
L4.Visible = False
End If
End Sub
TUNUSAT 24/10/2013 14:26:27
#430362
MarcosCampos,


Estou querendo ajudar, mas queria que você me dissesse o que acha destas idéias. Se você não gostar, não fique bravo... Olha o que podemos melhorar (se você quiser):

Percebeu que temos várias chamadas iguais para vários objetos? Exemplo:

=========================
...
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = True
...
=========================

Como podemos melhorar isto? Várias formas!

1º) Podemos definir um único objeto. Exemplo: [Ô]Combobox[Ô] na tela e depois mandar replicá-los.

Veja dois exemplos que tem aqui no VBMania:

- CRIAR COMBOS DINAMICAMENTE
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=9110

- TH2 (Isto é um jogo! As argolas são criadas a partir de uma única e você pode escolher quantas quer em run-time)
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=4845


Outra coisa legal para se pensar é [Ô]Multi-Threads[Ô] ... você pode controlar vários objetos ao mesmo tempo. O problema é a limitação de depuração em [Ô]design time[Ô]. veja em:

[ô]A Thread to Visual Basic: Multi-Threading In VB5 and VB6
[ô]http://www.freevbcode.com/ShowCode.asp?ID=1287
[ô]O exemplo está em: ftp.desaware.com/SampleCode/Articles/Thread.zip

Vou montar este exemplo e postar aqui.

Você fará com que os objetos (ou aviões) voem livremente e aleatóriamente ou traçará uma rota prévia para eles?

Dica: Explique um pouco melhor o que você deseja para que o pessoal aqui possa te ajudar.


[][ô]s,
Tunusat.
MARCOSCAMPOS 24/10/2013 15:36:12
#430368
Tunusat, primeiramente fico muito grato pelo retorno! e longe de mim achar ruim alguma coisa aqui rsrsr, sou iniciante em programaçao e estou me familiarizando com o VB6, vou analisar com atençao todas as suas sugestões!

explicando o funcionamento do Simulador:

A principio o programa deve fazer com que os avioes ( labels ou Imagens ) voem aleatoriamente no painel e tambem cheguem em tempos diferentes.
Durante este processo, o controlador assume o controle da rota dos avioes dando-lhes coordenadas para guiar até determinados pontos, tipo, passar instruçoes que possibilitem os avioes mudar de rumo, acelerar ou diminuir a velocidade isto feito individualmente para cada um deles, exemplo: seleciono um determinado aviao e ele deve responder aos comandos passados e manter os comandos enquanto eu passo instruçao a outro aviao.
basicamente é isto que preciso para desenvolver este projeto de simulador.

grato pela ajuda!
TUNUSAT 24/10/2013 16:04:33
#430370
MarcosCampos,


Legal!

Você pode criar uma tela e colocar um objeto [Ô]picture[Ô] de uma silueta de avião e fazer este picture passear na tela.
Daí você faz um ponto [Ô]randomico[Ô] (randomize) para colocar, por exemplo três aviões na tela e ir incrementando o [Ô]Left[Ô] e o [Ô]top[Ô] deles.

Você pode fazer um painel de controle na lateral e dizer em uma [Ô]label[Ô]:
- Avião:
- Coordenada X:
- Coordenada Y:

Dai você coloca o número do Avião, e as novas coordenadas (ao clicar o número do avião pode aparecer a coordenada que ele já tem).
Acredito que se você trabalhar [Ô]multi-thread[Ô] o avião continuará sua rota (antes e depois de mudada) independe de você estar digitando a coordenada dele ou de outro avião.

Tem um exemplo aqui no VBMania de Multi-Thread que acho que te atende!

MULTI THREADING
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=829

Veja que o modal [Ô]message box[Ô] continua trabalhando, mesmo com ele aberto (o que significa que o outro form está rodando independentemente do [Ô]message box[Ô].

Tem outros exemplos aqui de Multi Thread.

Tenta montar ai depois posta o código aqui se você tiver alguma dúvida.


[][ô]s,
Tunusat.
MARCOSCAMPOS 24/10/2013 16:16:34
#430372
Blz! vou montar depois coloco aqui para verificar!

grato!
MARCOSCAMPOS 31/10/2013 09:33:20
#430572
bom dia

pessoal, tentei e nao consegui usar o processo de Multi Thread para o meu projeto... basicamente o que eu preciso:

tenho imagens na tela todas com seus movimentos semelhantes porem em velocidade e rumos diferentes umas das outras.
com o programa em execuçao preciso selecionar individualmente cada uma delas e passar instruçoes de mudança de direçao e velocidade.
exemplo:
seleciono img1 - passo as instruçoes atraves de botao de comando
seleciono img2 - passo as instruçoes atravez de botao de comando
e assim por diante...

nota- eu ja consegui fazer o processo, porem usando somente uma imagem, e esta funcionando blz, agora quero multiplicar a quantidade de imagens no cenario.

obrigado!
MARCELO.TREZE 31/10/2013 10:19:35
#430575
Resposta escolhida
MARCOSCAMPOS 31/10/2013 12:51:35
#430589
Marcelo,

blza! é isto mesmo! vou dar um estudada no codigo e ver oque posso aplicar no qual estou fazendo.

valew!
Tópico encerrado , respostas não são mais permitidas