Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载远程映像时出现Delphi异常错误_Delphi - Fatal编程技术网

加载远程映像时出现Delphi异常错误

加载远程映像时出现Delphi异常错误,delphi,Delphi,嗨,我有以下代码: procedure TformInvoiceDetails.ReadWebImage(imgAddress: string); var memStream: TMemoryStream; begin memStream := TMemoryStream.Create; try IdHTTP1.Get (imgAddress,memStream); //sleep(5000); except imageContProduct.Visibl

嗨,我有以下代码:

procedure TformInvoiceDetails.ReadWebImage(imgAddress: string);
var
  memStream: TMemoryStream;
begin
  memStream := TMemoryStream.Create;
  try
    IdHTTP1.Get (imgAddress,memStream);
    //sleep(5000);
  except
    imageContProduct.Visible := false;
    ShowMessage('Image not found at:'+imgAddress);
    memStream.Free;
    exit;
  end;
  try
    memStream.Position := 0;
    imageContProduct.Visible := true;
    imageContProduct.Bitmap.LoadFromStream(memStream);
  finally
    memStream.Free;
  end;
end;

大多数情况下,它工作正常,但我不断得到一个验证错误,有时一个“图像未在”虽然图像确实存在

如果我把钥匙放好,一切正常

因此,在我尝试添加到TImage之前,我假设尚未收到该图像


有更好的方法吗?

您可以使用其他组件加载图片:

uses WinInet, JPEG;
...
function DownloadToStream(Url: string; Stream: TStream): Boolean;
var
  hNet: HINTERNET;
  hUrl: HINTERNET;
  Buffer: array[0..10240] of Char;
  BytesRead: DWORD;
begin
  Result := FALSE;
  hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hUrl := InternetOpenUrl(hNet, PChar(Url), nil, 0,
      INTERNET_FLAG_RELOAD, 0);
    if (hUrl <> nil) then
    begin
      while (InternetReadFile(hUrl, @Buffer, sizeof(Buffer), BytesRead)) do
      begin
        if (BytesRead = 0) then
        begin
          Result := TRUE;
          break;
        end;
        Stream.WriteBuffer(Buffer,BytesRead);
      end;
      InternetCloseHandle(hUrl);
    end;
    InternetCloseHandle(hNet);
  end;
end;

procedure TformInvoiceDetails.ReadWebImage(imgAddress: string);
var
  memStream: TMemoryStream;
  Jpg:= TJPEGImage;
begin
  memStream:= TMemoryStream.Create;
  try
    if DownloadToStream(imgAddress, memStream) then
    begin
      memStream.Seek(0, soFromBeginning);
      if (LowerCase(RightStr(imgAddress, 4))='.jpg') or (LowerCase(RightStr(imgAddress, 5))='.jpeg')
        try //do the same operation for *.png
          Jpg:= TJPEGImage.Create;
          Jpg.LoadFromStream(memStream);
          imageContProduct.Picture.Bitmap.Assign(Jpg);
          imageContProduct.Visible := true;
        finally
          Jpg.Free;
        end
      else
        try
          imageContProduct.Picture.Bitmap.LoadFromStream(memStream);
          imageContProduct.Visible := true;
        finally
        end;
    end;
  finally
    memStream.Free;
  end;
end;

那么,您在异常中丢弃了诊断信息,因此,…..在地址01014323处的访问冲突。。。读取地址00000030在您的问题图像中报告的错误在。。。是您自己的错误消息。正如所指出的,异常处理程序完全忽略了实际的异常,只是假设没有找到您的映像,而事实上,它可能是其他的。现在你提到访问冲突。这就是你在这里发现的例外吗?调试时断点正是在这里停止的吗?我的建议是花一些时间改进调试skills@Frank读取地址00000030-访问接近0的地址通常意味着某个地方正在使用nil指针