新建工程,加两个label组件
uses shellapi
uses shellapi;
{$R *.dfm}
procedure URLink(URL:PChar);//定义一个过程
begin
ShellExecute(0, nil, URL, nil, nil, SW_NORMAL);
end;
procedure TForm1.FormCreate(Sender: TObject);//窗口初始化
begin
label1.Caption:='http://www.cnitblog.com/shuyezi122';
label2.Caption:='shuyezi122@163.com';
label1.Font.Color:=clblue;
label2.Font.Color:=clblue;
label1.Cursor:=crHandPoint;
label2.Cursor:=crHandPoint;
end;
procedure TForm1.Label1Click(Sender: TObject);
begin
URLink('http://www.cnitblog.com/shuyezi122');
end;
procedure TForm1.Label2Click(Sender: TObject);
begin
URLink('mailto:shuyezi122@163.com');
end;
procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
Label1.Font.Color:=clred;
end;
procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
Label1.Font.Color:=clblue;
end;
procedure TForm1.Label2MouseEnter(Sender: TObject);
begin
Label2.Font.Color:=clred;
end;
procedure TForm1.Label2MouseLeave(Sender: TObject);
begin
Label2.Font.Color:=clblue;
end;
end.
这些一看就明白了吧
posted @
2009-01-21 03:25 小叶子 阅读(235) |
评论 (0) |
编辑 收藏
设置关闭按键不可用(存大,只是灰色)
var
hm: HMENU;
begin
hm := GetSystemMenu(Handle, False);
EnableMenuItem(hm, SC_CLOSE, MF_DISABLED or MF_GRAYED);
end;
设置关闭按键不可用(右键后你发现 "关闭" 没了)
var
hm: HMENU;
begin
hm := GetSystemMenu(Handle, False); // 这里的Handle就是要无效按钮的目标
DeleteMenu(hm, SC_CLOSE, 0);
end;
说下 DeleteMenu()中第二个参数
'禁止还原按钮
Success = DeleteMenu(hMenu, SC_RESTORE, 0)
'禁止改变大小
Success = DeleteMenu(hMenu, SC_SIZE, 0)
'禁止最大化
Success = DeleteMenu(hMenu, SC_MAXIMIZE, 0)
'禁止最小化
Success = DeleteMenu(hMenu, SC_MINIMIZE, 0)
'禁止关闭
Success = DeleteMenu(hMenu, SC_CLOSE, 0)
'禁止移动
Success = DeleteMenu(hMenu, SC_MOVE,0)
在主窗口加菜单(就是左键后出现最小(大)化,关闭那里)
var
hSysMenu:HMENU;
begin
hSysMenu:=GetSystemMenu(Handle,False);
AppendMenu(hSysMenu,MF_separator,0,nil);//加一条线
AppendMenu(hSysMenu,MF_STRING,0,'新菜单');
end;
posted @
2009-01-21 02:45 小叶子 阅读(447) |
评论 (0) |
编辑 收藏
procedure TForm1.Button1Click(Sender: TObject);
var
aCanvas:TCanvas;
i:Tbitmap;
begin
aCanvas:=TCanvas.Create;
i:=tbitmap.Create;
i.LoadFromFile('c:\1.bmp');
try
aCanvas.Handle:=GetDC(0);//把桌面给acanvas
aCanvas.Draw(480,300,i);
finally
aCanvas.Free;
end;
end;
posted @
2009-01-18 23:27 小叶子 阅读(454) |
评论 (0) |
编辑 收藏
uses UrlMon;
procedure TForm1.Button1Click(Sender: TObject);
begin
URLDownloadToFile(nil,'
http://www.baidu.com/img/baidu_logo.gif',
'c:\12.txt',0,nil);
end;
图片文件都可以!
还可以对自己盘内实现复制
uses UrlMon;
procedure TForm1.Button1Click(Sender: TObject);
begin
URLDownloadToFile(nil,'f:\ceshi.txt','c:\12.txt',0,nil);
end;
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCSTR szURL,
LPCSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB);
pCaller
仅当调用者是一个ActiveX对象才使用,对于一个非ActiveX对象的应用程序这个参数应该为NULL
szURL
为要下载的绝对URL 文件名,这个参数不能为空。
szFileName
包含创建的目标文件名
dwReserved
必须为零
lpfnCB
一个指向 IBindStatusCallback 接口的指针, IE通过它向你通知下载的进度
再说一种方法
uses gifimage;//这里去网上下载
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
pic: TGIFImage;
begin
ms:=tmemorystream.Create;
idhttp1.Get('http://www.baidu.com/img/baidu_logo.gif',ms);
ms.Position:=0;//移动指针到最开头的位置
if ms.Size=0 then//如果文件大小等于0,那么...
begin
showmessage('出错');
ms.Free;
Exit;
end;
pic:=tgifimage.Create;
pic.LoadFromStream(ms);
image1.Picture.Graphic:=pic;
ms.Free;
pic.Free;
end;
posted @
2009-01-18 22:38 小叶子 阅读(447) |
评论 (0) |
编辑 收藏
Windows 规定 RCDATA 用作自定义格式, 我们也可以自定义格式名称, 譬如本例(rc 文件):
MyFile1 RCDATA "notepad.exe"
procedure TForm1.Button1Click(Sender: TObject);
var rs: TResourceStream;
begin rs := TResourceStream.Create(HInstance,
'MyFile1', RT_RCDATA);
rs.SaveToFile(
'c:\temp\pad.exe');
WinExec(
'c:\temp\pad.exe',
1);
rs.Free;
end;
同样,dll文件也可以,如果做木马之类可用来释放木马
posted @
2009-01-17 16:27 小叶子 阅读(574) |
评论 (0) |
编辑 收藏
rc文件: mywav WAVE "F:\歌曲\17.wav"
添加到project1.exe中
注意:在uses加mmsystem,下面两种方法都加
方法1:
procedure TForm1.Button2Click(Sender: TObject);
var
hResInfo:THandle;
PtrSound:pChar;
hRes:THandle;
begin
hResInfo:=FindResource(hinstance,'mywav','WAVE');//查找所需资源
hRes:=LoadResource(HInstance,hResInfo);//把资源放到全局存储器中
ptrSound:=LockResource(hRes);//锁到全局存储器中这个资源
sndplaysound(ptrSound,snd_async or snd_Memory);//开始播放调用
end;
方法2:
procedure TForm1.Button1Click(Sender: TObject);
var
rs: TResourceStream;
begin
rs := TResourceStream.Create(HInstance, 'mywav', 'WAVE');
sndPlaySound(rs.Memory, SND_ASYNC or SND_MEMORY);
//上面那句可用下句代替
//PlaySound(rs.Memory, HInstance, SND_ASYNC or SND_MEMORY);
rs.Free;
end;
上面两种方法中关于API简介
FindResource()
函数功能:该函数确定指定模块中指定类型和名称的资源所在位置
函数原型:HRSRC FindResource(HMODULE hModule,LPCTSTR lpName,LPCTSTR lpType);
hModule:处理包含资源的可执行文件的模块,用HInstance就是指在本程序中找资源
lpName:指定资源名称
lpType:指定资源类型
应用程序可以使用FindResource函数去查找任何种类资源,但是这个函数只有在应用程序并发调用LoadLibray和LockResource函数来存取二进制资源时才被使用,所以下面用到了LockResource()
关于更多请自己查找资料
LockResource()
函数功能:该函数锁定内存中的指定资源,说白了就是返回资源在内存中的地址
LPVOID LockResource(HGLOBAL hResDate);
hResDate:被装载的资源的句柄。函数LoadResource可以返回这个句柄
所以又用到了函数:LoadResource()
LoadResource()
函数功能:该函数装载指定资源到全局存储器
hModule:处理包合资源的可执行文件的模块句柄,hinstance就是指程序自身刚初始化时
hReslnfo:将被装载资源的句柄,由FindResource()得到的句柄
PlaySound() sndPlaySound()
bool PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音.fdwSound是标志的组合(更多请查查关资料),只说下snd_async or snd_Memory or SND_LOOP
snd_async用异步方式播放声音,PlaySound函数在开始播放后立即返回,如果没有程序会卡住
snd_Memory播放载入到内存中的声音,此时pszSound是指向声音数据的指针,如果没有声音就不能播放
snd_loop 重复播放声音,必须与snd_async一块使用,如果不一起那么就不会重复播放声音
中间参数hmod,是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL,所以可是hinstance,也可是数字0
函数sndPlaySound的功能与PlaySound类似,但少了一个参数。函数的声明为
BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);
TResourceStream 资源流
TResourceStream.Create(Instance: THandle; const ResName: string; ResType: PChar); 可以把指定的资源读入Tresourcestream的实例对应的内存中
第一个参数指定一个包含有资源数据的可执行文件或者dll文件的实例句柄
第二个参数用于说明所需调入的资源在.RC文件中的名字或者数字ID,由于参数类型是string,
所以如果用数字ID来说明的话,就在数字前面加#。而且用数字比用字符所需要的内存要少
第三个参数指定资源类型
posted @
2009-01-15 22:31 小叶子 阅读(1975) |
评论 (0) |
编辑 收藏
几乎每一个提取资源的例子都用到了 HInstance, 做个对比测试:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=inttostr(hinstance);
edit2.Text:=inttostr(application.Handle);
edit3.text:=inttostr(self.Handle);
end;
你会发现hinstance=4194304
4194304=X400000
电脑让用户使用的内存是在X400000开始的,也就是说HINSTANCE是初始化的的句柄4194304
posted @
2009-01-15 22:16 小叶子 阅读(1084) |
评论 (0) |
编辑 收藏
你想使用系统的cur,只要用(-1..-22)就可
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.cursor:=-4;//1-到-22可自己试用下
end;
下面说cur文件使用
*.cur文件你可以自己做,也要在自己电脑上找一些
先编辑rc文件:att cursor "attack.cur"
再加到project1.exe中
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.Cursors[1] := LoadCursor(HInstance, 'att');//这是如果是2,下面就是2Cursors[2] form1.cursor:=1;//这里是2 cursor:=2
end;
posted @
2009-01-15 21:52 小叶子 阅读(396) |
评论 (0) |
编辑 收藏
如果上节说的一样(delphi资源文件调用 - ICO)
首先编辑 rc 文件 1hao bitmap "12.bmp"
窗体上添加一个 Image、 Button
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Picture.Bitmap.Handle:=loadbitmap(hinstance,'1hao');
end;
只是调用函数不同而已
posted @
2009-01-15 19:19 小叶子 阅读(513) |
评论 (0) |
编辑 收藏
1.新建:application工程文件,然后保存在桌面ceshi文件夹内
2.在ceshi文件夹内新建记事本,并写入: 1hao icon "xin.ico",重名命为:ceshi.rc
3.delphi中按:ctrl+alt+F11 打开project manager 右键点击projcet1.exe,选择add... 在这里加上ceshi.rc
说明:你可以打开:project->view source查看,已经加上了:{$R 'ceshi.res' 'ceshi.rc'}
4.在工程文件上加上三个button按钮,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
Icon.Handle:=loadicon(hinstance,'1hao');//截入你的xin.ico
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Icon.Handle:=loadicon(hinstance,'mainico');//mainico换成nil也可,这是系统默认图标
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Application.Icon:=nil;//不使用图标(会显示 Windows 系统的默认图标)
end;
HInstance 当前程序实例的句柄, 调用资源文件一定要用到它;
ico1 是资源文件的标识符;
LoadIcon 是个 API 函数, 专门用于调用资源中的 ico 文件, 它返回的是指定 ico 文件的句柄.
posted @
2009-01-15 19:08 小叶子 阅读(914) |
评论 (0) |
编辑 收藏