怎样消除窗口闪烁?(20分)

  • 主题发起人 主题发起人 fwcy
  • 开始时间 开始时间
F

fwcy

Unregistered / Unconfirmed
GUEST, unregistred user!
我这样写:
FORM1.hide;
FORM1.show;
运行时窗体FORM1会闪烁一下,请问高手们怎么解决这个闪烁问题?
 
你为什么这样写啊?这样写肯定要闪的
 
我这样写有需要呀!
 
该不会,连在一块写的的吧,不闪到是希奇了!
 
是连在一起写,谁能解决?
 
如果你不想闪烁应该有其他方法代替这两行代码的
 
你都把代码限定了,解决什么啊,你还是说说你要实现什么吧
 
有什么需要呀!两个都不写试试看!不行再说
 
程序思想是这样的:
有A和B两个窗口。A是主窗口。B是登录窗口,点击.exe时,B窗口在前,A窗口在后。
当在B窗口输入用户名和密码后,B窗体上有一变量可记录A窗口上菜单的选项那些显示正常,
那些显示灰色。我在A窗口的onshow事件中调用B窗体中的那个变量就可以控制各用户的菜单选项!
因为在点击.exe时,A,B两窗口都已创建,所以当B窗口登录后A窗口不可能再执行ONSHOW事件。
因此我在项目文件执行前写FORM1.hide;FORM1.show;,以便A窗口调用B窗口的那个变量。
这样可以实现预期功能,但窗口会闪一下!
请问大家怎么处理呢?
 
为什么要在点击.exe时,A,B窗口都创建呢,不能先创建B,再创建A么?
你这样写当然会有问题了!你可以在dpr文件中创建B窗口,在B窗口关闭时再创建A窗口,
这样你必须把变量放在一个公共单元中;
也可以在A窗口创建时创建B窗口,在B窗口之后确定菜单的显示状态
 
把“我在A窗口的onshow事件中调用B窗体中的那个变量就可以控制各用户的菜单选项!”的
实现代码写在A窗口的onActivate事件中应该可以解决吧。这样就不用FORM1.hide;
FORM1.show;了。
 
用A做主窗体,uses formb
procedure TFormA.FormCreate(Sender: TObject);
begin
formB:=TformB.create(self);
formB.ShowModal;
formB.Free;
formB := nil;
end;


procedure TFormB.FormClose(Sender: TObject; var Action: TCloseAction);
begin
formA.button1......//对formA的操作
end;
 
小虫子说的对,唯一和你做的不一样的地方就是你做的是以FORM_A为背景的,而小虫子的
实现方法是只有关闭FORM_B才会显示FORM_A的.
 
把变量改写在A里无论局部,全局都行,用B来操作,再配合onActivate事件
 
在A的Paint里写显示B
这样就不会了
Usee Windows

If FindWindow(Nil,'用户登陆')=0 then
begin
If Trim(OperatorID)='' then
begin
Application.CreateForm(TForm_Login,Form_login);
Try
Form_login.ShowModal;
Finally
Form_login.Free;
end;
end;
end;
 
TO:SEVEN_918
我喜欢登录窗口后面有主窗口做为背景,因此A,B两窗口需同时建立!
先创建B,再创建A,确实没有任何问题,但我不喜欢!
TO:0000鬼0000 AND 卡色
把实现代码写在A窗口的onActivate事件中,我早就试过,但不行。
B窗口退出后,A窗口不能读取那段代码。我也想不通是什么原因!
TO:小虫子
在B窗口关闭时对A窗口进行操作,我也尝试过,但不能实现!
TO:无疯无禄
你的代码我刚刚试过,但有问题!编译时提示错误:
1:identifier redeclared 'windows';
2:undeclared identifier 'operatorid';


在A窗口onshow事件中执行的代码如下:(其中rights就是记录A窗口菜单权限的那个变量)
procedure TFm_main.FormShow(Sender: TObject);
var i:integer;
begin

for i:=0 to componentcount-1 do
if (Components is Tmenuitem) then
if pos((components as Tmenuitem).name,rights)>0 then
(components as Tmenuitem).enabled:=true;

end;
 
我想是你把Form_b.close了吧,如果你用Form_b.hide应该可以读.或是把设置变量不要放在
FORM_b中应该就可以了。
 
TO:0000鬼0000
老兄:关闭和隐藏都不行,不能去执行那段代码!
 
哈哈,楼上说的对啊
你直接B里写段代码来控制A
或者写在A里用B调用
如果我说的方法能解决问题
哈,老兄,你还时改行吧
 
我为你COPY一段我同事写的代码:
if not Assigned(Form1) then
begin
LockWindowUpdate(Frmmain.Handle);
Form1 := TForm1.Create(Application);
LockWindowUpdate(0);
end;
{Frmmain是主窗体}
 
后退
顶部