listview难题征解!(150分)

  • 主题发起人 主题发起人 shyj
  • 开始时间 开始时间
S

shyj

Unregistered / Unconfirmed
GUEST, unregistred user!
注意(listview is vsReport Style)
1,在Listview中拖动一条记录时时,光标为
一行字,不显示为拖曳光标。而多条记录时则为拖曳光标。
请问如何全为拖曳光标,不显示那一行字?
2,如何使Listview初始化后以按某标题排序显示?
3,如何使listview某行全为粗体,其他为斜体?同时
又要保证listview的HideSelect:=false;
不要现成的组件,要实现的方法或例子。
 
4,如何使Listview的象Dbgrid那样可以定位记录?
 
在DELPHI的例子中就有一个
DEMOS文件夹中的Virtual Listview
 
可能是分少了。
ai...
可以再加分150
 
在fraright这个frame中排序的方法:
procedure TfraRight.lisvWuColumnClick(Sender: TObject;
Column: TListColumn);

function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer; stdcall;
begin
case ParamSort of //Column
0://Sort Main column.
if AtoZOrder then
Result:=lstrcmp(PChar(TListItem(Item1).Caption), PChar(TListItem(Item2).Caption))
else
Result:=-lstrcmp(PChar(TListItem(Item1).Caption), PChar(TListItem(Item2).Caption));
else //Sort one of the subcolumns (subitems).
if AtoZOrder then
Result:=lstrcmp(PChar(TListItem(Item1).SubItems[ParamSort-1]), PChar(TListItem(Item2).SubItems[ParamSort-1]))
else
Result:=-lstrcmp(PChar(TListItem(Item1).SubItems[ParamSort-1]), PChar(TListItem(Item2).SubItems[ParamSort-1]));
end;
end;

var hditem:THdItem;
I: Byte;
begin
if OldCol=Column.Index then
FAtoZ:=not FAtoZ
else
OldCol:=Column.Index;
AtoZOrder:=FAtoZ;
lisvWu.CustomSort(@CustomSortProc, Column.Index);
for I:=0 to lisvWu.Columns.Count-1 do
begin
FBitmap.Releasehandle;
if I=Column.Index then
begin
if AtoZOrder then
FBitmap.Handle:=ArrowDown
else
FBitmap.Handle:=ArrowUp
end
else
FBitmap.Handle:=NoArrow;
hditem.Mask := HDI_FORMAT;
Header_GetItem(GetDlgItem(lisvWu.Handle,0),I,hditem);
hditem.Mask:=HDI_BITMAP or HDI_FORMAT;
hditem.fmt:=hditem.fmt or HDF_BITMAP;
hditem.hbm:=FBitmap.Handle;
Header_SetItem(GetDlgItem(lisvWu.Handle,0),I,hditem);
end;

end;

procedure TfraRight.FrameEnter(Sender: TObject);//初始化
begin
ArrowUp:=LoadBitmap(hInstance, 'ARROWUP');
ArrowDown:=LoadBitmap(hInstance, 'ARROWDOWN');
NoArrow:=LoadBitmap(hInstance, 'NOARROW');
FBitmap:=TBitmap.Create;
lisvWuColumnClick(Sender,lisvWu.Columns[0]);
end;

procedure TfraRight.FrameExit(Sender: TObject);//free
begin
FBitmap.ReleaseHandle;
FBitmap.Free;
DeleteObject(ArrowUp);
DeleteObject(ArrowDown);
DeleteObject(NoArrow);
end;
 
>1,在Listview中拖动一条记录时时,光标为
>一行字,不显示为拖曳光标。而多条记录时则为拖曳光标。
>请问如何全为拖曳光标,不显示那一行字?

我也很想知道这个答案,不知道那位大侠解决了?追踪源码,
没能找出所以然来。
 
我也想知道!
谁Tel me?
 
你可以自定义光标,在onselectitem事件中设置dragcursor属性,如果只选中一个item,则
定义为自定义光标,否则就定义为缺省光标可以吗。
比如createcursor,loadcursor之类的函数都可以用上。
3、OnDrawItem事件可以处理这样的事吧!
 
多人接受答案了。
 
后退
顶部