grafika z http

0

Chcę wyświetlić w TImage pobrany przez http (używam Indy 9) obrazek, ale to nie działa:

procedure TForm1.Button1Click(Sender: TObject);
var
  str: TMemoryStream;
  bmp: TBitmap;
begin
  bmp:=Tbitmap.Create;
  str:=TMemoryStream.Create;    
  http.Get('http://127.0.0.1/obrazek.bmp',str);
  bmp.LoadFromStream(str);
  Image1.Picture.Assign(bmp);

  bmp.Free;
  str.Free;
end;
0

Kiedyś robiłem jakieś badziewie z pogodą. wklejam cały kod, wytnij sobie co sie przyda.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Gif, StdCtrls, wininet, ComCtrls, GIFImage, XPMan;

type
  TForm1 = class(TForm)
    Gif1: TGif;
    ProgressBar1: TProgressBar;
    Button1: TButton;
    XPManifest1: TXPManifest;
    Gif2: TGif;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Shape1: TShape;
    Shape2: TShape;
    procedure Button1Click(Sender: TObject);

    procedure pogoda;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  stop : boolean;
  adres, nazwa : string;

implementation

{$R *.dfm}
procedure Tform1.pogoda;
var
  hInet,
  hURL: HINTERNET;
  fSize,
  ReadLen,
  RestartPos: DWORD;
  fBuf: array[1..1024] of byte;
  f: file;
  Header: string;
begin
  RestartPos := 0;
  fSize := 0;
  if FileExists(nazwa) then
  begin
    AssignFile(f, nazwa);
    Reset(f, 1);
    RestartPos := FileSize(F);
    Seek(F, FileSize(F));
  end
  else
  begin
    AssignFile(f, nazwa);
    ReWrite(f, 1);
  end;
  hInet := InternetOpen('iexplorer',
    PRE_CONFIG_INTERNET_ACCESS,
    nil,
    nil,
    0);

  Header := 'Accept: */*';
  hURL := InternetOpenURL(hInet,
    PChar(adres),
    pchar(Header),
    StrLen(pchar(Header)),
    0,
    0);
  if RestartPos > 0 then
    InternetSetFilePointer(hURL,
      RestartPos,
      nil,
      0,
      0);
  InternetQueryDataAvailable(hURL, fSize, 0, 0);
  if RestartPos > 0 then
  begin
    ProgressBar1.Min := 0;
    ProgressBar1.Max := fSize + RestartPos;
    ProgressBar1.Position := RestartPos;
  end
  else
  begin
    ProgressBar1.Min := 0;
    ProgressBar1.Max := fSize + RestartPos;
  end;
  while (ReadLen <> 0) and (stop = false) do
  begin
    InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen);
    InternetQueryDataAvailable(hURL, fSize, 0, 0);
    ProgressBar1.Position := ProgressBar1.Max - fSize;
    BlockWrite(f, fBuf, ReadLen);
    Application.ProcessMessages;
  end;
  stop := false;

  InternetCloseHandle(hURL);
  InternetCloseHandle(hInet);
  CloseFile(f);
   ProgressBar1.Position:=0;
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
nazwa:='dzis.gif';
adres:='http://www.superexpress.pl/Iso/dzisiaj/Mapki/dzis.gif';
form1.pogoda;
sleep(1000);
gif1.picture.loadfromfile('dzis.gif');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
nazwa:='jutro.gif';
adres:='http://www.superexpress.pl/Iso/dzisiaj/Mapki/jutro.gif';
form1.pogoda;
gif2.picture.loadfromfile('jutro.gif');

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
button1.OnClick(sender);
button2.OnClick(sender);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
DeleteFile('dzis.gif');
DeleteFile('jutro.gif');
end;

end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1