取鼠标点击的文件名,能在鼠标选中文件时就得到文件名!300分!分批给,不食言!

xuziling20 2002-05-31 08:31:09
我用钩子可是不知道怎么得到鼠标点击的对象(文件或文件夹)的名字,有什么好的
主意,有建设性的也有分,
有代码的高分!!谢谢各位大虾帮忙!!!!!!!!
...全文
301 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuziling20 2002-06-03
  • 打赏
  • 举报
回复
怎么结不了贴啊
提示:贴子回复次数大于跟给分次数
xuziling20 2002-06-03
  • 打赏
  • 举报
回复
怎么结不了贴啊
提示:贴子回复次数大于跟给分次数
xuziling20 2002-06-03
  • 打赏
  • 举报
回复
怎么结不了贴啊
提示:贴子回复次数大于跟给分次数
bcb_fans 2002-06-03
  • 打赏
  • 举报
回复
那些代码我是都没有运行过!

另:你好像说过Delphi没有ListView_GetItemCount宏,实际上是有的,我们都冤枉Delphi了.下面是ComCtrls.pas的原码:


function TListItems.GetCount: Integer;
begin
if Owner.HandleAllocated then Result := ListView_GetItemCount(Handle)
else Result := 0;
end;

function TListItems.GetItem(Index: Integer): TListItem;
var
Item: TLVItem;
begin
Result := nil;
if Owner.HandleAllocated then
begin
if Owner.OwnerData then
begin
FillChar(Item, SizeOf(Item), 0);
with Item do
begin
mask := 0;
iItem := Index;
iSubItem := 0;
end;
Result := Owner.GetItem(Item);
end
else
begin
with Item do
begin
mask := LVIF_PARAM;
iItem := Index;
iSubItem := 0;
end;
if ListView_GetItem(Handle, Item) then Result := TListItem(Item.lParam);
end;
end;
end;


-----------------------------
恭喜!!! 问题终于搞定!

同时我也谢谢你,因为经过这么一折腾,我的Delphi又增进不少!!!共同提高,CSDN是个好地方!!

单独发五个帖子送分还真有点那个!!!
xuziling20 2002-06-03
  • 打赏
  • 举报
回复
你的CPP代码运行通过了吗?你所写的代码运行一下,一直会有“系统出现错误,ELPLORER 会关闭”出现,我昨天试了半天都是这样,后来改动后,但取对于中文的名字,一定会出现错误。而且不稳定。
你的DELPHI代码中一定也没RUN过,像FILENAME:=item.paztext;在DELPHI中就不对,而且像ITEM。MASK也有关系,其实这些都是小问题。主要的问题已解决;看来这500分是你的了,晚一点我会送上。这算不算是大手笔啊,呵呵,班主会以为你作弊,封了你就完了。!!
现在愁的是要发五个贴才有500分啊! :(
bcb_fans 2002-06-02
  • 打赏
  • 举报
回复
不好了,这里打雷准备下雨了,我要关机了,明天再谈.ByBy.
xuziling20 2002-06-02
  • 打赏
  • 举报
回复
在将之转DELPHI,
bcb_fans 2002-06-02
  • 打赏
  • 举报
回复
老兄,你有没有看我贴的CPP代码啊?

--CPP

LV_ITEM Item;

SendMessage(Handle,LVM_GETITEM,0,(LPARAM)&Item);

if(Item.state==LVIS_SELECTED)
{
Memo1->Lines->Add("Selected FileName="+AnsiString(Item.pszText);
}

------Delphi

Item: LV_ITEM;
FileName: String;

SendMessage(Handle,LVM_GETITEM,0,Item);
if Item.state=LVIS_SELECTED then
begin
//在CPP中FileName=AnsiString(Item.pszText)就可以了, Delphi这样写不知对不对,不对你自己更改吧
FileName:=Item.pszText;
end;

欢迎继续贴!!!
xuziling20 2002-06-02
  • 打赏
  • 举报
回复
另:我用的是98第二版。不知道行不行。
xuziling20 2002-06-02
  • 打赏
  • 举报
回复
我用 LISTVIEW_GETITEMTEXT 取不到文件名 !:(

看来还要你再辛苦一下,
xuziling20 2002-06-02
  • 打赏
  • 举报
回复
再试!
bcb_fans 2002-06-02
  • 打赏
  • 举报
回复
没有ListView_GetItemCount宏???,那用消息:

int Count=SendMessage(Handle,LVM_GETITEMCOUNT,0,0);

Item: LV_ITEM;

SendMessage(Handle,LVM_GETITEM,0,Item);

if Item.state=...

可以搞定了吧.


bcb_fans 2002-06-02
  • 打赏
  • 举报
回复
function GetFile(...);
var
ItemCount:Integer;
Item: LV_ITEM;
i: Integer;

begin

ItemCount:=ListView_GetItemCount(Handle);

for i=0 to ItemCount-1 do
begin
Item.iItem:=i;

ListView_GetItem(Handle,Item);
if Item.state= LVIS_SELECTED then
Memo1.Lines.Add("How to write this code???");
end ;
end;

实在对不起,我的Delphi太差劲,只能写到这种程度了.
Ra1998 2002-06-02
  • 打赏
  • 举报
回复
记号。
xuziling20 2002-06-02
  • 打赏
  • 举报
回复
问题没有进展,DELPHI没有类似ListView_GetItemCount(句柄);的方法来进行下去,跟以前一样, 我只能得到句柄,却没办法!:(
而这也正是我几天一直被困挠的问题。
Billy_Chen28 2002-06-01
  • 打赏
  • 举报
回复
陈省那本《DELPHI深入探索》有一个SHELL的例子,很详细
xuziling20 2002-06-01
  • 打赏
  • 举报
回复
大家理解错了,要在资源管理器中就是窗口中点击,取得是系统中鼠标点 的文件名,不是本程序的文件名或类名。要么用钩子,要么用SHELL接口。
bcb_fans 2002-06-01
  • 打赏
  • 举报
回复
顺便说一下,我先前贴的代码实际上是想实现类似WinZip那样的功能.
bcb_fans 2002-06-01
  • 打赏
  • 举报
回复
//下面代码得到选中的文件名,如果还不明白,继续发贴,
//直到帮你搞定,因为在帮你的同时,我的水平也得到很大地提高
int ItemCount=ListView_GetItemCount(句柄);

LV_ITEM Item;

for(int i=0;i<ItemCount;i++)
{
Item.iItem=i;

ListView_GetItem(句柄,&Item);
if(Item.state==LVIS_SELECTED)
{
Memo1->Lines->Add("Selected FileName="+AnsiString(Item.pszText));
}
}
xuziling20 2002-06-01
  • 打赏
  • 举报
回复
在C中可能比较容易,可是DELPHI就麻烦多了
加载更多回复(24)

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧