我想用以下代码实现每隔一秒钟刷新一次图像,但却没有用,似乎图像永远不会变化:
procedure TForm1.tmr1Timer(Sender: TObject);
begin
   hFile := FileOpen(loc, fmOpenWrite or fmShareDenyNone);
  GetFileTime(hFile,nil, @FT,nil);
  CloseHandle(hfile);
  if (FT.dwLowDateTime=ft1.dwLowDateTime) and (ft1.dwHighDateTime=FT.dwHighDateTime) then
  begin
  if FileExists(loc) then
  begin
    showimage.Picture.LoadFromFile(loc);
    ShowImage.Refresh;
  end;
  end;
end;  

解决方案 »

  1.   

    先看看你的Timer的Enable是否为True
    然后再看看你的事件中的执行情况
    楼主可以先将那个过程用一个Button事件来代替,然后你点击一下,并跟踪调试
    看执行的情况你应该可以查出问题的所在的
      

  2.   

    不只我的程序是这样,我测试了Photoshop/画图等程序,都一样。
    测试方法:
    用画图程序打开一个图像文件,随便用画笔乱画几笔,不保存,选择菜单:文件—打开,再次打开这个文件,在弹出对话框时选择否(不保存),结果打开的图像为修改过的图像,而事实上图片未被修改(用另一个画图程序打开即可发现图像未被修改)
      

  3.   

    原因找到了,按如下修改后又出新型问题,不管图像文件的修改时间有否改变,Showimage总会不断刷新图片,前面的 
    if (FT.dwLowDateTime=ft1.dwLowDateTime) then
      Exit;
    语句好像变成没用的了。
    procedure TForm1.tmr1Timer(Sender: TObject);
    begin
       hFile := FileOpen(loc, fmOpenWrite or fmShareDenyNone);
      GetFileTime(hFile,nil, @FT,nil);
      CloseHandle(hfile);
      if (FT.dwLowDateTime=ft1.dwLowDateTime) then
      Exit;
      if (FT.dwLowDateTime<>ft1.dwLowDateTime) then
      begin
      if FileExists(loc) then
      begin
        showimage.Picture.LoadFromFile(loc);
      end;
        ft1:=FT;
      end;end;