窗体闪烁问题(200分)

  • 主题发起人 主题发起人 l1_jun
  • 开始时间 开始时间
L

l1_jun

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:Windows 2000 pro SP4 + Delphi7
我在打开一个主窗体(DLL),然后执行下列语句:
if OpenDialog.Execute then
....
这个过程执行完成后,窗体就会出现闪烁。
请各位高手指教!
 
是仅窗口闪烁,还是连同屏幕一同闪烁?
 
Johnny_du,你好!
只是主窗体会闪烁一下,打开颜色对话框也会造成一样的闪烁。
 
在主窗体的OnCreate事件中假如如下代码试试看:
DoubleBuffer := True;
 
你是不是用什么特殊的控件了?比如说,美化窗口的控件?timer控件?
 
To Johnny_du:
我设置了DoubleBuffered := True;,窗体仍然闪烁。

To tianlove:
窗体中没有什么特殊的控件,都是Delphi自带的,不过有一个DHtmlEdit的Active控件.
不过我试了,将DHtmlEdit控件去除,还是会闪烁,可能跟这个控件无关。
 
我也遇到这样的情况。

用OpenDialog控件在DLL中,OpenDialog会更改主窗口的焦点,所以会闪烁一下。

我用的方法是用API函数GetOpenFileName来代替TOpenDialog。
 
谢谢lugan0720的答复
这个虽然可以解决打开文件的问题,但是我还有颜色对话框等,看其它高手还有没有其它可行的办法。
 
问题提前!
 
有没有人碰到我这样的情况啊
 
颜色对话框API:CHOOSECOLOR
 
高手们回答啊,我也想知道是怎么回事
 
看看你的 FormActivate 事件中有什么代码
 
To:xianguo
FormActivate事件中没有代码

To: lugan0720
再次谢谢你的答复,我用GetOpenFileName函数调用对话框,第一次点击和第二次点击没有反应,第三次才会出来打开对话框出来,这是什么问题?
下面是调用代码:
var
ofn: TOpenFileName;
szFile: array[0..MAX_PATH] of Char;
sFileName: string;
begin
FillChar(ofn, SizeOf(TOpenFileName), 0);
with ofn do
begin
lStructSize := SizeOf(TOpenFileName);
hwndOwner := Handle;
lpstrFile := szFile;
nMaxFile := SizeOf(szFile);
lpstrTitle := PChar('打开');
lpstrInitialDir := nil;
Flags := 4;
end;

if GetOpenFileName(ofn) then
begin
sFileName := StrPas(szFile);
//todo:
end;
end;
 
在onresize有事件或alphablend:=true;
 
To guanyue7613:
我设置了alphablend:=true,仍然不能解决问题,谢谢你的答复!
 
各位高手,有没有不需要使用API函数调用而解决这个问题的?
 
LZ,如果照你所說的只用了D自帶的控件理論上不可能出現這個問題,要不你先換台機器試試,看還有沒有這個問題
還有可有就是你代碼的問題了,是否出現重畫窗體等。
 
试试下面的方法:
复制Dialogs.pas到工程当前目录,打开Dialogs.pas,修改所有
hWndOwner := Application.Handle;

if Owner is TWinControl then
hWndOwner := TWinControl(Owner).Handle
else
hWndOwner := Application.Handle;

要确保你的工程是编译了你修改后的Dialogs.pas
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部