在listview中当鼠标选择了一项后点击右键才会弹出菜单
在空白的地方点击不会弹出
[解决办法]
procedure TForm1.ListView1Click(Sender: TObject);
begin
if ListView1.Items = nil then ListView1.PopupMenu := nil
else ListView1.PopupMenu := PopupMenu1;
end;
[解决办法]
可以设个全局变量,listview的onclick事件中把该变量设为true,其它地方的click则设为false
,弹不弹出都靠这个变量来判断
[解决办法]
procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
begin
if (cdsFocused in State) and (cdsselected in State) then
begin
ListView1.PopupMenu := PopupMenu1;
// OutputDebugString(PChar( 'In '));
end
else
begin
ListView1.PopupMenu := nil;
// OutputDebugString(PChar( 'OUT '));
end;
end;
[解决办法]
var
bTv_Roler_Sel := true;//全局
procedure TSysAdmin.TV_Expanded(Sender: TObject; Node: TTreeNode);
begin
bTv_Roler_Sel := true;
end;
procedure TSysAdmin.TV_Collapsed(Sender: TObject; Node: TTreeNode);
begin
bTv_Roler_Sel := true;
end;
procedure TSysAdmin.TVMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Node: TTreeNode;
begin
if bTv_Roler_Sel then begin
bTv_Roler_Sel := False;
Exit;
end;
Node := TV_Roler.GetNodeAt(X, Y);
if (Node <> nil) and (Node = TV_Roler.Selected) then
chNodeStatueImage(Node);//你要处理的东东
end;
[解决办法]
点前面 "+ "、 "- "不触发OnMouseDown,只展开,缩放
没有选中节点的时候点击不会触发(OnClick没有选中节点的时候点击也会触发)
[解决办法]
很简单,
if(listview1.selected <> nil)then
popupmenu1.Popup(0,0);//0,0为菜单弹出位置,自已设置两个整形数据就OK了
[解决办法]
对了,上面的代码写在Listview的点击事件中,属性不用作设置。
[解决办法]
1. 置一POPMENU, 不要LISTVIEW.
2.
procedure TFrmMain.ListViewFileMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ListItem: TListItem;
CursorPos : TPoint;
begin
ListItem := ListViewFile.GetItemAt(x, y);
if ((ListItem <> nil) and (Button = mbRight)) then
begin
ListViewFile.Selected := ListItem; // 褫恁
GetCursorPos(CursorPos);
ListMenu.Popup(CursorPos.X, CursorPos.Y);
end;
end;