我现在写一个软件,每个窗体都要加载JPG图片,同时用动态控件数组的方法创建了20多个控件(TLABEL,TSPEEDBUTTON),但现在当从一个窗体show后面的窗体时,速度比较慢。不知道是动态控件数组的问题还是加载图片的问题。
   请各位大侠给点指教,本人急用!

解决方案 »

  1.   

    动态控件应该没问题。如果是JPG图像比较大的话,可能会慢。如果是相同的图,可以加载后不释放,保存在全局变两中。
    能不能把代码贴出来看看?
      

  2.   

    你看看加载的组件有没有类似的 beginupdate 及endupdate的方法可以调用呀,有的话用用试试也许会快点
      

  3.   

    动态加载控件速度还是比较快的,动态数组就很难说了,要看你的数组里面的变量是什么对象了,如果只是int,string这类的速度是很快的,如果是一些大类的对象速度会比较慢,还有加载图片速度是比较慢的
    (当然还要看你是从硬盘里找图片,还是图片直接存图片控件上)
      

  4.   

    1。可以用算法提高读取图片的速度,自己分析图片格式,只读与生成缩略图时有用的数据,比如bmp的话,就跳着读数据,jpeg之类的就要看你的算法功力了,另外,photoshop保存的jpeg图片都有附加的缩略图信息,只要读取这个信息并显示就可以了。
    2。用多线程,在显示当前图片时,在内存中先加载入下一张图片,这样要显示时就要读取内存中处理好的信息就可以了,acdsee就是这么干的。
      

  5.   

    动态创建TSpeedButton,从一个文本格式文件里读取信息后创建,这样SPEEDBUTTON多了是不是很慢?
    var
      i : Integer;
      PropList: TStrings;
    begin
      //读取保存的控件属性信息,LabelInfo中每一个ITEM保存一个控件的信息
      ImageInfo := TStringList.Create;
      ImageInfo.Clear;
      ImageInfo.LoadFromFile(SkinIniFile);  PropList := TStringList.Create;
      for i := 0 to ImageInfo.Count - 1 do
      begin
        //PropList是用来解析 "10", "10", "100", "200", Label 这个类型的字符串
        //可以自动分解为多个ITEM,可以看 TStringList.CommaText 属性的帮助文档
        PropList.Clear;
        PropList.CommaText := ImageInfo[I];
        //if ComponentsType = '1'  then  //生成TSpeedButton按钮
        with TSpeedButton.Create(ParenForm) do
        begin
          Parent := ParenForm;
          //格式参见保存方法
          Name:= PropList[4];
          Left := StrToInt(PropList[0]);
          Top := StrToInt(PropList[1]);
          Width := StrToInt(PropList[2]);
          Height := StrToInt(PropList[3]);
          Tag := i+1;
          Flat := True;
          BringToFront;
          Show;
        end;
      end;
      PropList.Free;上面的动态创建SPEEDBUTTON按钮是不是有问题,为何我用这种方法创建新窗体的时候创建SPEEDBUTTON这么慢?请楼上的各位高手指点!
      

  6.   

    你的按钮位置是从文件中读出来的,读的时候是用一个StringList来暂存,Create操作会比较耗时。