{ A. Nasır Şentürk 2006 } unit InterThr; interface uses Windows, Messages, Classes, Forms; const WM_WEATHERDONE = WM_USER + 10; CM_RESTORE = WM_USER + 11; WM_IPADDRDONE = WM_USER + 12; WM_CHECKVERDONE = WM_USER + 13; type TInternetThread = class(TThread) private FControl: TForm; FURL: string; FResponseText: string; FStatus: Integer; FMessageCode: Cardinal; protected procedure Execute; override; public constructor Create(CreateSuspended: Boolean; AControl: TForm; const URL: string; const AMessageCode: Cardinal); property ResponseText: string read FResponseText; property Status: Integer read FStatus; property Terminated; end; implementation uses WinInet; constructor TInternetThread.Create(CreateSuspended: Boolean; AControl: TForm; const URL: string; const AMessageCode: Cardinal); begin inherited Create(CreateSuspended); FURL := URL; FControl := AControl; FMessageCode := AMessageCode; FResponseText := ''; end; procedure TInternetThread.Execute; function GetXMLPage(const URL: string; out XMLPage: string): Integer; var hRootHandle, hUrlDump: HINTERNET; Buffer: array[0..8192] of Char; dwNumberOfBytes: DWORD; Stream: TStringStream; ReadResult: BOOL; begin Result := -1; hRootHandle := InternetOpen('FreeDelphi Weather XML', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if hRootHandle = nil then Exit; hUrlDump := InternetOpenUrl(hRootHandle, PChar(URL), nil, 0, INTERNET_FLAG_RESYNCHRONIZE, 0); if hUrlDump <> nil then begin Stream := TStringStream.Create(''); try repeat FillChar(Buffer, SizeOf(Buffer), 0); ReadResult := InternetReadFile(hUrlDump, @Buffer, SizeOf(Buffer), dwNumberOfBytes); if not ReadResult then Break; Stream.Write(Buffer, dwNumberOfBytes); until dwNumberOfBytes = 0; XMLPage := Stream.DataString; Result := 0; finally Stream.Free; end; InternetCloseHandle(hUrlDump); end; InternetCloseHandle(hRootHandle); end; begin FStatus := GetXMLPage(FURL, FResponseText); PostMessage(FControl.Handle, FMessageCode, 0, FStatus); end; end.