0

私の問題は、 URL からの画像の読み込みについて私が尋ねた他の質問に関連しています。以下のコードは機能します。ただし、画像を取得しようとすると(そこにあると思われます)問題が発生しましたが、明らかに削除されました。アプリケーションは認識せず、エラーを返します。着信エラーをキャプチャして防止する方法はありますか。提案をいただければ幸いです。それは彼の行で起こります:

 IdHTTP1.get('http://www.google.com/intl/en_ALL/images/logo.gif',MS);

ありがとう、クリス

uses
  GIFImg;

 procedure TForm1.btn1Click(Sender: TObject);
 var
   MS : TMemoryStream;
   GIf: TGIFImage;
 begin
     MS := TMemoryStream.Create;
    GIf := TGIFImage.Create;
   try
    IdHTTP1.get('http://www.google.com/intl/en_ALL/images/logo.gif',MS);
    Ms.Seek(0,soFromBeginning);       
   Gif.LoadFromStream(MS);
   img1.Picture.Assign(GIF);

  finally
   FreeAndNil(GIF);
   FreeAndNil(MS);
  end;
end;
4

2 に答える 2

7

例外をどのようにキャプチャしますか? 他の例外をキャプチャするのと同じ方法です。try-exceptブロックを使用します。

procedure TForm1.btn1Click(Sender: TObject);
var
  MS : TMemoryStream;
  Gif: TGIFImage;
begin
  MS := TMemoryStream.Create;
  try
    Gif := TGIFImage.Create;
    try
      try
        IdHTTP1.Get('http://www.google.com/intl/en_ALL/images/logo.gif', MS);
      except
        on e: EIdHTTPProtocolException do begin
          if e.ErrorCode = 404 then begin
            // not found
            exit;
          end else begin
            // some other reason for failure
            raise;
          end;
        end;
      end;
      MS.Position := 0;
      Gif.LoadFromStream(MS);
      img1.Picture.Assign(Gif);
    finally
      Gif.Free;
    end;
  finally
    MS.Free;
  end;
end;

Indy が受け入れられない応答を受け取ると、 type の例外が発生しますEIdHTTPProtocolException。考えられる失敗の理由ごとに異なる例外クラスが発生するわけではないため、ErrorCodeプロパティで数値の応答を確認してください。さまざまな応答コードの意味については、 HTTP 仕様を参照してください。

AIgnoreRepliesメソッドへの引数を介して特定の応答コードを無視するように Indy を構成できるようですTIdCustomHTTP.DoRequestが、私はそのパラメーターを今日行きたいところまでさかのぼって追跡したので、それについての詳細が必要な場合は、新しい質問または誰かがこの回答を編集して、この段落をより完全なものに置き換えることができます。

上記の例では、404 (見つかりません) を確認して終了しました。MSifを使用しないように注意してください。これはGet、内容が不確定であり、有効な GIF 画像ではない可能性があるためです。他のサーバー応答については、呼び出し元が代わりに処理できるように、例外を再発生させます。おそらくそれを変更したいと思うでしょう。の子孫ではない例外は、EIdHTTPProtocolException自動的に再発生します。解決方法がわからないエラーの例外をキャッチしないでください。

于 2009-09-25T14:56:06.257 に答える
0

すべての試行にはキャッチ
があります。例外を処理する必要がある場所があり、
おそらくテキストが含まれる空白の画像が作成されます。画像は利用できません

于 2009-09-25T13:57:45.317 に答える