当前位置:主页>仓库管理软件> 列表

关于获取图标 找仓库进销存表格

记账软件版1楼: 获取制定路径的图标,
路径可以是程序,文档,或者文件夹,
如果是程序还好说,有API帮忙,可是如果路径是文件夹呢?
而且此文件夹可能是普通的文件夹,开式菜单的程序文件夹,收藏夹,控制面板,磁盘驱动器等等,这些系统图标该如何获取?
快捷方式的图标又如何获取?

2楼: procedure TForm1.Button1Click(Sender: TObject);
var
IconIndex: word;
Buffer: array[0..2048] of char;
IconHandle: HIcon;
begin
StrCopy(@Buffer, ''C:\'');//可以是程序,文档,文件夹,磁盘驱动器...
IconHandle := ExtractAssociatedIcon(HInstance, Buffer, IconIndex);
if IconHandle <> 0 then
Icon.Handle := IconHandle;
end; 如汽车维修管理软件

3楼: 别忘了 uses ShellAPI

=^0^=

4楼: 如果目标路径是快捷方式,那么按照 kaida 的方法获取的图标会还有最下角的快捷方式箭头,如何避免?

5楼: 除系统快捷方式外,标准快捷方式都带箭头。要消除小箭头,可以修改注册表。具体方法网上查一查,我一时忘了。

6楼: 如果直接读取出快捷方式的目标然后作为ExtractAssociatedIcon的参数的话获取的图标就没有箭头了,但是这样做如果快捷方式的目标是控制面板里的一些项目的话就不会得到图标了?还有没有别的方法?

记账软件版7楼: 没有解决的方法么?没办法结帖啊.

8楼: 给你帖一分,很有用的,我看过了


谈Delphi编程中资源文件的应用
陈经韬
(一)初级应用篇:
资源文件一般为扩展名为res的文件.在VC中资源文件用得非常普遍,但Delphi在其联机帮助中对资源文件没作什么介绍,其实利用其自带的资源编译工具BRCC32.EXE(一般位于\Delphi\BIN目录下),我们完全可以做出跟VC一样效果的文件来。
资源文件最大的好处是能将一些在必要时才调用的文件跟可执行文件一起编译,生成一个文件.这样做最大的好处就是使外部文件免遭破坏.例如在一条程序中你要临时调用一幅图片,一般作法是把图片放在某一路径下(通常是主程序所在路径),但如果用户路径误删你的图片文件,则可能使程序找不到相应文件而出错崩溃.另外,如果你想自己的程序界面美观,想用一些自定义光标,也要用到资源文件。
资源文件的使用步骤为:
1.编写rc脚本文本
用记事本或其它文本编辑器编写一个扩展名为rc的文件。例如:

mycur cursor move.cur //加入光标
mypic Bitmap Water.BMP //加入位图
mywav WAVE happy.wav //加入声音
myAVI AVI EPOEN.AVI //加入视频
myIco ICON CJT.ICO //加入图标

格式分别为在资源文件中的名称->类型->实际文件名称,例如上面第一行定义一个名为mycur的光标,实际名称为加入光标move.cur.
2.将rc文件编译成res资源文件
将脚本文件和实际文件拷到Brcc32.EXE所在目录,执行DOS命令。格式为:Brcc32 脚本文件(回车),例如有一名为myfirst.rc的脚本文件,则执行 Brcc32 myfirst.rc(回车)即可。如果你是懒人,也可新建一批处理文件,内容只有一行:Brcc32 mufist.rc.(因为Delphi安装后一般会在自动批处理文件中指明搜索路径的。)如果编译成功,则会生成一个结尾为res的文件,这个文件就是我们需要的资源文件。
3.在Delphi单元中加入资源文件
将生成的res资源文件拷贝到你所编程序的路径下,在单元文件{$R *DFM}后加上一句{$R mufirst.res},则将res文件加入去,编译后资 源文件即已包含在可执行文件中了。若你有多个资源文件,也按上法依次加入。
4.在Delphi程序中调用资源文件
资源文件在Delphi中的关键字为hinstance.下面给出具体用法.
<1>光标的调用
首先在程序中定义一个值大于0的常量,因为Delphi本身用0-负16来索引默认的光标,所以我们制定的光标应从表面上1开始索引。然后在窗口的Oncreat事件中添加以下代码:
screen.cursor[35]:=Loadcursor (hinstance,''mycur'');
其中35为大于1的常量,mycur为光标在资源文件中的名字。如果希望在其他控件上使用定制光标,例如Panel控件,只需在程序的适当处加入以下代码:
Panel1.cursor:=35;
<2>位图的调用
新建一项工程,添加一Timage控件,在需要显示的地方写以下代码:
Var mymap:Hbitmap;
begin
mymap:=LoadBitmap(hinstance,''mypic'');
Image1.picture.Bitmap.Handle:=mymap;
end;
其中"mypic"为位图资源文件中的名称。
〈3〉AVI文件的调用
新建一工程,添加一Animate控件,在需要的地方加入:
animater1.resname:=''myAVI'';
animater1.Active:=true;
其中myAVI为视频文件在资源文件中的名称。
〈4〉调用WAV文件
在uses中加入mmsystm单元,以便在程序中播放WAV文件。播放时Playsound(pchar(''mywav''),hinstance,sndsync or snd_resource);其中mywav为声音文件在资源中的名称。
〈5〉加入光标
加入光标比较容易,只要将res文件加入单元文件中即可。但需注意,名称最好取"W"."WW"等,使第一个字母尽量靠后,以免与主程序的图标顺序颠倒。这样一来,别人在使用你的程序时如果想选择其它图标就有很多选择了。
补充:
1.资源类型除上述类型外,还可以字体文件,字符串文件等。
2.资源文件不但可以在标准图形界面下使用还可在控制台下使用。
下面我们来试验一下:
新建一工程,将唯一的一个Form删除,然后修改工程文件。增加一句{$Apptype console},在uses子句中加入mmsystem,并将其它引用单元删掉。将Begin和end之间语句删掉。至此,我们就可和Turbo PASCAL下编程序一样,且还可以调用windows的API和资源。将资源文件----{$R myfist.res}加入。在Begin和end之间写下:
writeln(''演示程序,按任意键开始!'');
readln;
playsound(pchar(''mywav''),hinstance,snd_sync or snd_resource);
writeln(''演示结束!'');
运行程序,将弹出一个标准DOS窗口,按任意键播放声音文件。是不是很COOL呢!我曾下载过一个播放器,在其安装目录下我发现有一"DOS程序",用鼠标双击它便弹出一个DOS窗口,显示DOS时代特有的画图,并有背景音乐!可能就是用这个方法做的。
3.Delphi本身自带了一个叫Image Editor的工具,同样可以编辑资源文本,但和本文的方法比较,可得出下表:

**************************************
Image Editor Brcc32

BMP 只支持16位色 任意色

光标 黑白两色 任意色

ICO 只支持16位色 任意色

AVI 不支持 支持

WAV 不支持 支持

字体
字符串 不支持 支持
其他
****************************************

上面说的是直接在程序本身的调用。其实资源文件还有其它用法。比如说在你的程序携带其它文件,要用的时候释放出来。
例如: myexe exefile ''ha1.exe''//脚本文件
下面是自定义释放函数ExtractRes,本例中使用如下:
ExtractRes(''exefile'',''myexe'',''c:\new.exe'');


就把ha1.exe以new.exe为名字保存到C盘根目录下了.

function TForm1.ExtractRes(ResType, ResName, ResNewName: string): boolean;
var
Res: TResourceStream;
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result := true;
finally
Res.Free;
end;
except
Result := false;
end;
----------------------------------------------------------------------


来自:lxw5214, 时间:2006-2-19 9:29:28, ID:3357397
uses mmsystem

资源实做举例--如何将Wav文件做到EXE文件里
使用过C++的朋友们都知道,资源在Windows编程里非常重要,合理地运用资源
可以使程序更加灵活。其实在Delphi里,同样也可以制作资源,只不过Delphi本
身对可视的编程强调很多,对资源的制作就没有多加解释,也没有象Borland
C++ 里提供了资源制作工具Resource WorkShop,这些都没有关系,下面我就通
过将WAV文件做成资源,从而编译进EXE文件来介绍一下如何利用Delphi本身
提供的工具制作资源。
16位的Delphi 1.0和32位的Delphi2.0、3.0都提供了资源

编译工具,其中 Delphi 1.0的资源编译器叫BRCC.EXE,Delphi 2.0的资源编译器
叫BRCC32.EXE 用来编译32位资源,所有资源编译器都只提供了命令行版本,
没有提供Windows 版本。制作一个资源一般要通过以下几个步骤:
1)编写.RC文件
.RC文件是资源的源文件,编译器也就编译这个文件,生成.RES的资源文件
首先在我们的项目子目录中建立一个纯文本文件,起名叫Sound.rc,文件中
有一行,内容为:
SOUND1 WAV SOUND.WAV
其中SOUND.WAV为一个Windows下普通的声音文件
2)编译它
在DOS的提示符下打 BRCC SOUND.RC 硬盘哗啦啦转一会儿后,就编译完了
3)制作程序
这也是最复杂,最灵活的一步,首先启动Windows, 再启动Delphi, 并且将项目
中的文件保存到我们的项目中的子目录中。 在Unit1.pas中找这么一行
{$R *.DFM}
把我们的资源文件就声明在后面
{$R SOUND.RES}
然后,在Form1中声明两个全局变量
PtrSound : PChar;
hRes : THandle; {handle to the loaded resource
if 0 indicates nothing playing}
再在Form1的Create事件中写下如下代码
procedure TForm1.FormCreate(Sender: TObject);
var hResInfo : THandle;
begin


hResInfo := FindResource(HInstance, ''SOUND1'', ''WAVE'');
hRes := LoadResource(HInstance, hResInfo);
if hRes > 32 then {its a good load}
begin {lock the resource}
ptrSound:=LockResource(hRes);
end;
end;
然后在Form1中放一个按钮Button1,写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
sndplaysound(ptrSound,snd_async or snd_Memory);
end;
这时候就可以运行了,当然,这只是一个例子,只是提供了调用资源的
一种方法,距离实际应用还有一段距离。愿这个Tip能给大家起个抛砖引
玉的作用。


将*.WAV文件置入可执行文件内部的具体做法如下:
假设我们有个名为GRANARY.WAV的文件,先编辑一个
名为 AOE.RC的文件,其内容为: GRANARY WAVE GRANARY.WAV
运行命令BRCC32 AOE.RC,得到AOE.RES。 在DELPHI的项目文件,
只要加入{$R AOE.RES}语句,编译 后即可将GRANARY.WAV包含进可执行文件内部。
调用这个WAV文件的方法是 PlaySound(''GRANARY'',hInstance,SND_RESOURCE);

1)编写.RC文件,格式如:
SOUND1 mp3 SOUND.mp3
2)编译它
在DOS的提示符下打 BRCC32 SOUND.RC
3)制作程序
{$R SOUND.RES}
1:编辑一个resource.rc文件,里面类似如下:
hookdll RC_Dll YourHookDllFileName.Dll
2:然后用Brcc32.exe编译:
brcc32 resource.rc
结果生成resource.res文件
3:修改窗体Pas或者Dpr文件,添加下面的代码:
{$R *.res}
{$R resource.res}
4:关键的代码:
在窗体初始化或者工程的开头部分添加代码:
var
res:tresourcestream;
....
res:=tresourcestream.create(instance,''hookdll'',''RC_Dll'');
res.SaveToFile(''YourHookDllFileName.Dll'');
res.Free;
5:你的程序退出的时候:
DeleteFile(''YourHookDllFile.Dll'');
6:End

9楼: 这位兄台,有用是有用,但是不是我要的,目前我还没有找到读取所有快捷方式的图标的方法,看来大富翁的朋友也没有答案...

10楼: 在shell32中有个函数,好象可以完成你要的东西,你自己查查吧,好象是sh....icon的

11楼: 是 SHDefExtractIcon 吗? 不知道怎么用,以下是MSDN关于此函数的说明:
SHDefExtractIcon Function

--------------------------------------------------------------------------------



Provides a default handler to extract an icon from a file.

Syntax

HRESULT SHDefExtractIcon( LPCTSTR pszIconFile,
int iIndex,
UINT uFlags,
HICON *phiconLarge,
HICON *phiconSmall,
UINT nIconSize
);
Parameters

pszIconFile
[in] Pointer to a null-terminated buffer containing the path and name of the file from which the icon is extracted.
iIndex
[in] Index of the icon within the file named in pszIconFile
uFlags
[in] Flags controlling the icon extraction.
GIL_SIMULATEDOC
Use the extracted icon to create a document icon.
phiconLarge
[out] Pointer to the handle of the version of the icon specified in the LOWORD of nIconSize.
phiconSmall
[out] Pointer to the handle of the version of the icon specified in the HIWORD of nIconSize.
nIconSize
[out] The LOWORD contains the large icon size, while the HIWORD contains the small icon size. Size is measured in pixels. Pass 0 to specify default large and small sizes.


Return Value

Returns one of the following values.

S_OK Success.
S_FALSE The requested icon is not present.
E_FAIL The file cannot be accessed, or is being accessed through a slow link.


Function Information

Minimum DLL Version shell32.dll version 6.0 or later
Custom Implementation No
Header shlobj.h
Import library shell32.lib
Minimum operating systems Windows XP
Unicode Implemented as ANSI and Unicode versions.

希望知道怎么用的朋友告诉我.

12楼: 这个我也没用过,你只有自己去try 如仓库进销存表格

13楼: 没法try啊,连use什么都不知道,use shellapi 也不行,shell32也不行,我对它菜了,没有知道的朋友吗?帮个忙说一声