CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请问怎样解决窗口闪烁的问题?

楼主hyhy95(无相)2001-10-03 20:07:16 在 Delphi / VCL组件开发及应用 提问

我在Form1中加了一个GroupBox控件,再在GroupBox中加一个TEdit控件,在TEdit的OnChange事件中加入如下代码,动态生成一个ListBox,如下:  
  procedure   TForm5.Edit1Change(Sender:   TObject);  
  begin  
      ListBox1   :=   TListBox.Create(nil);  
      ListBox1.Parent   :=   GroupBox1;  
      ListBox1.Left   :=   Edit1.Left;  
      ListBox1.Top   :=   Edit1.Top   +   Edit1.Height;  
      ListBox1.Width   :=   Edit1.Width;  
  end;  
  我的原意是随着我在Edit中不断地键入字符,ListBox中动态更新更精确的相关内容,但现在却是每键入一个字符,窗口就闪动一下,很是不好看,我只想ListBox重画,请各位帮忙解决,50分送上!! 问题点数:50、回复次数:9Top

1 楼thedream(梦幻使者)回复于 2001-10-03 20:16:21 得分 0

放到另外一个窗体上,窗体位于主窗体上方,改变窗体的LEFT属性,可以吗Top

2 楼xzgyb(老达摩)回复于 2001-10-03 20:17:57 得分 25

不太明白你的意思,edit每改变一次都动态生成一listbox吗  
  做什么  
  另外在确定位置时你可用SetBounds方法,  
  事实上你设置了listbox1.left就是调用了SetBounds  
  肯定会闪,直接用SetBounds会好一点  
  Top

3 楼little_f(小毛)回复于 2001-10-03 20:26:20 得分 0

把parent改为form1如何?Top

4 楼hlbl11(愚公)回复于 2001-10-03 20:34:38 得分 0

你觉得帮助文件的索引是否和你的要求一样???Top

5 楼hyhy95(无相)回复于 2001-10-03 20:36:19 得分 0

抱歉,我没有写全,正如xzgyb(回首往事,不堪回首)所说,并不是要每次都重新生成ListBox,而是只生成一次,我设了个变量,比如IsExist,在Form的OnCreate中初始化为False,  
  if   not   IsExist   then  
      begin  
          ListBox1   :=   TListBox.Create(nil);  
          ListBox1.Parent   :=   GroupBox1;  
          ListBox1.Left   :=   Edit1.Left;  
          ListBox1.Top   :=   Edit1.Top   +   Edit1.Height   +   2;  
          ListBox1.Width   :=   Edit1.Width;  
          IsExist   :=   True;  
      end;  
  只是第一次生成时GroupBox也闪动,能否不让其闪?Top

6 楼xzgyb(老达摩)回复于 2001-10-04 08:37:09 得分 0

试过SetBounds了,也就是  
  ListBox1.SetBounds(Edit1.Left,   Edit1.Top   +   Edit1.Height   +   2,   Edit1.Width,   97)  
  Top

7 楼zds0707(周)回复于 2001-10-04 09:50:50 得分 0

不太明白你的意思:"但现在却是每键入一个字符,窗口就闪动一下,很是不好看,我只想ListBox重画,"  
    ListBox重画:       Listbox1.Repaint   ;   就可以了!  
      //还是先放一个Listbox在GroupBox中吧,设置visible   :=   false   ;  
        Top

8 楼truezerg(赵明宇)回复于 2001-10-04 11:56:52 得分 0

如果不行的话就在EDIT的KeyPress事件里写吧.判断一下回车,如果是的话写入你上面的代码,这样只你输入完数据后按回车键就改动生效这样窗体只闪一下.但需要按回车才生效.Top

9 楼agui(阿贵: 高级图形用户界面)回复于 2001-10-04 12:18:24 得分 25

另外一个方法(不常用):  
  if   not   IsExist   then  
      begin  
          ListBox1   :=   TListBox.Create(nil);   //!!!!  
          SendMessage(   ListBox1.Handle,   WM_SETREDRAW,   0,   0   );//   禁止绘画  
          ListBox1.Parent   :=   GroupBox1;  
          ListBox1.Left   :=   Edit1.Left;  
          ListBox1.Top   :=   Edit1.Top   +   Edit1.Height   +   2;  
          ListBox1.Width   :=   Edit1.Width;  
          SendMessage(   ListBox1.Handle,   WM_SETREDRAW,   1,   0   );//   允许绘画  
          ListBox1.Refresh;  
          IsExist   :=   True;  
      end;  
   
  另外要说明的是:  
      ListBox1   :=   TListBox.Create(nil);  
  最好改成:  
      ListBox1   :=   TListBox.Create(Self);  
  否则有可能出问题Top

相关问题

  • 怎样使窗口标题栏闪烁?
  • 怎样解决 MDI 子窗口切换过程中的闪烁?
  • 请问,怎样使窗口标题栏瞬间闪烁一下?
  • 我想起动时窗口直接隐藏,可是窗口要闪烁一下,怎样解决?
  • 怎样使图形闪烁?
  • 请问怎样实现象qq一样在系统拖盘显示闪烁图标,双击后出现窗口!
  • 窗口闪烁,如何去掉闪烁呀???
  • 窗口还是闪烁,怎么办?
  • MDI窗口闪烁的问题!
  • 怎样杜绝listctrl的闪烁?

关键词

  • 字符
  • top
  • listbox
  • 窗体
  • edit
  • tlistbox
  • isexist
  • groupbox
  • 重画
  • setbounds

得分解答快速导航

  • 帖主:hyhy95
  • xzgyb
  • agui

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo