USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  API HTTP Download
gugump
IÇARA
SC - BRASIL
ENUNCIADA !
Postada em 31/08/2008 01:30 hs         
La vamos nós...

Outro probleminha:

Eu uso no CDown_Progress:

Label1.Caption = Min
Label2.Caption = Max

Isso funciona... Dai eu uso o Progressbar.Min = Min e Progressbar.Value = Max e da esse erro:

Invalid property value

O que pode ser?
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 31/08/2008 01:41 hs            
O certo é:

Progressbar.Min = 0
Progressbar.Max = Max
Progressbar.Value = Min

O Valor Min da ProgressBar nunca deve ser maior que o Value ou Max e/ou o valor Max nunca deve ser menor que o Value ou Value nunca deve ser maior que Max senão dá esse erro Invalid Property Value.

Excelent Code
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 31/08/2008 07:35 hs            
Criei uma nova versão do CDownload:

Objeto: UserControl
Nome: CDownload

'---------------------------------------------------------------------------------------------------------

'################################'
'                                '
'    Escrito por CODER_EXPERT    '
'    ------------------------    '
'                                '
'    alien.coder@hotmail.com     '
'################################'

'      31/08/2008 06:53 AM

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Enum TMETHOD
  METHOD_WAIT = 0
  METHOD_PROCESSMESSAGE = 1
End Enum

Public Enum TDATAFORMAT
  BINARY_BYTE_FORMAT = 0
  STRING_FORMAT = 1
End Enum

Public Enum TDOWNLOADSTATE
  ISNOT = 0
  INPROGRESS = 1
  ISCOMPLETED = 3
  ISDOWNLOADERROR = 4
End Enum

Dim State      As TDOWNLOADSTATE
Dim DataFormat As TDATAFORMAT

Dim binData()   As Byte
Dim Data       As String

Dim ObjectName As String
Dim FileName   As String

Event ProgressDownload(BytesMax As Long, BytesRead As Long, sObjectName As String)
Event CompletedDownload(sData As Variant, sObjectName As String)
Event ErrorDownload(sObjectName As String)

Public Function getstate() As TDOWNLOADSTATE
  Select Case State
  Case TDOWNLOADSTATE.ISNOT
    getstate = State
  Case TDOWNLOADSTATE.INPROGRESS
    getstate = State
  Case TDOWNLOADSTATE.ISCOMPLETED
    getstate = State
    State = ISNOT
  Case TDOWNLOADSTATE.ISDOWNLOADERROR
    getstate = State
  End Select
End Function

Public Function GetObjectName() As String
  If State <> ISNOT Then _
    GetObjectName = ObjectName
End Function

Public Function GetDataToFile(FileName As String) As Boolean
On Local Error GoTo Trata_Erro

Dim lngFreeFile As Long
lngFreeFile = FreeFile

  If Trim(Data) <> Empty Then
    Open FileName For Output Access Write As #lngFreeFile
      Print #lngFreeFile, Data
    Close #lngFreeFile
  Else
    GetDataToFile = False
  End If

Exit Function

Trata_Erro:
GetDataToFile = False
End Function

Public Function GetDataToVar(Optional DataFormat As TDATAFORMAT = STRING_FORMAT) As Variant
On Local Error Resume Next
  Select Case DataFormat
  Case TDATAFORMAT.BINARY_BYTE_FORMAT
    GetDataToVar = binData
  Case TDATAFORMAT.STRING_FORMAT
    GetDataToVar = Data
  End Select
End Function

Public Function URLDownload(sURL As String, Optional sFileName As String, Optional Method As TMETHOD = METHOD_WAIT, Optional sObjectName As String) As Boolean
  If Left$(UCase(sURL), 7) <> UCase("http://") Then
    State = ISDOWNLOADERROR
    RaiseEvent ErrorDownload(ObjectName)
    Exit Function
  End If
  
  If sObjectName <> Empty Then _
    ObjectName = sObjectName
  
  If sFileName <> Empty Then _
    FileName = sFileName
  
  State = INPROGRESS
  AsyncRead sURL, 1
    
  If Method = METHOD_WAIT Then
    Do
      DoEvents
      Sleep 1

      If State = ISDOWNLOADERROR Then
        'Erro ao tentar baixar arquivo
        URLDownload = False
        Exit Function
      ElseIf State = ISCOMPLETED Then
        'Arquivo baixado com sucesso
        URLDownload = True
        Exit Function
      End If
    Loop
  Else
    'Prossegue verdadeiro
    URLDownload = True
  End If
End Function

Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
On Local Error GoTo Trata_Erro

Dim lngFreeFile As Long
lngFreeFile = FreeFile

Erase binData
Open AsyncProp.Value For Binary As #lngFreeFile
  'Obtém o arquivo em formato de String
  Data = Space(FileLen(AsyncProp.Value))
  Get #lngFreeFile, , Data

  'Obtém o arquivo em fomato binário
  ReDim binData(LOF(lngFreeFile) - 1)
  Get lngFreeFile, , binData
Close #lngFreeFile

If FileName <> Empty Then
  If Trim(Data) <> Empty Then
    Open FileName For Output Access Write As #lngFreeFile
      Print #lngFreeFile, Data
    Close #lngFreeFile
    
    State = ISCOMPLETED
    RaiseEvent CompletedDownload(Data, ObjectName)
  Else
    State = ISDOWNLOADERROR
    RaiseEvent ErrorDownload(ObjectName)
  End If
Else
  If Trim(Data) <> Empty Then
    State = ISCOMPLETED
    RaiseEvent CompletedDownload(Data, ObjectName)
  Else
    State = ISDOWNLOADERROR
    RaiseEvent ErrorDownload(ObjectName)
  End If
End If

On Local Error Resume Next
If Dir$(AsyncProp.Value, vbReadOnly Or vbHidden Or vbSystem) <> Empty Then
  SetAttr AsyncProp.Value, vbNormal
  Kill AsyncProp.Value
End If
On Local Error GoTo Trata_Erro

Exit Sub
Trata_Erro:

State = ISDOWNLOADERROR
RaiseEvent ErrorDownload(ObjectName)
End Sub

Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty)
  State = INPROGRESS

  RaiseEvent ProgressDownload(AsyncProp.BytesMax, AsyncProp.BytesRead, ObjectName)
End Sub

'---------------------------------------------------------------------------------------------------------

* Como usá-la:
------------------

Private Sub Command1_Click()
Dim bDown As Boolean
'Faz o download do arquivo ou página da web e define um nome para o objeto
'Esse código também envia POST para o servidor
bDown = CDown.URLDownload("http://www.uol.com.br/", , METHOD_WAIT, "UOL_PAGE")

'Obtém o conteúdo em formato binário do arquivo
Dim File() As Byte
File = CDown.GetDataToVar(BINARY_BYTE_FORMAT)

'Obtém o conteúdo em formato string do arquivo
Dim sFile As String
sFile = CDown.GetDataToVar(STRING_FORMAT)

'Exibe conteúdo do arquivo
MsgBox sFile

'Exibe o nome do Objeto
MsgBox CDown.GetObjectName

'Grava o Download que está na memória para o HD
CDown.GetDataToFile "C:Content.txt"

'Obtém o estado do download
Dim retState As TDOWNLOADSTATE
retState = CDown.getstate

'Checa o estado do download
If retState = ISCOMPLETED Then
  MsgBox "Download Completado com sucesso"
ElseIf retState = ISDOWNLOADERROR Then
  MsgBox "Erro ao fazer download de arquivo"
End If
End Sub

* Exemplo mais simplificado:
---------------------------------

Dim bDown As Boolean
bDown = CDown.URLDownload("http://www.uol.com.br/")

If bDown Then
  MsgBox "Download completado com sucesso."
  
  MsgBox CDown.GetDataToVar(STRING_FORMAT)
Else
  MsgBox "Erro ao fazer download"
End If

* Estilo API URLDownloadToFile:
--------------------------------

CDown.URLDownload "http://www.uol.com.br/", "C:UOL_Page.txt"

* Outra forma de usar:
---------------------------

CDown.URLDownload "http://www.uol.com.br/", , METHOD_PROCESSMESSAGE

Dim retState As TDOWNLOADSTATE
retState = CDown.getstate

While retState <> ISCOMPLETED
  retState = CDown.getstate
  DoEvents
Wend

If retState = ISCOMPLETED Then
  MsgBox "Download Completado com sucesso"
ElseIf retState = ISDOWNLOADERROR Then
  MsgBox "Falha ao fazer download"
End If

MsgBox CDown.GetDataToVar(STRING_FORMAT)

Excelent Code
   
gugump
IÇARA
SC - BRASIL
ENUNCIADA !
Postada em 31/08/2008 12:14 hs         
Agora sim! Consigo salvar o download perfeitamente! hehehe

Então... Como você mudou a parte do ProgressDownload, eu não consegui fazer funcionar a progressbar

Tentei assim:

ProgressBar1.Min = 0
ProgressBar1.Max = BytesMax
ProgressBar1.Value = BytesRead

O que precisa e o que não precisa ai?

Abs
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 31/08/2008 14:40 hs            
Tá com uma falha no evento ProgressDownload, vou resolver e logo mando o código atualizado.

Excelent Code
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 02/09/2008 20:11 hs            
?????????

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long

Public Function DllRegisterServer(DllName As String) As Boolean
  Dim hLibrary As Long, hProcAdress As Long, Ret As Long
  
  hLibrary = LoadLibrary(DllName)
  
  If hLibrary <> 0 Then
    hProcAdress = GetProcAddress(hLibrary, "DllRegisterServer") 'DllUnRegisterServer para DesRegistrar
    
    If hProcAdress <> 0 Then
      Ret = _
        CallWindowProc(hProcAdress, GetDesktopWindow, "", ByVal 0&, ByVal 0&)

        DllRegisterServer = True
    Else
      'Arquivo carregado porém o ponto de entrada não foi encontrado
      'Arquivo não pode ser registrado
    End If
  Else
    'Arquivo não encontrado
  End If

  FreeLibrary hLibrary
End Function
   
Página(s): 5/6     « ANTERIOR    PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página