关于保存方面的问题,解决后立即送分!!!决不食言!

时间:2022-05-20 17:50:25
我在窗体上面放了一个pagecontrol控件(动态生成image控件),用代码实现的功能是:我按键盘上的print键,就会保存桌面为一幅图片,放在pagecontrol中的一个tabsheet中,每保存一幅图片就会动态产生一个tabsheet用来放图片。我想用一个按钮来实现自动保存所有的图片,可是总是不成功,好像是说图片都保存在了一个地址中,导致了内存地址错误。可我只保存一幅图片时也会出像上述错误。
我用的是以下的代码:
 for m := 1 to pagecontrol1.pagecount -1 do
  begin
  begin
     for n := 1 to pagecontrol1.pages[m].ControlCount - 1 do
       if pagecontrol1.pages[m].Controls[m] is TImage then
        begin 
          TImage(pagecontrol1.pages[m].Controls[m]).Picture.SaveToFile(savedialog1.FileName);
          setfilename(savedialog1.FileName);
          Break;
        end;
      end 
  end;

17 个解决方案

#1


savedialog1.FileName
你全用一个文件名保存吗?
循环前面有无savedialog1.excute?

#2


期待...

#3


当然不会只用一个名字,可是我保存一幅图片时也会出现问题,总不会有别的图片和他争一个地址吧:)

#4


你的循环很古怪
for m := 1 to pagecontrol1.pagecount -1 do    //由0开始
  begin
  begin
     for n := 1 to pagecontrol1.pages[m].ControlCount - 1 do   //由0开始
       if pagecontrol1.pages[m].Controls[m] is TImage then    //应该是pagecontrol1.pages[m].Controls[n] 吧
        begin 
          TImage(pagecontrol1.pages[m].Controls[m]).Picture.SaveToFile(savedialog1.FileName);    //同上
          setfilename(savedialog1.FileName);    //请回答:干嘛用的?自己的过程?
          Break;
        end;
      end 
  end;

setfilename(savedialog1.FileName);

#5


...pages[index:integer]
index是由0开始

savedialog1.FileName只是一个文件名


#6


睡一觉,相信明天自己就解决了!

#7


不会有错的。
倒是你的程序里的循环为什么都是从1开始,难道不应该是从0开始吗?

#8


从零开始,会出错误,从1开始那个错误就没有了,我也不知道为什么。
谢谢大家的回答,我会试试的。

#9


自己踢一脚

#10


因为控件的index的取值是从0开始
当你只有一附图时,根据你的说明,你就只有一个Timage控件,而pagecontrol1.pages[0]的控件就只有一个
此时,pagecontrol1.pages[0].Controls[0]就是那个唯一的 Timage控件。


#11


可我试来试去就是不行:(
真的很谢谢你,fredfei(飞飞) ,不管能不能解决,我都会给你分!

#12


将1改成0,Controls[m]改成Controls[n],我运行没错啊!除非你的Picture中就没有图片或setfilename中做错了什么!

#13


是吗?真奇怪

#14


同意无savedialog1.excute或
setfilename(savedialog1.FileName);提前一行。

#15


支持楼上

#16


还没有解决吗?
你能告诉我setfilename是干什么用的?

#17


问题解决了,多谢大家帮助!

#1


savedialog1.FileName
你全用一个文件名保存吗?
循环前面有无savedialog1.excute?

#2


期待...

#3


当然不会只用一个名字,可是我保存一幅图片时也会出现问题,总不会有别的图片和他争一个地址吧:)

#4


你的循环很古怪
for m := 1 to pagecontrol1.pagecount -1 do    //由0开始
  begin
  begin
     for n := 1 to pagecontrol1.pages[m].ControlCount - 1 do   //由0开始
       if pagecontrol1.pages[m].Controls[m] is TImage then    //应该是pagecontrol1.pages[m].Controls[n] 吧
        begin 
          TImage(pagecontrol1.pages[m].Controls[m]).Picture.SaveToFile(savedialog1.FileName);    //同上
          setfilename(savedialog1.FileName);    //请回答:干嘛用的?自己的过程?
          Break;
        end;
      end 
  end;

setfilename(savedialog1.FileName);

#5


...pages[index:integer]
index是由0开始

savedialog1.FileName只是一个文件名


#6


睡一觉,相信明天自己就解决了!

#7


不会有错的。
倒是你的程序里的循环为什么都是从1开始,难道不应该是从0开始吗?

#8


从零开始,会出错误,从1开始那个错误就没有了,我也不知道为什么。
谢谢大家的回答,我会试试的。

#9


自己踢一脚

#10


因为控件的index的取值是从0开始
当你只有一附图时,根据你的说明,你就只有一个Timage控件,而pagecontrol1.pages[0]的控件就只有一个
此时,pagecontrol1.pages[0].Controls[0]就是那个唯一的 Timage控件。


#11


可我试来试去就是不行:(
真的很谢谢你,fredfei(飞飞) ,不管能不能解决,我都会给你分!

#12


将1改成0,Controls[m]改成Controls[n],我运行没错啊!除非你的Picture中就没有图片或setfilename中做错了什么!

#13


是吗?真奇怪

#14


同意无savedialog1.excute或
setfilename(savedialog1.FileName);提前一行。

#15


支持楼上

#16


还没有解决吗?
你能告诉我setfilename是干什么用的?

#17


问题解决了,多谢大家帮助!