bestlong 怕失憶論壇
標題:
Listview
[打印本頁]
作者:
bestlong
時間:
2006-11-8 10:02
標題:
Listview
procedure TfrmMaterialDict.RefreshSubMaterialView(treeNode: TTreeNode);
var
ItemType: integer;
objNode: TNodeObject;
objMaterial :TMaterialObj;
listItem: TListItem;
sql: string;
rs: _Recordset;
begin
lvMaterial.ViewStyle := vsList;
lvMaterial.Items.Clear;
lvMaterial.ViewStyle := vsReport;
ClearTxt;
PageControl1.ActivePageIndex := 0;
if Assigned(treeNode.Data) then
begin
objNode := TNodeObject(treeNode.Data);
if objNode.IS_Depot = 1 then //Ϊ·ÖÀa
begin
ItemType := objNode.Sort;
sql := 'select ID,SORT,MCODE,MNAME, MODAL,UNIT,PRICE,KIND,MAXNUM,MINNUM,DEPOTID,SELLPRICE1,SELLPRICE2,STOCKS from T_MMS_MATERIAL_DICT where SORT = ' + inttostr(ItemType) + 'and Mcode <> 0 order by Mcode';
rs := ADOConn.Execute(sql);
while not rs.EOF do
begin
objMaterial := TMaterialObj.Create;
objMaterial.ID := rs.Fields['ID'].Value;
objMaterial.SORT := rs.Fields['SORT'].Value;
objMaterial.MCODE := rs.Fields['MCODE'].Value;
objMaterial.KIND := rs.Fields['KIND'].Value;
listItem := lvMaterial.Items.Add;
listItem.Caption := objMaterial.KIND;
objMaterial.MNAME := rs.Fields['MNAME'].Value;
listItem.SubItems.Add(objMaterial.MNAME);
if not VarIsNull(rs.Fields['MODAL'].Value) then
objMaterial.MODAL := rs.Fields['MODAL'].Value
else
objMaterial.MODAL := '';
listItem.SubItems.Add(objMaterial.MODAL);
if not VarIsNull(rs.Fields['UNIT'].Value) then
objMaterial.MUNIT := rs.Fields['UNIT'].Value
else
objMaterial.MUNIT :='';
listItem.SubItems.Add(objMaterial.MUNIT);
if not VarIsNull(rs.Fields['PRICE'].Value) then
objMaterial.PRICE := rs.Fields['PRICE'].Value
else
objMaterial.PRICE := 0;
listItem.SubItems.Add(format('%5.2f',[objMaterial.PRICE]));
if not VarIsNull(rs.Fields['SELLPRICE1'].Value) then
objMaterial.SELLPRICE1 := rs.Fields['SELLPRICE1'].Value
else
objMaterial.SELLPRICE1 := 0;
listItem.SubItems.Add(format('%5.2f',[objMaterial.SELLPRICE1]));
if not VarIsNull(rs.Fields['SELLPRICE2'].Value) then
objMaterial.SELLPRICE2 := rs.Fields['SELLPRICE2'].Value
else
objMaterial.SELLPRICE2 := 0;
listItem.SubItems.Add(format('%5.2f',[objMaterial.SELLPRICE2]));
if not VarIsNull(rs.Fields['STOCKS'].Value) then
objMaterial.STOCKS := rs.Fields['STOCKS'].Value
else
objMaterial.STOCKS := 0;
listItem.SubItems.Add(format('%5.2f',[objMaterial.STOCKS]));
if not VarIsNull(rs.Fields['MAXNUM'].Value) then
objMaterial.MAXNUM := rs.Fields['MAXNUM'].Value
else
objMaterial.MAXNUM := 0;
listItem.SubItems.Add(format('%5.2f',[objMaterial.MAXNUM]));
if not VarIsNull(rs.Fields['MINNUM'].Value) then
objMaterial.MINNUM := rs.Fields['MINNUM'].Value
else
objMaterial.MINNUM := 0;
listItem.SubItems.Add(format('%5.2f',[objMaterial.MINNUM]));
listItem.Data := Pointer(objMaterial);
rs.MoveNext;
lvMaterial.ItemIndex :=0;
lvMaterialClick(Self);
end;
rs.Close;
end;
end;
end;
複製代碼
from:
http://topic.csdn.net/t/20040614/16/3090833.html
作者:
bestlong
時間:
2006-11-8 10:22
//增加
i := ListView1.Items.Count;
with ListView1 do
begin
ListItem := Items.Add;
ListItem.Caption := IntToStr(i);
ListItem.SubItems.Add('第 ' + IntToStr(i) + ' 行');
ListItem.SubItems.Add('其他内容');
end;
//依標題刪除
for i := ListView1.Items.Count-1 downto 0 do
if ListView1.Items[i].Caption = Edit1.Text then
begin
ListView1.Items.Item[i].Delete(); //删除當前選中行
end;
//選中一行
if ListView1.Selected <> nil then
Edit1.Text := ListView1.Selected.Caption;
// listview1.Items[Listview1.Items.Count - 1].Selected := True;
// listview1.Items[Listview1.Items.Count - 1].MakeVisible(True);
procedure TForm1.Button2Click(Sender: TObject); // 選擇第一行
begin
listview1.SetFocus;
listview1.Items[0].Selected := True;
end;
procedure TForm1.Button1Click(Sender: TObject); // 選擇最後一行
begin
listview1.SetFocus;
listview1.Items[Listview1.Items.Count - 1].Selected := True;
end;
複製代碼
//這是個通用的函數
procedure ListViewItemMoveUpDown(lv : TListView; Item : TListItem; MoveUp, SetFocus : Boolean);
var
DestItem : TListItem;
begin
if (Item = nil) or
((Item.Index - 1 < 0) and MoveUp) or
((Item.Index + 1 >= lv.Items.Count) and (not MoveUp))
then Exit;
lv.Items.BeginUpdate;
try
if MoveUp then
DestItem := lv.Items.Insert(Item.Index - 1)
else
DestItem := lv.Items.Insert(Item.Index + 2);
DestItem.Assign(Item);
lv.Selected := DestItem;
Item.Free;
finally
lv.Items.EndUpdate;
end;
if SetFocus then lv.SetFocus;
DestItem.MakeVisible(False);
end;
//此為呼叫過程,可以任意指定要移動的Item,下面是當前(Selected)Item
ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移
ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移
複製代碼
TListView组件使用方法
引用CommCtrl单元
procedure TForm1.Button1Click(Sender: TObject);
begin
ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,從0開始
end;
//用LISTVIEW顯示表中的紀錄:
procedure viewchange(listv:tlistview;table:tcustomadodataset;var i:integer);
begin
tlistview(listv).Items.BeginUpdate; {listv:listview名}
try
tlistview(listv).Items.Clear;
with table do {table or query名}
begin
active:=true;
first;
while not eof do
begin
listitem:=tlistview(listv).Items.add;
listitem.Caption:=trim(table.fields[i].asstring);
// listitem.ImageIndex:=8;
next;
end;
end;
finally
tlistview(listv).Items.EndUpdate;
end;
end;
複製代碼
ListView使用中的一些要点。以下以一个两列的ListView为例。
→增加一行:
with ListView1 do
begin
ListItem:=Items.Add;
ListItem.Caption:='第一列内容';
ListItem.SubItems.Add('第二列内容');
end;
複製代碼
→清空ListView1:
ListView1.Items.Clear;
→得到当前被选中行的行的行号以及删除当前行:
For i:=0 to ListView1.Items.Count-1 Do
If ListView1.Items[i].Selected then //i=ListView1.Selected.index
begin
ListView1.Items.Delete(i); //删除當前選中行
end;
複製代碼
當然,ListView有OnSelectItem事件,可以判断選擇了哪行,用個全局變數把它赋值出来。
→讀某行某列的操作:
Edit1.Text := listview1.Items
.Caption; //讀第i行第1列
Edit2.Text := listview1.Items
.SubItems.strings[0]; //讀第i行第2列
Edit3.Text := listview1.Items
.SubItems.strings[1]; //讀第i行第3列
依次類推,可以用循環讀出整列。
→將焦點上移一行:
For i:=0 to ListView1.Items.Count-1 Do
If (ListView1.Items[i].Selected) and (i>0) then
begin
ListView1.SetFocus;
ListView1.Items.Item[i-1].Selected := True;
end;
複製代碼
不過在Delphi6中,ListView多了一个ItemIndex属性,所以只要
ListView1.SetFocus;
ListView1.ItemIndex:=3;
就能設定焦點了。
Delphi的listview能實現交替顏色嗎?
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
i: integer;
begin
i:= (Sender as TListView).Items.IndexOf(Item);
if odd(i) then sender.Canvas.Brush.Color:= E0F0D7
else sender.Canvas.Brush.Color:= F0EED7;
Sender.Canvas.FillRect(Item.DisplayRect(drIcon));
end;
複製代碼
作者:
bestlong
時間:
2006-11-8 10:29
標題:
在 ListView 的 Item 中顯示 CheckBox 與 Button
在ListView的Item中显示CheckBox与Button,主要思路就是在绘制每一个Item时创建一个CheckBox与Button,并显示在Item对应Column的位置.主要注意于3点:
将要显示的CheckBox与Button(其实可以更多其它控件)定义在一个结构中,使用指针连接到Item.Data,以便与该Item对应
要检查Item.Data是否为nil,防止重复创建控件
通过Item.SubItem所对应的Column.Width得出CheckBox与Button应该放置的坐标
代码并不难懂,首先定义一个结构:
type PItemCtrl = ^TItemCtrl
TtemCtrl = record
CheckBox: TCheckBox;
Button: TButton;
end;
end;
procedure TfrmMain.ListView1CustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rect: TRect;
P: PItemCtrl;
begin
{ 第2个子项目上显示CheckBox,第5个子项目上显示Button }
if SubItem in [2, 5] then
begin
DefaultDraw:= False; // 不显示默认的文本.
Rect:= Item.DisplayRect(drBounds); // 获取Item显示的区域.
if Item.Data = nil then // 如果为空则创建CheckBox及Button.
begin
new(P); // 创建一个指针用于存储CheckBox及Button.
{ 创建并显示CheckBox }
P.CheckBox:= TCheckBox.Create(ListView1);
P.CheckBox.Parent:= ListView1;
P.CheckBox.Caption:= '';
P.CheckBox.Width:= 20;
P.CheckBox.Height:= 20;
P.CheckBox.Left:= Rect.Right - ListView1.Columns[3].Width
- ListView1.Columns[4].Width - ListView1.Columns[5].Width
- ((ListView1.Columns[2].Width + P.CheckBox.Width) div 2);
P.CheckBox.Top:= Rect.Top;
P.CheckBox.Visible:= True;
{ SubItems[2 -1].Caption为0和1,直接转换为Boolean型并给CheckBox赋值. }
P.CheckBox.Checked:= StrToBool(Item.SubItems[SubItem -1]);
{ 创建并显示Button }
P.Button:= TSpeedButton.Create(ListView1);
P.Button.Parent:= ListView1;
P.Button.Caption:= '...';
P.Button.Width:= 20;
P.Button.Height:= 20;
P.Button.Left:= Rect.Right - ((ListView1.Columns[5].Width
+ P.Button.Width) div 2);
P.Button.Top:= Rect.Top;
P.Button.Visible:= True;
Item.Data:= P; // 将CheckBox及Button的结构指针保存于Item.Data属性.
end;
end;
end;
作者:
bestlong
時間:
2006-11-8 11:48
procedure TForm1.FormCreate(Sender: TObject);
var
ListItem: TListItem;
NewColumn: TListColumn;
begin
// Create a ListView item for each image in the ImageList
with ListView1 do
begin
CheckBoxes := True;
ViewStyle := vsReport;
RowSelect := True;
ListItem := Items.Add;
ListItem.Caption := '1';
ListItem.SubItems.Add('Item 1');
ListItem.SubItems.Add('Item 11');
ListItem := Items.Add;
ListItem.Caption := '2';
ListItem.SubItems.Add('Item 2');
ListItem.SubItems.Add('Item 22');
ListItem := Items.Add;
ListItem.Caption := '3';
ListItem.SubItems.Add('Item 3');
ListItem.SubItems.Add('Item 33');
// Create columns to show during viewing as vsReport
NewColumn := Columns.Add;
NewColumn.Width := 20;
NewColumn := Columns.Add;
NewColumn.Caption := 'Column 1';
NewColumn := Columns.Add;
NewColumn.Caption := 'Column 2';
NewColumn := Columns.Add;
NewColumn.Caption := 'Column 3';
NewColumn := Columns.Add;
NewColumn.Caption := 'Column 4';
end;
end;
複製代碼
作者:
bestlong
時間:
2006-11-8 13:58
procedure Tf_rs_bm.ListViewOrder(Fieldname:String);
var
p: ^Integer;
ID: Integer;
ListItem: TListItem;
Node: TTreeNode;
Array_bmid: Array of string;
Array_bmidnumber: integer;
Light_all: Boolean;
i: integer;
SubNode: TTreeNode;
Subp: ^integer;
Tem_level: integer;
begin
Listview2.items.Clear;
Light_all := False;
Array_bmidnumber := 0;
Node := TreeView1.Selected;
if Node = nil then Exit;
p := Node.Data;
if p=Nil then Exit;
ID := p^;
if id=0 then Light_all := true
else begin
Array_bmidnumber := 1;
SetLength(Array_bmid,1);
Array_bmid[0] := IntToStr(p^);
Tem_level := Node.Level;
SubNode := Node.GetNext;
While (SubNode<>nil) and (SubNode.level>Tem_level) do begin
Inc(Array_bmidnumber);
Subp := SubNode.Data;
SetLength(Array_bmid,Array_bmidnumber);
Array_bmid[Array_bmidnumber-1] := IntToStr(Subp^);
SubNode := SubNode.GetNext;
end;
end;
with TQuery.Create(Nil) do
begin
DatabaseName := DatabaseAlias;
SQL.Clear;
if Light_all then
begin
SQL.Add('select id, ryxx_del, ryxx_ryjd, ryxx_xm, ryxx_xb, ryxx_ssbm, ryxx_csny, ryxx_gj, ryxx_jg, ryxx_zzmm, ryxx_hyzk, ryxx_whcd, ryxx_byxx, ryxx_sxzy, ryxx_jsjsp, ryxx_wysp, ryxx_jszc from rs_ryxx');
SQL.Add(' where ryxx_del=' IntToStr(FLAG_NOTDELETE));
end
else begin
if Array_bmidnumber <= 0 then exit;
SQL.Add('select id, ryxx_del, ryxx_ryjd, ryxx_xm, ryxx_xb, ryxx_ssbm, ryxx_csny, ryxx_gj, ryxx_jg, ryxx_zzmm, ryxx_hyzk, ryxx_whcd, ryxx_byxx, ryxx_sxzy, ryxx_jsjsp, ryxx_wysp, ryxx_jszc from rs_ryxx');
SQL.Add(' where ryxx_del=' IntToStr(FLAG_NOTDELETE));
if Array_bmidnumber > 0 then
begin
Sql.Add(' and (ryxx_ssbm=' Array_bmid[0]);
if Array_bmidnumber>1 then
begin
for i := 1 to Array_bmidnumber-1 do begin
Sql.Add(' or ryxx_ssbm=' Array_bmid[i]);
end;
end;
Sql.Add(')');
end;
end;
if LightDesc then sql.Add(' order by ' Fieldname ' desc')
else sql.Add (' order by ' Fieldname);
Open;
First;
ListView2.Items.Clear;
while not Eof do
begin
ListItem := ListView2.Items.Add();
ListItem.Caption := Trim(FieldByName('ryxx_xm').AsString);
New(p);
p^ := FieldByName('id').AsInteger;
ListItem.Data := p;
if FieldByName('ryxx_xb').AsString='男' then
begin
ListItem.ImageIndex := 0;
ListItem.SubItems.Add('男');
end
else
begin
if FieldByName('ryxx_xb').AsString='女' then
begin
ListItem.ImageIndex := 1;
ListItem.SubItems.Add('女');
end
else
begin
ListItem.ImageIndex := 0;
ListItem.SubItems.Add('');
end;
end;
case FieldByName('ryxx_ryjd').AsInteger of
0: ListItem.SubItems.Add('应聘人员');
1: ListItem.SubItems.Add('试用人员');
2: ListItem.SubItems.Add('正式员工');
3: ListItem.SubItems.Add('退休员工');
4: ListItem.SubItems.Add('辞退员工');
5: ListItem.SubItems.Add('离休员工');
else ListItem.SubItems.Add('');
end;
Listitem.subitems.add(Fieldbyname('ryxx_csny').Asstring);
ListItem.subitems.Add(fieldbyname('ryxx_gj').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_jg').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_zzmm').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_hyzk').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_whcd').Asstring);
Listitem.Subitems.Add(fieldbyname('ryxx_byxx').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_sxzy').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_jsjsp').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_wysp').Asstring);
ListItem.Subitems.Add(fieldbyname('ryxx_jszc').Asstring);
Next;
end;
Free;
end;
end;
複製代碼
歡迎光臨 bestlong 怕失憶論壇 (http://www.bestlong.idv.tw/)
Powered by Discuz! X1.5