DOEVENTS
Olá pessoal.
Sou super novato em Vb e preciso de uma ajudinha,
Tenho o seguinte código
Filecopy "Origem" , "destino"
COmo uso do Events para quando a cópia do arquivo começar eu poder continuar usando o comando Timer sem que ele pare?
Sou super novato em Vb e preciso de uma ajudinha,
Tenho o seguinte código
Filecopy "Origem" , "destino"
COmo uso do Events para quando a cópia do arquivo começar eu poder continuar usando o comando Timer sem que ele pare?
Não foi exatamete isto , foi porque os usuários não compreenderam muito bem , então resolvi postar outra , mais desculpe se atrapalhei , vou procurar não fazer isto . E como sou novo no Fórum , nem sabia que existiam tais regras , vou dar uma lida nelas agora.
OBRIGADO.
OBRIGADO.
Entendi seu intuito, percebi que você quiz ser mais especifico na sua pergunta, mas como o meu trabalho é fiscalizar o fórum eu tenho que zelar pela harmonia das regras do forum.
OBRIGADO.
OBRIGADO.

colocando a propriedade INTERVAL = 1000
Private Sub Timer1_Timer()
Do events
End Sub
Era isso ??
Private Sub Timer1_Timer()
Do events
End Sub
Era isso ??
Creio que não é isso não IVOFABIANO, pois o timer fica inativo, então o DOEVENT tem que acontecer sem o timer por que se for dentro de um timer não funciona ja que ao executar o programa o timer fica inativo automaticamente.
Ele quer justamente poder usar o timer sem que ele pare de funcionar na hora que o programa estiver copiando o arquivo.
Ele quer justamente poder usar o timer sem que ele pare de funcionar na hora que o programa estiver copiando o arquivo.
usando file copy o que você vai conseguir fazer é:
em uma lista de vários arquivos que devem ser copiados de um lado para o outro, colocar um loop - e depois do filecopy colocar o doevents (normalmente isto é feito com um vÃdeozinho que fica simulando a cópia e tem uma barra progressiva que é atualizada a cada fim de arquivo)
exemplo:
(nao tenho o vb - sugiro checar os comandos)
progress1.max = filelen(arq1) + filelen(arq3) + filelen(arq5)
filecopy arq1, arq2
doevents
progress1.value = filelen(arq1)
filecopy arq3, arq4
doevents
progress1.value = filelen(arq1) + filelen(arq3)
filecopy arq5, arq6
progress1.value = filelen(arq1) + filelen(arq3) + filelen(arq5)
(coloque em um loop - a logica eh essa)
para fazer algo mais "real" - vc precisaria abrir o arquivo em modo binario e a cada copia para o outro lado vc atualiza o progress...
(exemplo com input e output - ideal por binary)
progress1.max = filelen(arq1)
i=freefile
open arq1 for input as #i
j=freefile
open arq2 for output as #j
do while not eof(i)
line input #i, linha
print #j, linha
progress1.value = progress1.value + len(linha)
doevents
loop
close #i
close #j
ja vou avisando que o doEvents vai aumentar e muito o tempo de execucao da rotina e que para a barra um refresh ja deve ser o suficiente
em uma lista de vários arquivos que devem ser copiados de um lado para o outro, colocar um loop - e depois do filecopy colocar o doevents (normalmente isto é feito com um vÃdeozinho que fica simulando a cópia e tem uma barra progressiva que é atualizada a cada fim de arquivo)
exemplo:
(nao tenho o vb - sugiro checar os comandos)
progress1.max = filelen(arq1) + filelen(arq3) + filelen(arq5)
filecopy arq1, arq2
doevents
progress1.value = filelen(arq1)
filecopy arq3, arq4
doevents
progress1.value = filelen(arq1) + filelen(arq3)
filecopy arq5, arq6
progress1.value = filelen(arq1) + filelen(arq3) + filelen(arq5)
(coloque em um loop - a logica eh essa)
para fazer algo mais "real" - vc precisaria abrir o arquivo em modo binario e a cada copia para o outro lado vc atualiza o progress...
(exemplo com input e output - ideal por binary)
progress1.max = filelen(arq1)
i=freefile
open arq1 for input as #i
j=freefile
open arq2 for output as #j
do while not eof(i)
line input #i, linha
print #j, linha
progress1.value = progress1.value + len(linha)
doevents
loop
close #i
close #j
ja vou avisando que o doEvents vai aumentar e muito o tempo de execucao da rotina e que para a barra um refresh ja deve ser o suficiente
Complemntando e minimizando o problema de tempo de execução com o Do Events.
Substitua o Do Events assim:
'Num Módulo
Private Declare Function GetInputState Lib "user32" () As Long
' Onde tiver o Do Events :
If i Mod 2 Then
If GetInputState() <> 0& Then DoEvents
End If
Com isso ele só ocorre quando houver um evento de "interface"
Dá pra ganhar uns segundinhos de performance.
Abs
Substitua o Do Events assim:
'Num Módulo
Private Declare Function GetInputState Lib "user32" () As Long
' Onde tiver o Do Events :
If i Mod 2 Then
If GetInputState() <> 0& Then DoEvents
End If
Com isso ele só ocorre quando houver um evento de "interface"
Dá pra ganhar uns segundinhos de performance.
Abs
Tópico encerrado , respostas não são mais permitidas