⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uncustomdisplay.pas

📁 本产品是开发LISTVIEW相关功能的可定制产品
💻 PAS
📖 第 1 页 / 共 2 页
字号:
          TotalDisplayColumNumber:=qQryDB.RecordCount;//取得查询到的记录数
          if TotalDisplayColumNumber>0 then//只有当有查询的记录数时才执行下面的操作
          begin
            setlength(colum,TotalDisplayColumNumber);
            setlength(aDataType,TotalDisplayColumNumber);
            i:=0;
            Lstvaffair.Columns.Clear;//为重新生成列而清空列
            //最多显示31列
            while ((not qQryDB.eof) and (i<TotalDisplayColumNumber)) do
            begin
               colum[i]:=qQryDB.FieldByName('INARYSERIALID').AsInteger;
               aDataType[i]:=qQryDB.FieldByName('DATATYPE').AsInteger;
               Lstvaffair.Parent := lSoueceParentName;//传递所属对象
               NewColumn := Lstvaffair.Columns.Add;//增加一列
               NewColumn.Caption := qQryDB.FieldByName('CAPTION').AsString;
               NewColumn.Width:=qQryDB.FieldByName('WIDTH').AsInteger * 8;//转为点阵
               i:=i+1;
               qQryDB.Next;//取下一列
            end;
          end;
        End;
      end;
      qQryDB.close;
      qQryDB.Free;
      qQryDB:=nil;
  except
    ;
  end;
end;

//2、rlist是存放TListData的TList(一个数组),在调用前应该先为其传数据
//3、Item:TListItem是LISTVIEW中ONDATA函数的Item参数
//4、每个LISTVIEW需要显示的字段变量名称及宽度应该按显示顺序存在一个数据库表中,
//   程序在启动时需要一次性读出
{[1,3,4,5,7,9,12,15,16]colum[1]}
Function TCustomDisplay.ShowListView(var CListView:TListview;Item:TListItem;var CList:TList):PListData;
var q:PListData;
    i,j:integer;
begin
  try
  begin
    if Item.Index >= CList.Count then Exit;
    q := CList[item.index];         //取出一条记录
    j:=StrToInt(q^[0]);
    if TotalDisplayColumNumber<=0 then Exit;

    if(bShowStateColor=True) then//需要显示不同状态不同颜色
    begin
      try
         CListView.Canvas.Brush.Color:=aStateColor[j];
      except
         WriteLog(CMemo,'在定制用不同颜色显示不同状态时发生错误(TCustomDisplay.ShowListView)');
      end;
    end;

    item.Caption := q^[colum[0]];   //第一个列
//    item.StateIndex:=StrToInt(q^[colum[0]]);//在第0列显示定制图标太危险,暂时不开放
    for i:=1 to TotalDisplayColumNumber-1 do//循环写入其它列信息
    begin
      item.SubItems.Add(q^[colum[i]]);   //将显示列添加到LISTVIEW中//colum[i]]中的内容是显示列在指针数组对应的位置索引号。
      if ((nIconInArray>0 )and (nIconInArray=colum[i])) then //只有第0列后才允许添加图标/图片显示
        item.SubItemImages[i-1] := j+nIconToBaseStateSeq;//将该行列状态在数组最后的图标显示出来,定死状态在第0列存放
     //        item.SubItemImages[i-1] := StrToInt(q^[colum[i]])+nIconToBaseStateSeq;//Modied by dpd 2006-08-08
    end;

    ShowListView:= q;
  end;
  except
       WriteLog(CMemo,'在进行LISTVIEW定制显示时发生错误(TCustomDisplay.ShowListView)');
  end;
end;

procedure TCustomDisplay.SourceViewColumnSort(const Column:Integer);
begin
  if aDataType[Column]=0 then
     SortListView(LstvAffair, Column, ssNumeric, FAsc)
  else if aDataType[Column]=1 then
     SortListView(LstvAffair, Column, ssAlpha, FAsc)
  else if aDataType[Column]=2 then
     SortListView(LstvAffair, Column, ssDateTime, FAsc);
  FAsc := not FAsc;

end;

//对呈现数据列表中第nPosition行的第nColumn列用新字符串替换
Function TCustomDisplay.ChgRowInPosition(var CList:TList;var nPosition:Integer;
   var nColumn:integer;var str:string):Boolean;
var q:PListData;
begin
   try
   Result:=False;
   begin
      q:=CList[nPosition];
      q[nColumn]:=str;
         Result:=True;
   end;
   except
     WriteLog(CMemo,'在进行CList赋值时发生错误(TCustomDisplay.ChgRowInPosition)');;
   end;
end;

//从CList列表中的第nPosition行(位置)开始,所有行向后面移一行,最后一行数据丢弃
Function TCustomDisplay.ShiftRowToBack(var nPosition:Integer;var CList:TList):Boolean;
var
  i:Integer;
begin
   try
   Result:=False;
   begin
      for i:=CList.Count-1 downto nPosition do
      begin
        CList[i]:=CList[i-1];
      end;
      Result:=True;
   end;
   except
     WriteLog(CMemo,'在进行CList移位时发生错误(TCustomDisplay.ShiftRowToBack)');;
   end;
end;

//删除指定LISTVIEW和LIST中的具体位置的行
Function TCustomDisplay.DeleteRow(var Position:integer;var CList:TList):Boolean;
var
  i:Integer;
begin
   try
   Result:=False;
   begin
     i:=Position;
     Dispose(CList[i]);
     CList.Delete(i);
     Result:=True;
   end;
   except
     WriteLog(CMemo,'在进行CList指定行删除时发生错误(TCustomDisplay.ShiftRowToBack)');;
   end;
end;

//在CListview中显示CList中的数据
procedure TCustomDisplay.RefreshListview(var CListview:TListView;var CList:TList);
begin
  CListView.items.Clear() ;
  CListView.items.BeginUpdate();
  CListView.Items.Count := CList.Count ;
  CListView.Items.EndUpdate ;
end;

//向LISTVIEW列表指定列中增加指定的图标
//nColumn>=0,nColumn=0表示从LISTVIEW的第2列开始增加图标
Function TCustomDisplay.AddIconToColumn(var CListView:TListview;var nColumn,nIconSeq:Integer):Boolean;
var tmpList: TListItem;
begin
   try
   Result:=False;
   begin
      tmpList:=CListView.Items.Item[nColumn];
      tmpList.SubItemImages[nColumn] := nIconSeq;
      Result:=True;
   end;
   except;
   end;
end;

//设置定制显示类中的状态颜色数组
//目的:为具有不同状态的指定列设置不同的颜色做基础准备
{
0:白色背景
1:红色背景
2:黄色背景
3:绿色背景
4:天蓝色背景
5:水红色背景
6:中灰色背景
7:浅绿色背景
8:墨绿色背景
9:黑色前景淡绿色背景}
procedure TCustomDisplay.SetStateColor;
begin
  aStateColor[0]:=clWhite;
  aStateColor[1]:=clRed;
  aStateColor[2]:=clYellow;
  aStateColor[3]:=clLime;
  aStateColor[4]:=clSkyBlue;
  aStateColor[5]:=clFuchsia;
  aStateColor[6]:=clMedGray;
  aStateColor[7]:=clAqua;
  aStateColor[8]:=clMoneyGreen;
  aStateColor[9]:=$00E6F0E1;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -