存在一个listview,rowselect属性为true,单击的时候整行选择一个item,问题是
如果我单击被选中的item会Edit Caption,我想要在这种情况下如果单击的位置
正好是该item的一个subitem,那么就产生相同的效果,只不过被编辑的对象是该subitem.小弟第一次提问,谢谢大家的关注
如果我单击被选中的item会Edit Caption,我想要在这种情况下如果单击的位置
正好是该item的一个subitem,那么就产生相同的效果,只不过被编辑的对象是该subitem.小弟第一次提问,谢谢大家的关注
解决方案 »
- [讨论]delphi如何编写WindowsVista的边栏小工具
- adoquery参数为汉字,有时候有结果,有时候没有。。怎么办啊 。。在线等啊
- 用FASTREPORT252如何正确打印A4连纸正常分页?(急)
- 有关时间的运算
- MSSQL里面有一个字段jg,类型设置为numeric属性,在企业管理器设置此字段小数位为2位!问题就这样来了!
- 如何转换呀(在线等待)
- 急速!!加密模块创建问题?
- 切换桌面=无解?那么这些程序怎么怎么做的?
- 提供源码,给你发到邮箱(关于QQ的)
- 用shellexcute调用帮助文件太低级,有没有人用htmlhelp这个API调用过chm的帮助文件?到底该如何调用?
- 如何让子窗口在主窗口内打开呢?
- 大家帮我看看这段代码错哪儿了,谢谢!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
ListView1: TListView;
Edit1: TEdit;
procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Edit1Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
Item: TListItem;
Index: Integer;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
I, Temp: Integer;
Arr: Array of Integer; Rect: TRect;
begin
with ListView1 do
begin
Item := GetItemAt(X, Y);
if Item = nil then
begin
Edit1.Hide;
Index := -1;
exit;
end; SetLength(Arr, Columns.Count);
for I := Low(Arr) to High(Arr) do
Arr[I] := Columns[I].Width; Temp := 0;
Index := -1;
for I := Low(Arr) to High(Arr) do
begin
if (X > Temp + 1) and (X < Temp + Arr[I]) then
begin
Index := I;
break;
end;
Temp := Temp + Arr[I];
end; if Index < 0 then
begin
Edit1.Hide;
exit;
end; Rect := Item.DisplayRect(TDisplayCode(0)); Edit1.Font.Assign(Font);
if Index = 0 then
Edit1.Text := Item.Caption
else
Edit1.Text := Item.SubItems[Index - 1];
Edit1.SetBounds(Temp + Left + 2, Rect.Top + Top + 2, Arr[I] + 1, Rect.Bottom - Rect.Top);
if not Edit1.Showing then
Edit1.Show;
end;
end;procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.Hide;
Index := -1;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
with ListView1 do begin
ReadOnly := True;
HideSelection := False;
RowSelect := True;
end; Edit1.Hide;
Index := -1;
Item := nil;
end;procedure TForm1.Edit1Change(Sender: TObject);
begin
if (Item = nil) or (Index = -1 ) then exit;
if Index = 0 then
Item.Caption := Edit1.Text
else
Item.SubItems[Index - 1] := Edit1.Text
end;end.
不完善
自己再改改可能向TListView发消息跟简洁合理
但是我不会 :(