|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"[Wininet]InternetSetStatusCallback"
usesにWininetを加えてください。Wininet.dllはInternet Explorerで使われ
ているDLLです。
procedure MyCallback(hInet: HINTERNET; dwcontex, dwInternetStatus: DWORD;
lpvStatusInformation: Pointer; dwStatusInformationLength: DWORD); stdcall;
begin
case dwInternetStatus of
INTERNET_STATUS_RESOLVING_NAME:
Form1.ListBox1.Items.Add('IPアドレスの取得中');
INTERNET_STATUS_NAME_RESOLVED:
Form1.ListBox1.Items.Add('IPアドレスを取得終了');
INTERNET_STATUS_CONNECTING_TO_SERVER:
Form1.ListBox1.Items.Add('サーバへ接続中');
INTERNET_STATUS_CONNECTED_TO_SERVER:
Form1.ListBox1.Items.Add('サーバへ接続終了');
INTERNET_STATUS_SENDING_REQUEST:
Form1.ListBox1.Items.Add('要求発行中');
INTERNET_STATUS_REQUEST_SENT:
Form1.ListBox1.Items.Add('要求発行終了');
INTERNET_STATUS_RECEIVING_RESPONSE:
Form1.ListBox1.Items.Add('サーバの応答を待機中');
INTERNET_STATUS_RESPONSE_RECEIVED:
Form1.ListBox1.Items.Add('サーバの応答終了');
INTERNET_STATUS_REDIRECT:
Form1.ListBox1.Items.Add('自動リダイレクトによる要求の転送中');
INTERNET_STATUS_CLOSING_CONNECTION:
Form1.ListBox1.Items.Add('サーバから切断中');
INTERNET_STATUS_CONNECTION_CLOSED:
Form1.ListBox1.Items.Add('サーバから切断終了');
INTERNET_STATUS_HANDLE_CREATED:
Form1.ListBox1.Items.Add('新規ハンドルが作成された');
INTERNET_STATUS_HANDLE_CLOSING:
Form1.ListBox1.Items.Add('ハンドルがクローズされた');
INTERNET_STATUS_REQUEST_COMPLETE:
Form1.ListBox1.Items.Add('非同期捜査が終了した');
end;
Sleep(500); //ローカルでやる場合、これが無いと速すぎです。
Form1.ListBox1.Update;
end;
function GetFileFromInternet(const AUrl:string; AStream:TStream): boolean;
var
hSession, hConnect: hInternet;
Buf: array[0..1023] of Char;
ReadCount: Cardinal;
begin
Result := False;
hSession := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Integer(InternetSetStatusCallback(hSession, @MyCallback))
= INTERNET_INVALID_STATUS_CALLBACK then
begin
ShowMessage('Fail ' + IntToStr(GetLastError));
Exit;
end;
hConnect := InternetOpenUrl(hSession, PChar(AUrl), nil, 0, 0,
Integer(@MyCallBack));
try
while True do //ストリームに書き込み
begin
if not InternetReadFile(hConnect, @Buf, SizeOf(Buf), ReadCount) then
Break;
if ReadCount = 0 then
Break
else
begin
AStream.Write(Buf, ReadCount);
Result := True;
end;
end;
finally
InternetCloseHandle(hConnect);
end;
finally
InternetCloseHandle(hSession);
end;
end;
■使い方■
FormにListBoxとMemoとButtonを1つ置いて下さい。
procedure TForm1.Button6Click(Sender: TObject);
var
M: TMemoryStream;
begin
ListBox1.Items.Clear;
// if InternetAttemptConnect(0) = ERROR_SUCCESS then
begin
M := TMemoryStream.Create;
try
if GetFileFromInternet('http://www.inprise.co.jp/index.html', M) then
begin
M.Position := 0;
Memo1.Lines.LoadFromStream(M);
end else
Memo1.Lines.Text := '失敗';
finally
M.Free;
end;
end;
end;
00/06/09 (Fri) ぶんぶん鈴木
Original document by ぶんぶん鈴木 氏 ID:(EZA00106)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|