有以下组件:Edit1,Edit2,Button1,Button2,OpenDialog1,其作用分别如下:
OpenDialog1的Filter设置为*.jpg;
Button1的Caption设置为'浏览',控制OpenDialog1,用来选择源jpg图片,并将源图片的路径显示到Edit2中(即Edit2.Text=OpenDialog1.FileName);
Button2的Caption设置为'确定',用来实现将源jpg图片复制到'同个文件夹下的Pic文件夹'(即.\Pic\)中;
Edit1用来输入目标图片的名字;
Edit2用来显示源图片路径;
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    begin
      Edit2.Text:=Open.FileName;
    end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  CopyFile(PChar(Edit2.Text),PChar('.\Pic\'+Edit1.Text+'.jpg'),True);
  //如果我将这句的Edit2.Text换成某个固定的目录,比如'd:\try1\8.jpg',那么就能实现将图片复制到.\Pic,但是变回Edit2.Text的话就无法实现  
end;
大家帮忙看看,为什么CopyFile(PChar(Edit2.Text),PChar('.\Pic\'+Edit1.Text+'.jpg'),True);中用了Edit2.Text就无法复制图片,而一旦改成某个具体路径又可以了?另外,读取过Edit2.Text的值,确实是路径,没什么问题~

解决方案 »

  1.   

    不好意思,上一个procedure里面敲错一个,Edit2.Text:=Open.FileName;应为Edit2.Text:=OpenDialog1.Execute,忙中出错~
    不过源代码中并没有敲错,大家再帮忙瞧瞧~~
      

  2.   

    CopyFile(PChar(Edit2.Text),PChar('.\Pic\'+Edit1.Text+'.jpg'),True);
    换成
    CopyFile(PChar(Edit2.Text),PChar(ExtractFilePath(Application.ExeName)+'\Pic\'+Edit1.Text+'.jpg'),True);或者将OpenDialog当中的加上ofNoChangeDir选项
    var
      Options: TOpenOptions;
    begin
      Options := OpenDialog1.Options ;
      Include(Options,ofNoChangeDir);
      OpenDialog1.Options := Options ;
    end;
      

  3.   

    绝对是高手!!可以了~
    能问下ExtractFilePath(Application.ExeName)的作用吗?
      

  4.   

    原因是'.\Pic'相当于GetCurrentPath() + '\Pic',而执行OpenDialog/SaveDialog默认会改变当前目录(CurrentPath),所以路径就不是你本预想的应用程序自身所在的目录了。
      

  5.   

    Applicaton.ExeName是你当前执行程序包含文件名的全路径,ExtractFilePath是取出其中的路径部分。
      

  6.   

    你又输错了?
    Edit2.Text:=OpenDialog1.FileName?
      

  7.   

    看来慢了,刚回复一个,就回复了这么udo
      

  8.   

    非常非常感谢unsigned 大大!!
      

  9.   

    Edit2.Text:=OpenDialog1.Execute这个对是错的
      

  10.   

    Edit2.Text:=OpenDialog1.Execute这个是错的
      

  11.   

    前面加了ExtractFilePath(Application.ExeName)就没问题了~:)