Image问题(50分)

  • 主题发起人 主题发起人 fwcy
  • 开始时间 开始时间
真奇怪,我把窗口最小化,然后再把窗口还原,图片就刷新了!
这是什么问题呀?怎么解决?
 

呵呵,想不到那个dialog造成我这里好象很正常一样。
试过发送WM_PAINT消息竟无效。
放上panel就没事了。
 

嗯,不能放panel,我再看看
 

呵呵,站内答案很多。
下面是一个例子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=263361
 
刷新窗体
MainForm.Refesh;
 
TO:影子
放panel,画是可以刷新,但会影响其它窗口!也不行!
TO:WR960204
刷新窗口不行,我试过!
 

查找了一些资料,都没有满意的答案。
以下是完美的解决方案,我试过是可以实现的。
if OpenPictureDialog1.Execute then
begin
SavePic(OpenPictureDialog1.Filename);
LoadPic(image1);//Image1.Picture.LoadFromFile(OpenPictureDialog1.Filename);
width := width -1;//关键的两行代码
width := width +1;
end;
 
TO:影子:
写上那两条是可以立即刷新,但窗口会出现滚动条!
退出后再进入,滚动条才会消失!不知你看到没有?
 

width的加减,最终width还是原来的width,应该不会出现滚动条啊。
你看看是不是加减的数不相等?
win2000,delphi6,没这个问题。
 
ini文件有它的读写规则,这里有我平时用的几个函数你看一看有没有用:
//删除Ini文件中的值
Procedure TFrm_Main.Del_IniFilekey(Section, Ident: string);
var
IniFile: TIniFile;
IniFilePath:string;
begin
IniFilePath := GetAppDir + 'FilesPath.ini';
IniFile:= TIniFile.Create(IniFilePath);
if Not FileExists(IniFilePath) then
IniFile.WriteString('Files_Count','Count','0');
try
IniFile.DeleteKey(Section, Ident);
finally
IniFile.Free;
end;
end;

//写入Ini文件
Procedure TFrm_Main.WriteIniFile(Section, Ident,StringName: string);
var
IniFile: TIniFile;
IniFilePath:string;
begin
IniFilePath := GetAppDir + 'FilesPath.ini';
IniFile:= TIniFile.Create(IniFilePath);
if Not FileExists(IniFilePath) then
IniFile.WriteString('Files_Count','Count','0');
try
IniFile.WriteString(Section, Ident,StringName);
finally
IniFile.Free;
end;
end;

//读取Ini文件
function TFrm_Main.ReadIniFile(Section, Ident: string): string;
var
IniFile: TIniFile;
IniFilePath:string;
begin
IniFilePath := GetAppDir + 'FilesPath.ini';
IniFile:= TIniFile.Create(IniFilePath);
if Not FileExists(IniFilePath) then
IniFile.WriteString('Files_Count','Count','0');
try
Result:=IniFile.ReadString(Section, Ident,'');
finally
IniFile.Free;
end;
end;
 
TO:影子:
我也是WIN2000,DELPHI6 。
加减的数也相等,理论上是没问题,但窗口真的会出现滚动条!
退出后再进入,滚动条才会消失!
 
对不起我的回答有一点跑题了,在设置图片时:
procedure TFrm_Main.setbackground; //选择背景图案
var strFileName: String;
fBKground:TIniFile;
begin
if OpenDialog1.Execute then
strFilename:=trim(OpenDialog1.FileName);
if length(strFileName)<>0 then
Frm_Main.Image1.Picture.LoadFromFile(strFileName);
WriteIniFile('SYSTEM','IMAGEPATH',strFileName);
end;
然后在窗口创建的时候加入下面一句话就可以了,
Frm_Main.Image1.Picture.LoadFromFile(ReadIniFile('SYSTEM','IMAGEPATH'));

 

也许你的其它设置有问题吧,如果需要,给个email,我发个demo给你。
 
好的,谢谢你!我看看!
fwcy@sohu.com
 
TO:lyjgs.168
你的代码不能通过!
提示如下:
undeclared indentifier: 'ReadIniFile'
undeclared indentifier: 'WriteIniFile'
undeclared indentifier: 'TIniFile'
 
TO:影子:
已经可以了,谢谢你!不知lyjgs.168的代码是否也可行,我等会再去试试!
 
你把我第一次给你的几个对INI文件操作的函数加上了没有,ReadIniFile,WriteIniFile
那些都是我自己写的函数呀,
还有就是undeclared indentifier: 'TIniFile'这个错误的解决办法是在interface后面的
uses 中加上INIFiles就可以了,如果还有什么问题再说.
 
后退
顶部