Ver Mensaje Individual
  #4  
Antiguo 30-03-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Yo no soy muy amigo de componentes, aunque la misma VCL es un conjunto de ellos...

Bueno, me gustaría exponer una solución usando sólo API sin componentes de terceros ni de la VCL en la función de lectura de la Web:

Código:
#include <vector>

bool InternetReadWeb(char* URL, std::vector<BYTE> *Vector)
{
  HINTERNET hNet;
  HINTERNET hUrl;
  BYTE  Buffer;
  DWORD BytesRead = 0;
  bool Result = false;

  if(InternetAttemptConnect(0) != ERROR_SUCCESS) return Result;

  hNet = InternetOpen("App", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
  if (hNet){
    hUrl = InternetOpenUrl(hNet, URL, NULL, 0, INTERNET_FLAG_RELOAD, 0);
    if (hUrl){
      // Lee la pagina web...
      for(int ind=0; ; ind+=BytesRead){
        Result = InternetReadFile(hUrl, &Buffer, sizeof(BYTE), &BytesRead);
        if(Result && BytesRead==0) break;
        Vector->push_back(Buffer);
      }
      InternetCloseHandle(hUrl);
    }
    InternetCloseHandle(hNet);
  }

  return Result;
}
Y el uso de esta función para el caso particular de esta pregunta:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::vector<BYTE> Memory;
    InternetReadWeb("http://www.clubdelphi.com/", &Memory);
    RichEdit1->Text = (char*)&Memory[0];
}
Tenemos algo mas de código, pero nos hacemos independientes de las Indy.

Saludos.
Responder Con Cita