02 2008 档案
WinAPI: FindWindow、FindWindowEx - 查找窗口
摘要:FindWindow( lpClassName, {窗口的类名} lpWindowName: PChar {窗口的标题} ): HWND; {返回窗口的句柄; 失败返回 0} //FindWindowEx 比 FindWindow 多出两个句柄参数: FindWindowEx( Parent: HWND; {要查找子窗口的父窗口句柄}... 阅读全文
posted @ 2008-02-28 21:51 万一 阅读(123574) 评论(39) 推荐(2) 编辑
WinAPI: GetClassName - 获取指定窗口的类名
摘要://声明: GetClassName( hWnd: HWND; {指定窗口句柄} lpClassName: PChar; {缓冲区} nMaxCount: Integer {缓冲区大小} ): Integer; {返回类名大小; 失败返回 0} //测试1: 新建一个工程, 主窗口的类名默认是 TForm1, 用程序获取一下看看 var ... 阅读全文
posted @ 2008-02-28 21:25 万一 阅读(34380) 评论(15) 推荐(0) 编辑
WinAPI: AddAtom、DeleteAtom、FindAtom、GetAtomName、GlobalAddAtom、GlobalDeleteAtom、GlobalFindAtom、GlobalGetAtomName
摘要:这是储存字符串的一组 API. 通过 AddAtom 储存一个字符串, 返回一个 ID; GetAtomName 通过这个 ID 可返回储存的字符串; 还可以用 FindAtom 查找、用 DeleteAtom 删除已储存的字符串. 这个储存区有分本地(程序级)和全局(系统级)两种, 带 Global 前缀的是全局的[但在 Win32 下它们是否还有区别还有待考究]. 表中的字符串不分大小写,... 阅读全文
posted @ 2008-02-28 16:57 万一 阅读(8228) 评论(5) 推荐(0) 编辑
WinAPI: GetNextWindow - 获取指定窗口Z上或Z下的窗口的句柄
摘要://声明: GetNextWindow( hWnd: HWND; {指定的窗口句柄} uCmd: UINT {指定的关系选项} ): HWND; {失败返回0; 成功返回符合的窗口句柄} //uCmd 可选值: GW_HWNDNEXT = 2; {同级别 Z 序之下} GW_HWNDPREV = 3; {同级别 Z 序之上} 这是 GetWindow 的简化. 阅读全文
posted @ 2008-02-28 14:45 万一 阅读(5886) 评论(3) 推荐(0) 编辑
WinAPI: GetTopWindow - 获取指定窗口的子窗口中最顶层的窗口句柄
摘要://声明: GetTopWindow( hWnd: HWND; {指定的窗口句柄} ): HWND; {失败返回0; 成功返回最顶层的子窗口句柄} 这和用 GetWindow 函数使用 GW_CHILD 参数时应该是一样的, 测试一下: var h1,h2: HWND; begin h1 := GetTopWindow(GetDesktopWindow); h... 阅读全文
posted @ 2008-02-28 14:30 万一 阅读(15604) 评论(7) 推荐(0) 编辑
WinAPI: GetWindow - 获取与指定窗口具有指定关系的窗口的句柄
摘要://声明: GetWindow( hWnd: HWND; {指定的窗口句柄} uCmd: UINT {指定的关系选项} ): HWND; {失败返回0; 成功返回符合的窗口句柄} //uCmd 可选值: GW_HWNDFIRST = 0; {同级别第一个} GW_HWNDLAST = 1; {同级别最后一个} GW_HWNDNEXT = 2; {同级别下一个} GW_H... 阅读全文
posted @ 2008-02-28 14:02 万一 阅读(15113) 评论(7) 推荐(0) 编辑
为钩子的下一步学习补课: 如何提取 32 位中的某一位
摘要:Integer 类型是 32 位的, 有 4 个字节, 现在我们需要能够提取出其 32 位中的某一位. 但 Delphi 最小的整数类型也是一个字节(8位)的: Byte(无符号)、Shortint(有符号). 要不先从提取一个字节开始: var i: Integer; b: Byte; begin i := MaxInt; {Integer 的最大值} ShowMessage(... 阅读全文
posted @ 2008-02-27 22:28 万一 阅读(5746) 评论(8) 推荐(1) 编辑
使用钩子函数[4] - 钩子链和 CallNextHookEx 的返回值
摘要:SetWindowsHookEx 函数的第一个参数表示钩子类型, 共有 14 种选择, 前面我们已经用过两种: WH_KEYBOARD、WH_MOUSE. 系统会为每一种类型的钩子建立一个表(那就是 14 个表), 譬如某个应用程序启动了键盘钩子, 我们自己的程序也启动了键盘钩子, 同样是键盘钩子就会进入同一个表. 这个表(可能不止一个, 可能还会有鼠标钩子等等)就是传说中的"钩子链". 假... 阅读全文
posted @ 2008-02-27 00:02 万一 阅读(9012) 评论(21) 推荐(0) 编辑
使用钩子函数[3] - 建立一个全局的鼠标钩子
摘要:分两步: 一、建立 DLL, 并在 DLL 实现钩子的设置、释放和钩子函数; 二、再建一个工程调用测试. 第一步: 做 DLL 先建立一个 DLL 工程, 自动初始的代码如下(去掉注释了): library Project1; uses SysUtils, Classes; {$R *.res} begin end. //把工程保存为 MyHook.dpr, 并实现如下... 阅读全文
posted @ 2008-02-26 14:37 万一 阅读(10199) 评论(56) 推荐(0) 编辑
使用钩子函数[2]
摘要:钩子函数虽然不多, 但其参数复杂, 应该从参数入手才能深入进去. UnhookWindowsHookEx 只需要 SetWindowsHookEx 返回的钩子句柄作参数, 这个简单; 先看看 SetWindowsHookEx 的声明: SetWindowsHookEx( idHook: Integer; {钩子类型} lpfn: TFNHookProc; {函数指针} hmo... 阅读全文
posted @ 2008-02-26 10:38 万一 阅读(6737) 评论(9) 推荐(0) 编辑
WinAPI: GetForegroundWindow - 获取前台窗口的句柄
摘要://声明: GetForegroundWindow: HWND; //举例: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = clas... 阅读全文
posted @ 2008-02-26 09:52 万一 阅读(13003) 评论(21) 推荐(0) 编辑
枚举当前所有窗口
摘要:回复 maxcool 的问题: {要有个 Memo 接受数据} procedure TForm1.Button1Click(Sender: TObject); var h: HWnd; p: array[0..254] of char; begin h := GetWindow(Handle, GW_HWNDFIRST); while h 0 do begin i... 阅读全文
posted @ 2008-02-25 21:19 万一 阅读(12651) 评论(24) 推荐(1) 编辑
使用钩子函数[1]
摘要:目前对钩子的理解: 譬如我们用鼠标在某个窗口上双击了一次, 或者给某个窗口输入了一个字母 A; 首先发现这些事件的不是窗口, 而是系统! 然后系统告诉窗口: 喂! 你让人点了, 并且是连续点了两鼠标, 你准备怎么办? 或者是系统告诉窗口: 喂! 有人向你家里扔砖头了, 不信你看看, 那块砖头是 A. 这时窗口的对有些事件会忽略、对有些事件会做出反应: 譬如, 可能对鼠标单击事件忽略, ... 阅读全文
posted @ 2008-02-25 15:34 万一 阅读(23691) 评论(52) 推荐(5) 编辑
WinAPI: 钩子回调函数之 CallWndProcRetProc
摘要:CallWndProcRetProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:53 万一 阅读(3370) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 ForegroundIdleProc
摘要:ForegroundIdleProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:51 万一 阅读(2303) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 ShellProc
摘要:ShellProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:50 万一 阅读(2823) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 DebugProc
摘要:DebugProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:49 万一 阅读(1861) 评论(1) 推荐(0) 编辑
WinAPI: 钩子回调函数之 HardwareProc
摘要:HardwareProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:47 万一 阅读(1794) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 MouseProc
摘要:MouseProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:44 万一 阅读(4021) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 SysMsgFilterProc
摘要:SysMsgFilterProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:43 万一 阅读(2203) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 CBTProc
摘要:该函数在 窗口被激活、创建、销毁、最大化、最小化、移动、改变大小等动作前; 完成一条系统命令前; 从系统消息队列中移去一个鼠标或键盘消息前; 与系统消息同步前; 被调用! CBTProc( nCode: Integer; {要处理的消息类型, 见下表} wParam: WPARAM; {消息对应的参数, 见下表} lParam: LPARAM {消息对应的参数, 见下表} ): ... 阅读全文
posted @ 2008-02-25 14:42 万一 阅读(3161) 评论(1) 推荐(0) 编辑
WinAPI: 钩子回调函数之 CallWndProc
摘要:CallWndProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:41 万一 阅读(2654) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 GetMsgProc
摘要:GetMsgProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:40 万一 阅读(3021) 评论(1) 推荐(0) 编辑
WinAPI: 钩子回调函数之 KeyboardProc
摘要:KeyboardProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:39 万一 阅读(4294) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 JournalPlaybackProc
摘要:JournalPlaybackProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:39 万一 阅读(1770) 评论(0) 推荐(0) 编辑
WinAPI: 钩子回调函数之 JournalRecordProc
摘要:JournalRecordProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:38 万一 阅读(2611) 评论(1) 推荐(0) 编辑
WinAPI: 钩子回调函数之 MsgFilterProc
摘要:MsgFilterProc( nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {} ): LRESULT; {} //待续... 阅读全文
posted @ 2008-02-25 14:33 万一 阅读(3166) 评论(0) 推荐(0) 编辑
WinAPI: CallNextHookEx - 调用下一个钩子
摘要:CallNextHookEx( hhk: HHOOK; {当前钩子的句柄} nCode: Integer; {钩子代码; 就是给下一个钩子要交待的} wParam: WPARAM; {要传递的参数; 由钩子类型决定是什么参数} lParam: LPARAM {要传递的参数; 由钩子类型决定是什么参数} ): LRESULT; {会返回下一个钩子执行后的返回值... 阅读全文
posted @ 2008-02-25 13:34 万一 阅读(9867) 评论(2) 推荐(0) 编辑
WinAPI: UnhookWindowsHookEx - 卸掉钩子
摘要:UnhookWindowsHookEx( hhk: HHOOK {钩子句柄} ): BOOL; {True/False} //举例: 阅读全文
posted @ 2008-02-25 13:21 万一 阅读(6649) 评论(0) 推荐(0) 编辑
WinAPI: SetWindowsHookEx - 设置钩子
摘要:提示: 如果要设置系统级钩子, 钩子函数必须在 DLL 中. SetWindowsHookEx( idHook: Integer; {钩子类型} lpfn: TFNHookProc; {函数指针} hmod: HINST; {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0} dwThreadId: DWOR... 阅读全文
posted @ 2008-02-25 13:10 万一 阅读(40028) 评论(8) 推荐(1) 编辑
Windows 消息
摘要:消息 值 注释 WM_NULL$0000 WM_CREATE$0001 WM_DESTROY$0002 WM_MOVE$0003 WM_SIZE$0005 WM_ACTIVATE$0006 WM_SETFOCUS$0007 WM_KILLFOCUS$0008 WM_ENABLE$000A WM_SETREDRAW$000B WM_SETTEXT$000C WM_GETTEXT$000... 阅读全文
posted @ 2008-02-25 02:18 万一 阅读(12345) 评论(36) 推荐(1) 编辑
Windows 多媒体函数(winmm.dll 中的函数)汇总
摘要:函数 简介 auxGetDevCaps查询指定的辅助输出设备以确定其性能 auxGetNumDevs检取系统中存在的辅助输出设备的数量 auxGetVolume返回指定的辅助输出设备的当前卷设备 auxOutMessage向指定的辅助输出设备发送一条消息 auxSetVolume在指定的辅助输出设备中设置卷 CloseDirver关闭指定的可安装驱动器 DefDriverProc为任何不由... 阅读全文
posted @ 2008-02-24 23:25 万一 阅读(9650) 评论(0) 推荐(0) 编辑
WinAPI: midiOutOpen - 打开 MIDI 输出设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了 PostMessage timeGetSystemTime timeGetTime timeSetEvent timeKillEvent midiOutShortMsg midiOutLongMsg OutputDebugString 外, 也不能有其他系统调用. //声明:... 阅读全文
posted @ 2008-02-23 23:19 万一 阅读(5615) 评论(17) 推荐(0) 编辑
WinAPI: midiInOpen - 打开 MIDI 输入设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了 PostMessage timeGetSystemTime timeGetTime timeSetEvent timeKillEvent midiOutShortMsg midiOutLongMsg OutputDebugString 外, 也不能有其他系统调用. //声明:... 阅读全文
posted @ 2008-02-23 22:54 万一 阅读(4203) 评论(0) 推荐(0) 编辑
WinAPI: midiOutCacheDrumPatches - 预装鼓音色
摘要:提示: 参数三数组中的每一个元素代表 128 种鼓音色中的一种; MIDI 通道用 0-15 表示, 譬如通道 9 和 15 使用了 60 号键上的音色, 数组的第 60 个元素就是 $8200. //声明: midiOutCacheDrumPatches( hMidiOut: HMIDIOUT; {设备句柄; 这个设备应该是内部合成器} uPatch: UINT; {指定鼓... 阅读全文
posted @ 2008-02-23 22:24 万一 阅读(1710) 评论(0) 推荐(0) 编辑
WinAPI: midiOutCachePatches - 预装音色
摘要:提示: 参数三数组中的每一个元素代表 128 种音色中的一种; MIDI 通道用 0..15 表示, 譬如通道 0 和 8 使用了 0 号音色, 数组的第 0 个元素就是 $0101. //声明: midiOutCachePatches( hMidiOut: HMIDIOUT; {设备句柄; 这个设备应该是内部合成器} uBank: UINT; {指定音色组; 缺... 阅读全文
posted @ 2008-02-23 21:52 万一 阅读(1505) 评论(0) 推荐(0) 编辑
WinAPI: midiOutSetVolume - 设置 MIDI 输出设备的音量
摘要://声明: midiOutSetVolume( hmo: HMIDIOUT; {设备句柄} dwVolume: DWORD {新的音量值; 低两位是左声道音量, 高两位是右声道音量; $FFFF是最大, $0000是最小} ): MMRESULT; {成功返回 0; 可能的错误值如下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSE... 阅读全文
posted @ 2008-02-23 21:05 万一 阅读(2010) 评论(0) 推荐(0) 编辑
WinAPI: midiOutGetVolume - 获取 MIDI 输出设备的音量
摘要://声明: midiOutGetVolume( hmo: HMIDIOUT; {设备句柄} lpdwVolume: PDWORD {返回音量的地址; 低两位是左声道音量, 高两位是右声道音量; $FFFF是最大, $0000是最小} ): MMRESULT; {成功返回 0; 可能的错误值如下:} MMSYSERR_INVALHANDLE = 5; ... 阅读全文
posted @ 2008-02-23 21:01 万一 阅读(1740) 评论(0) 推荐(0) 编辑
WinAPI: midiInAddBuffer - 向 MIDI 输入设备发送一个输入缓冲区
摘要:提示: 缓冲区写满后送回应用程序; 输入缓冲区只用于系统互斥的消息; 在缓冲区传给 midiInAddBuffer 之前, 先要调用 midiInPrepareHeader 准备; 还要调用 GlobalAlloc 给 TMidiHdr 和其中 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: ... 阅读全文
posted @ 2008-02-22 22:47 万一 阅读(1769) 评论(0) 推荐(0) 编辑
WinAPI: midiOutGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: midiOutGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 0... 阅读全文
posted @ 2008-02-22 22:30 万一 阅读(1249) 评论(0) 推荐(0) 编辑
WinAPI: midiInGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: midiInGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 0;... 阅读全文
posted @ 2008-02-22 22:29 万一 阅读(1153) 评论(0) 推荐(0) 编辑
WinAPI: midiInMessage - 向 MIDI 输入设备发送一条消息
摘要://声明: midiInMessage( hMidiIn: HMIDIIN; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): MMRESULT; {函数成功返回发送的消息} //举例: 阅读全文
posted @ 2008-02-22 22:24 万一 阅读(1605) 评论(0) 推荐(0) 编辑
WinAPI: midiOutMessage - 向 MIDI 输出设备发送一条消息
摘要://声明: midiOutMessage( hMidiOut: HMIDIOUT; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): MMRESULT; {函数成功返回发送的消息} //举例: 阅读全文
posted @ 2008-02-22 22:23 万一 阅读(1782) 评论(0) 推荐(0) 编辑
WinAPI: midiOutLongMsg - 向输出设备发送一条系统专用的 MIDI 消息
摘要:提示: 在缓冲区给 midiOutLongMsg 之前, 先要调用 midiOutPrepareHeader 准备; 还要调用 GlobalAlloc 给 TMidiHdr 和其中 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: midiOutLongMsg( hMidiOut: HMIDIO... 阅读全文
posted @ 2008-02-22 22:18 万一 阅读(2085) 评论(2) 推荐(0) 编辑
WinAPI: midiOutShortMsg - 向输出设备发送 MIDI 短消息
摘要:提示: 此函数可以发送系统专用消息以外的任何 MIDI 消息; 直到已经发送给输出设备才返回. //声明: midiOutShortMsg( hMidiOut: HMIDIOUT; {设备句柄} dwMsg: DWORD {MIDI 消息; 消息是 2 字节, 第一字节在低位} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSY... 阅读全文
posted @ 2008-02-22 22:07 万一 阅读(2220) 评论(0) 推荐(0) 编辑
WinAPI: midiOutGetDevCaps - 查询输出设备性能
摘要://声明: midiOutGetDevCaps( uDeviceID: UINT; {设备 ID} lpCaps: PMidiOutCaps; {TMidiOutCaps 结构的指针} uSize: UINT {TMidiOutCaps 结构的大小} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_BAD... 阅读全文
posted @ 2008-02-22 21:56 万一 阅读(1736) 评论(0) 推荐(0) 编辑
WinAPI: midiInGetDevCaps - 查询输入设备性能
摘要://声明: midiInGetDevCaps( DeviceID: UINT; {设备 ID} lpCaps: PMidiInCaps; {TMidiInCaps 结构的指针} uSize: UINT {TMidiInCaps 结构的大小} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_BADDEVICE... 阅读全文
posted @ 2008-02-22 21:53 万一 阅读(1751) 评论(0) 推荐(0) 编辑
WinAPI: midiOutReset - 重置输出设备
摘要:提示: 函数将关闭通道上的所有标记, 放弃未处理的缓冲区并返回给程序; //声明: midiOutReset( hMidiOut: HMIDIOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} //举例: 阅读全文
posted @ 2008-02-22 21:41 万一 阅读(1343) 评论(0) 推荐(0) 编辑
WinAPI: midiOutClose - 关闭输出设备
摘要:提示: 函数成功后, 句柄不再有效; 如果已经发送给 midiOutLongMsg 函数的缓冲区没有返回给程序, 函数会失败; 调用 midiOutReset 可将所有挂起的缓冲区标记为已执行. //声明: midiOutClose( hMidiOut: HMIDIOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INV... 阅读全文
posted @ 2008-02-22 21:35 万一 阅读(1321) 评论(0) 推荐(0) 编辑
WinAPI: midiInClose - 关闭输入设备
摘要:提示: 函数成功后, 句柄不再有效; 如果 midiInAddBuffer 发送的缓冲区没有返回到程序, 函数会失败; 调用 midiInReset 可将所有挂起的缓冲区标记为已执行. //声明: midiInClose( hMidiIn: HMIDIIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE... 阅读全文
posted @ 2008-02-22 21:31 万一 阅读(1312) 评论(0) 推荐(0) 编辑
WinAPI: midiInReset - 重置输入
摘要:提示: 函数会终止输入, 位置清 0; 放弃未处理的缓冲区并返回给程序; TWaveHdr 结构中的 dwBytesRecorded 将包含实际数据的长度. //声明: midiInReset( hMidiIn: HMIDIIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效... 阅读全文
posted @ 2008-02-22 21:24 万一 阅读(1163) 评论(0) 推荐(0) 编辑
WinAPI: midiInStop - 停止输入
摘要:提示: 函数会将当前缓冲区标记为已执行, 但会保留队列中任何空的缓冲区. //声明: midiInStop( hMidiIn: HMIDIIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} //举例: 阅读全文
posted @ 2008-02-22 21:12 万一 阅读(1267) 评论(0) 推荐(0) 编辑
WinAPI: midiInStart - 启动输入
摘要:提示: 该函数会将时间标记清 0; 非系统专用消息会直接给用户; 系统专用消息放在由 midiInAddBuffer 函数提供的缓冲区中, 如果队列中没有缓冲区, 数据将被丢弃; 当缓冲区已满、或接收到一条完全的系统专用消息、或调用 midiInReset 时, 缓冲区返还给用户; TMidiHdr 的 dwBytesRecorded 中会返回实际接收到的数据长度. //声明: midiInS... 阅读全文
posted @ 2008-02-22 21:04 万一 阅读(1375) 评论(0) 推荐(0) 编辑
WinAPI: midiOutGetID - 获取输出设备 ID
摘要://声明: midiOutGetID( hMidiOut: HMIDIOUT; {获取输出设备句柄} lpuDeviceID: PUINT {接受 ID 的变量的指针} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} //举例: 阅读全文
posted @ 2008-02-22 18:26 万一 阅读(1277) 评论(0) 推荐(0) 编辑
WinAPI: midiInGetID - 获取输入设备 ID
摘要://声明: midiInGetID( hMidiIn: HMIDIIN; {获取输入设备句柄} lpuDeviceID: PUINT {接受 ID 的变量的指针} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} //举例: 阅读全文
posted @ 2008-02-22 18:22 万一 阅读(1444) 评论(0) 推荐(0) 编辑
WinAPI: midiOutGetNumDevs - 获取 MIDI 输出设备的数目
摘要://声明: midiOutGetNumDevs: UINT; {无参数; 返回 MIDI 输出设备的数目} //举例: 阅读全文
posted @ 2008-02-22 18:15 万一 阅读(1865) 评论(0) 推荐(0) 编辑
WinAPI: midiInGetNumDevs - 获取 MIDI 输入设备的数目
摘要://声明: midiInGetNumDevs: UINT; {无参数; 返回 MIDI 输入设备的数目} //举例: 阅读全文
posted @ 2008-02-22 18:14 万一 阅读(1527) 评论(0) 推荐(0) 编辑
WinAPI: midiOutUnprepareHeader - 清除由 midiOutPrepareHeader 完成的准备
摘要:提示: 设备写满缓冲区返回给程序后, 须调用此函数; 释放(GlobalFree)缓冲区前, 须调用此函数; 取消一个尚未准备的缓冲区将无效, 但函数返回 0 //声明: midiOutUnprepareHeader( hMidiOut: HMIDIOUT; {设备句柄} lpMidiOutHdr: PMidiHdr; {TMidiHdr 结构指针} uSize: UI... 阅读全文
posted @ 2008-02-22 18:05 万一 阅读(1320) 评论(0) 推荐(0) 编辑
WinAPI: midiInUnprepareHeader - 清除由 midiInPrepareHeader 完成的准备
摘要:提示: 设备写满缓冲区返回给程序后, 须调用此函数; 释放(GlobalFree)缓冲区前, 须调用此函数; 取消一个尚未准备的缓冲区将无效, 但函数返回 0 //声明: midiInUnprepareHeader( hMidiIn: HMIDIIN; {设备句柄} lpMidiInHdr: PMidiHdr; {TMidiHdr 结构指针} uSize: UINT ... 阅读全文
posted @ 2008-02-22 18:02 万一 阅读(1283) 评论(0) 推荐(0) 编辑
动画演示 Delphi 2007 IDE 功能[4] - 自定义界面
摘要:动画剧本: 在编辑模式下自定义界面; 在调试模式下自定义界面; 删除界面自定义. 阅读全文
posted @ 2008-02-22 13:11 万一 阅读(5839) 评论(0) 推荐(0) 编辑
WinAPI: midiOutPrepareHeader - 为 MIDI输出准备一个缓冲区
摘要:提示: 必须调用 GlobalAlloc 给 TWaveHdr 和其中的 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: midiOutPrepareHeader( hMidiOut: HMIDIOUT; {设备句柄} lpMidiOutHdr: PMidiHdr; {TMidiH... 阅读全文
posted @ 2008-02-21 20:02 万一 阅读(1414) 评论(0) 推荐(0) 编辑
WinAPI: midiInPrepareHeader - 为 MIDI 输入准备一个缓冲区
摘要:提示: 缓冲区写满后送回应用程序. 在缓冲区给 midiInAddBuffer 前, 先要调用 midiInPrepareHeader 准备; 还要调用 GlobalAlloc 给 TWaveHdr 和其中的 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: midiInPrepareHeader(... 阅读全文
posted @ 2008-02-21 19:54 万一 阅读(1627) 评论(1) 推荐(0) 编辑
转贴一组 Delphi 官方网站介绍 IDE 功能的动画
摘要:转贴自: http://dn.codegear.com/cn/article/34323 阅读全文
posted @ 2008-02-20 22:42 万一 阅读(5574) 评论(0) 推荐(0) 编辑
WinAPI: waveOutWrite - 向输出设备发送一个数据块
摘要:提示: 把数据缓冲区传给 waveOutWrite 之前, 必须使用 waveOutPrepareHeader 准备该缓冲区; 若未调用 waveOutPause 函数暂停设备, 则第一次把数据块发送给设备时即开始播放. //声明: waveOutWrite( hWaveOut: HWAVEOUT; {设备句柄} lpWaveOutHdr: PWaveHdr; {TWaveH... 阅读全文
posted @ 2008-02-20 22:20 万一 阅读(5514) 评论(3) 推荐(0) 编辑
WinAPI: waveOutUnprepareHeader - 清除由 waveOutPrepareHeader 完成的准备
摘要:提示: 设备使用完数据块后, 须调用此函数; 释放(GlobalFree)缓冲区前, 须调用此函数; 取消一个尚未准备的缓冲区将无效, 但函数返回 0 //声明: waveOutUnprepareHeader( hWaveOut: HWAVEOUT; {设备句柄} lpWaveOutHdr: PWaveHdr; {TWaveHdr 结构的指针} uSize: UINT ... 阅读全文
posted @ 2008-02-20 22:07 万一 阅读(6550) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetPlaybackRate - 设置输出设备的播放速度(默认速度值的倍数)
摘要:提示: 参数 dwRate 虽然是 4 字节的正整数, 但表示的是个小数; 两个高位表示整数部分, 两个低位表示小数部分; $8000 表示一半, $4000 表示四分之一; 譬如: $00010000 表示 1.0, 说明速度没有改变变; $000F8000, 表示 15.5 倍; 修改播放速度不会改变采样速度, 但肯定会改变播放时间. //声明: waveOutSetPlaybackRa... 阅读全文
posted @ 2008-02-20 21:53 万一 阅读(2163) 评论(0) 推荐(0) 编辑
WinAPI: waveOutSetPitch - 设置输出设备的音调设置(音高的倍数值)
摘要:提示: 参数 dwPitch 虽然是 4 字节的正整数, 但表示的是个小数; 两个高位表示整数部分, 两个低位表示小数部分; $8000 表示一半, $4000 表示四分之一; 譬如: $00010000 表示 1.0, 说明音高没变; $000F8000, 表示 15.5 倍; 修改音高不会改变播放速度、采样速度和播放时间, 但不是所有设备都支持. //声明: waveOutSetPitc... 阅读全文
posted @ 2008-02-20 21:50 万一 阅读(1980) 评论(0) 推荐(0) 编辑
WinAPI: waveOutRestart - 重新启动一个被暂停的输出设备
摘要:提示: 当输出设备未暂停时调用该函数无效, 但也返回 0 //声明: waveOutRestart( hWaveOut: HWAVEOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = 12; {设备已被另一线程使用} ... 阅读全文
posted @ 2008-02-20 21:46 万一 阅读(2060) 评论(0) 推荐(0) 编辑
WinAPI: waveOutReset - 重置输出
摘要:提示: 函数会终止输入, 位置清0; 放弃未处理的缓冲区并返回给程序. //声明: waveOutReset( hWaveOut: HWAVEOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = 12; {设备已被另一线程... 阅读全文
posted @ 2008-02-20 21:40 万一 阅读(2104) 评论(0) 推荐(0) 编辑
WinAPI: waveOutPrepareHeader - 准备一个波形数据块用于播放
摘要:提示: 必须调用 GlobalAlloc 给 TWaveHdr 和其中的 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: waveOutPrepareHeader( hWaveOut: HWAVEOUT; {设备句柄} lpWaveOutHdr: PWaveHdr; {TWaveH... 阅读全文
posted @ 2008-02-20 21:35 万一 阅读(6827) 评论(0) 推荐(0) 编辑
WinAPI: waveOutPause - 暂停播放
摘要:提示: 暂停后会保存当前位置, 可以用 waveOutRestart 从当前位置恢复播放. //声明: waveOutPause( hWaveOut: HWAVEOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = 12... 阅读全文
posted @ 2008-02-20 21:29 万一 阅读(2270) 评论(0) 推荐(0) 编辑
WinAPI: waveOutOpen - 打开波形输出设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了PostMessagetimeGetSystemTimetimeGetTimetimeSetEventtimeKillEventmidiOutShortMsgmidiOutLongMsgOutputDebugString 外, 也不能有其他系统调用.//声明:waveOutOpen(... 阅读全文
posted @ 2008-02-20 21:24 万一 阅读(7460) 评论(8) 推荐(0) 编辑
WinAPI: waveOutMessage - 向波形输出设备发送一条消息
摘要://声明: waveOutMessage( hWaveOut: HWAVEOUT; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): Longint; {将由设备给返回值} //举例: 阅读全文
posted @ 2008-02-20 21:09 万一 阅读(3060) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetVolume - 获取输出设备当前的音量设置
摘要:提示: 参数 lpdwVolume 的两低位字节存放左声道音量, 两高位字节存放右声道音量; $FFFF、$0000 分别表示最大与最小音量; 如不支持立体声, 两低位字节存放单声道音量. //声明: waveOutGetVolume( hwo: HWAVEOUT; {设备句柄} lpdwVolume: PDWORD {存放音量值的变量的指针} ): MMRESULT; ... 阅读全文
posted @ 2008-02-20 21:03 万一 阅读(4728) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetPosition - 获取输出设备当前的播放位置
摘要://声明: waveOutGetPosition( hWaveOut: HWAVEOUT; {设备句柄} lpInfo: PMMTime; {TMMTime 结构的指针, 用于返回播放位置} uSize: UINT {TMMTime 结构的大小, 以字节为单位} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSER... 阅读全文
posted @ 2008-02-20 20:50 万一 阅读(2722) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetPlaybackRate - 获取输出设备当前的播放速度设置(默认速度值的倍数)
摘要:提示: 参数 lpdwRate 虽然指向的是 4 字节的正整数, 但表示的是个小数; 两个高位表示整数部分, 两个低位表示小数部分; $8000 表示一半, $4000 表示四分之一; 譬如: $00010000 表示 1.0, 说明速度没有改变变; $000F8000, 表示 15.5 倍; 修改播放速度不会改变采样速度, 但肯定会改变播放时间. //声明: waveOutGetPlayb... 阅读全文
posted @ 2008-02-20 20:41 万一 阅读(1611) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetPitch - 获取输出设备当前的音调设置(音高的倍数值)
摘要:提示: 参数 lpdwPitch 虽然指向的是 4 字节的正整数, 但表示的是个小数; 两个高位表示整数部分, 两个低位表示小数部分; $8000 表示一半, $4000 表示四分之一; 譬如: $00010000 表示 1.0, 说明音高没变; $000F8000, 表示 15.5 倍; 修改音高不会改变播放速度、采样速度和播放时间, 但不是所有设备都支持. //声明: waveOutGe... 阅读全文
posted @ 2008-02-20 19:41 万一 阅读(2117) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetNumDevs - 获取波形输出设备的数目
摘要://声明: waveOutGetNumDevs: UINT; {无参数; 返回波形输出设备的数目} //举例: 阅读全文
posted @ 2008-02-20 19:22 万一 阅读(2294) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetID - 获取输出设备 ID
摘要://声明: waveOutGetID( hWaveOut: HWAVEOUT; {设备句柄} lpuDeviceID: PUINT {接受 ID 的变量的指针} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = 12; {设备已被另一... 阅读全文
posted @ 2008-02-20 19:20 万一 阅读(2102) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: waveOutGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 ... 阅读全文
posted @ 2008-02-20 19:15 万一 阅读(929) 评论(0) 推荐(0) 编辑
WinAPI: waveOutGetDevCaps - 查询输出设备的性能
摘要://声明: waveOutGetDevCaps( uDeviceID: UINT; {输出设备ID} lpCaps: PWaveOutCaps; {TWaveOutCaps 结构的指针, 用于接受设备信息} uSize: UINT): MMRESULT; {TWaveOutCaps 结构大小} ): MMRESULT; {成功返回 0; 可... 阅读全文
posted @ 2008-02-20 19:07 万一 阅读(3726) 评论(0) 推荐(0) 编辑
WinAPI: waveOutClose - 关闭设备
摘要:提示: 若正在播放, 应先调用 waveOutReset 终止播放, 然后再关闭, 不然会失败. //声明: waveOutClose( hWaveOut: HWAVEOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = ... 阅读全文
posted @ 2008-02-20 18:41 万一 阅读(3053) 评论(7) 推荐(0) 编辑
WinAPI: waveOutBreakLoop - 跳出循环
摘要:提示: 循环是由 saveOutWrite 传递的 TWaveHdr 结构的 dwLoop 和 dwFlags 控制的; dwFlags 的 WHDR_BEGINLOOP、WHDR_ENDLOOP 标识循环的开始和结束数据块; 在同一数据块上循环, 应同时指定这两个标志; 循环次数 dwLoops 应该在开始块上指定; 循环终止前, 组成循环体的块一定要播放完; 当无播放内容或循环设定失败时,... 阅读全文
posted @ 2008-02-20 18:35 万一 阅读(2513) 评论(0) 推荐(0) 编辑
WinAPI: waveInUnprepareHeader - 清除由 waveInPrepareHeader 完成的准备
摘要:提示: 设备写满缓冲区返回给程序后, 须调用此函数; 释放(GlobalFree)缓冲区前, 须调用此函数; 取消一个尚未准备的缓冲区将无效, 但函数返回 0 //声明: waveInUnprepareHeader( hWaveIn: HWAVEIN; {设备句柄} lpWaveInHdr: PWaveHdr; {TWaveHdr 结构的指针} uSize: UINT ... 阅读全文
posted @ 2008-02-20 17:42 万一 阅读(5700) 评论(0) 推荐(0) 编辑
WinAPI: waveInStop - 停止输入
摘要:提示: 如果未启动则调用无效, 但也返回 0; 缓冲区会被返回, TWaveHdr 结构中的 dwBytesRecorded 将包含返回的实际数据的长度. //声明: waveInStop( hWaveIn: HWAVEIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效}... 阅读全文
posted @ 2008-02-20 17:27 万一 阅读(2618) 评论(0) 推荐(0) 编辑
WinAPI: waveInStart - 启动输入
摘要://声明: waveInStart( hWaveIn: HWAVEIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = 12; {设备已被另一线程使用} //举例: 阅读全文
posted @ 2008-02-20 17:22 万一 阅读(3154) 评论(0) 推荐(0) 编辑
WinAPI: waveInReset - 重置输入
摘要:提示: 函数会终止输入, 位置清0; 放弃未处理的缓冲区并返回给程序; TWaveHdr 结构中的 dwBytesRecorded 将包含实际数据的长度. //声明: waveInReset( hWaveIn: HWAVEIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效}... 阅读全文
posted @ 2008-02-20 16:49 万一 阅读(2914) 评论(0) 推荐(0) 编辑
WinAPI: waveInPrepareHeader - 为波形输入准备一个缓冲区
摘要:提示: 必须调用 GlobalAlloc 给 TWaveHdr 和其中的 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: waveInPrepareHeader( hWaveIn: HWAVEIN; {设备句柄} lpWaveInHdr: PWaveHdr; {TWaveHdr ... 阅读全文
posted @ 2008-02-20 16:38 万一 阅读(4038) 评论(0) 推荐(0) 编辑
WinAPI: waveInOpen - 打开波形输入设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了 PostMessage timeGetSystemTime timeGetTime timeSetEvent timeKillEvent midiOutShortMsg midiOutLongMsg OutputDebugString 外, 也不能有其他系统调用. //声明: ... 阅读全文
posted @ 2008-02-20 16:04 万一 阅读(13661) 评论(3) 推荐(0) 编辑
WinAPI: waveInMessage - 向波形输入设备发送一条消息
摘要://声明: waveInMessage( hWaveIn: HWAVEIN; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): MMRESULT; {将由设备给返回值} //举例: 阅读全文
posted @ 2008-02-20 13:39 万一 阅读(2130) 评论(0) 推荐(0) 编辑
WinAPI: waveInGetPosition - 获取当前输入设备的输入位置
摘要://声明: waveInGetPosition( hWaveIn: HWAVEIN; {设备句柄} lpInfo: PMMTime; {TMMTime 结构的指针} uSize: UINT {TMMTime 结构大小} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效}... 阅读全文
posted @ 2008-02-20 13:26 万一 阅读(2713) 评论(0) 推荐(0) 编辑
WinAPI: waveInGetNumDevs - 获取波形输入设备的数目
摘要://声明: waveInGetNumDevs: UINT; {无参数; 返回波形输入设备的数目} //举例: 阅读全文
posted @ 2008-02-20 12:44 万一 阅读(2605) 评论(0) 推荐(0) 编辑
WinAPI: waveInGetID - 获取输入设备 ID
摘要://声明: waveInGetID( hWaveIn: HWAVEIN; {获取输入设备句柄} lpuDeviceID: PUINT {接受 ID 的变量的指针} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = 12; {设备已被另一... 阅读全文
posted @ 2008-02-20 12:12 万一 阅读(2188) 评论(0) 推荐(0) 编辑
动画演示 Delphi 2007 IDE 功能[3] - 修改属性
摘要:动画剧本: 添加控件后用 F11 激活 Object Inspector 窗口; 可用 ↑ ↓ 选择属性; 用 Tab 切换属性名和属性值; 用 Tab 切换到属性名后, 键入属性名的部分字母, 可迅速定位; 用 Tab 切换到属性值后, 也可以键入字母选择, 而后回车确认. Ctrl+↓ 可以选择其他控件; 整个过程可以做到无鼠标操作. 阅读全文
posted @ 2008-02-20 10:38 万一 阅读(4591) 评论(1) 推荐(0) 编辑
WinAPI: waveInGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: waveInGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 0;... 阅读全文
posted @ 2008-02-20 00:16 万一 阅读(1205) 评论(0) 推荐(0) 编辑
WinAPI: waveInGetDevCaps - 查询输入设备的性能
摘要://声明: waveInGetDevCaps( hwo: HWAVEOUT; {输入设备ID; HWAVEIN ?} lpCaps: PWaveInCaps; {TWaveInCaps 结构的指针, 用于接受设备信息} uSize: UINT {TWaveInCaps 结构大小} ): MMRESULT; {成功返回 0; 可能的错误... 阅读全文
posted @ 2008-02-20 00:03 万一 阅读(5119) 评论(0) 推荐(0) 编辑
WinAPI: waveInClose - 关闭指定的波形输入设备
摘要:提示: 若 waveInAddBuffer 送出的缓冲区未返回则失败; 可用 waveInReset 放弃所有未用完的缓冲区. //声明: waveInClose( hWaveIn: HWAVEIN {设备句柄; 函数若成功返回, 句柄则不再有效} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句... 阅读全文
posted @ 2008-02-19 23:21 万一 阅读(2317) 评论(0) 推荐(0) 编辑
WinAPI: waveInAddBuffer - 向波形输入设备发送一个输入缓冲区
摘要:提示: 缓冲区写满后送回应用程序. 在缓冲区给 waveInAddBuffer 前, 先要调用 waveInPrepareHeader 准备; 还要调用 GlobalAlloc 给 TWaveHdr 和其中 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: waveInAddBuffer( hW... 阅读全文
posted @ 2008-02-19 23:01 万一 阅读(5760) 评论(1) 推荐(0) 编辑
动画演示 Delphi 2007 IDE 功能[2] - 定义变量
摘要:动画剧本: 第一个变量: 输入: var; 然后执行 Ctrl+J ... 回车 第二个变量: 执行 Ctrl+J; 然后输入 v 后打空格键 ... 再 Tab ... 回车 第三个变量: 先书写语句; 然后选定变量, 执行 Ctrl+Shift+V ... 第四个变量: 同上. 阅读全文
posted @ 2008-02-19 19:18 万一 阅读(5470) 评论(4) 推荐(0) 编辑
颜色转换函数: 从 Delphi 到 Html
摘要:{由 Delphi 的颜色常数转换到 Html 颜色} function HexColorToHtmlColor(c: Integer): string; var R,G,B: Byte; begin R := c and $FF; G := (c shr 8) and $FF; B := (c shr 16) and $FF; Result := #35 + Format(... 阅读全文
posted @ 2008-02-19 15:08 万一 阅读(4764) 评论(2) 推荐(0) 编辑
Delphi 中的颜色常量及效果图
摘要:颜色名称 颜色效果 Hex HTML clBlack$000000#000000 clMaroon$000080#800000 clGreen$008000#008000 clOlive$008080#808000 clNavy$800000#000080 clPurple$800080#800080 clTeal$808000#008080 clGray$808080#808... 阅读全文
posted @ 2008-02-19 14:45 万一 阅读(29493) 评论(8) 推荐(4) 编辑
动画演示 Delphi 2007 IDE 功能[1] - 建立工程、添加控件
摘要:动画中的快捷键顺序: Ctrl+Alt+P 输入: V; 回车 Ctrl+Alt+P 输入: BU; 回车 输入: BU; 回车 输入: MEM; 回车 阅读全文
posted @ 2008-02-19 10:36 万一 阅读(9303) 评论(17) 推荐(0) 编辑
Delphi 的绘图功能[15] - 再谈文字的高度与宽度: Canvas.TextExtent
摘要:procedure TForm1.Button1Click(Sender: TObject); var str: string; wh: TSize; w,h: Integer; begin {前面用过 Canvas.TextWidth、Canvas.TextHeight} str := '万'; w := Canvas.TextWidth(str); h := Ca... 阅读全文
posted @ 2008-02-18 22:32 万一 阅读(10785) 评论(0) 推荐(0) 编辑
Delphi 的绘图功能[14] - 图像类
摘要:Delphi 的 Graphic 单元有五个重要的图像类: TGraphic、TBitmap、TMetafile、TIcon、TPicture. TBitmap 用来操作位图; TMetafile 用来操作图元文件; TIcon 用来操作图标(包括鼠标指针)文件; TBitmap、TMetafile、TIcon 都是 TGraphic 的子类, 由于 TCanvas.Draw(X, Y: ... 阅读全文
posted @ 2008-02-18 21:03 万一 阅读(6358) 评论(0) 推荐(0) 编辑
Delphi 的绘图功能[13] - TBrush 类
摘要://画刷类 TBrush 有三个重要属性: Color、Style、Bitmap. {Style: 样式; Delphi 为画刷定义了样式枚举 TBrushStyle, 包含以下样式:} bsSolid bsClear bsHorizontal bsVertical bsFDiagonal bsBDiagonal bsCross bsDiagCross //下面小程序展示了上面的其中填充样... 阅读全文
posted @ 2008-02-18 18:52 万一 阅读(6375) 评论(1) 推荐(0) 编辑
Delphi 的绘图功能[12] - TPen 类(下) : 学习橡皮线
摘要://奇妙的异或运算, 就这些简单的代码, 反复点击按钮... procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Color := clYellow; {指定笔颜色为黄色} Canvas.Pen.Width := 20; {笔宽 20} Canvas.Pen.Mode := pmXor; ... 阅读全文
posted @ 2008-02-18 15:18 万一 阅读(6237) 评论(2) 推荐(0) 编辑
Delphi 的绘图功能[11] - TPen 类(上)
摘要://TPen 的主要属性有四: Color、Width、Style、Mode {Color: 颜色} {Width: 宽度; 默认是 1; 如果赋予 //下面的例子依次展示了各种样式: var i,x,y,n: Integer; begin x := 10; y := 15; n := ClientWidth - 2*x; Canvas.Pen.Color := cl... 阅读全文
posted @ 2008-02-17 22:59 万一 阅读(9821) 评论(3) 推荐(0) 编辑
Delphi 的绘图功能[10] - TFONT 类
摘要://先来个例子: procedure TForm1.FormPaint(Sender: TObject); const S = '万一的 Delphi 博客'; var font: TFont; begin font := TFont.Create; font.Name := '微软雅黑'; font.Style := [fsBold, fsItalic]; font.C... 阅读全文
posted @ 2008-02-17 18:43 万一 阅读(7656) 评论(3) 推荐(0) 编辑
Delphi 的绘图功能[9] - TextRect
摘要://第一种重载的声明: TextRect( Rect: TRect; {矩形} X, Y: Integer; {相对于窗体的位置} const Text: string {文本} ); {如果要输出的文本超出指定的矩形将不被显示} //第一种重载的举例: procedure TForm1.Button1Click(Sender: TObject); cons... 阅读全文
posted @ 2008-02-17 16:23 万一 阅读(13677) 评论(10) 推荐(2) 编辑
Delphi 的绘图功能[8] - TextOut、TextWidth、TextHeight
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button... 阅读全文
posted @ 2008-02-17 15:49 万一 阅读(8391) 评论(13) 推荐(1) 编辑
Delphi 的绘图功能[7] - PolyBezier、PolyBezierTo
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-02-17 10:44 万一 阅读(5526) 评论(0) 推荐(0) 编辑
Delphi 的绘图功能[6] - Polygon、Polyline
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-02-17 10:41 万一 阅读(9223) 评论(0) 推荐(1) 编辑
Delphi 的绘图功能[5] - 获取 Canvas 对象
摘要:在窗体上添加 Panel1、PaintBox1 和 Button1, 代码如下: procedure TForm1.Button1Click(Sender: TObject); var cvs: TCanvas; begin {PaintBox1 就像窗体一样, 也有 Canvas 属性} PaintBox1.Canvas.Brush.Color := clRed; Pain... 阅读全文
posted @ 2008-02-16 23:25 万一 阅读(12190) 评论(3) 推荐(1) 编辑
Delphi 的绘图功能[4] - 圆弧类图形
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-02-16 22:53 万一 阅读(7885) 评论(0) 推荐(0) 编辑
Delphi 的绘图功能[3] - 矩形类图形
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-02-16 22:21 万一 阅读(11396) 评论(8) 推荐(1) 编辑
Delphi 的绘图功能[2] - 入门
摘要:绘图需要有纸、画笔、画刷; Delphi 有 Canvas、Pen、Brush. Canvas 就是画布, 譬如窗体的 Canvas 属性, 就是窗体的画布; Pen 是画笔, 可以设置笔色、笔宽等等; Brush 是画刷, 可以设置颜色等等. //举例: {绘制直线} procedure TForm1.Button1Click(Sender: TObject); begin Canv... 阅读全文
posted @ 2008-02-16 21:26 万一 阅读(8971) 评论(23) 推荐(0) 编辑
Delphi 的绘图功能[1] - TCanvas 的类成员
摘要://过程: Arc BrushCopy Chord CopyRect Draw DrawFocusRect Ellipse Ellipse FillRect FloodFill FrameRect LineTo Lock MoveTo Pie Polygon Polyline PolyBezier PolyBezierTo Rectangle Rectangle Refresh RoundRec... 阅读全文
posted @ 2008-02-16 19:12 万一 阅读(7800) 评论(10) 推荐(0) 编辑
Graphics 单元中的类
摘要://Graphics 单元中的类 TGraphicsObject TFont TPen TBrush TFontRecall TPenRecall TBrushRecall TCanvas TGraphic TPicture TMetafileCanvas TMetafileImage TMetafile TBitmapImage TBitmap TIconImage TIcon TResour... 阅读全文
posted @ 2008-02-16 18:50 万一 阅读(4401) 评论(10) 推荐(0) 编辑
WinAPI: SetTimer、KillTimer - 创建与移除高性能定时器
摘要://创建定时器函数的声明: SetTimer( hWnd: HWND; {与定时器相关联的窗口句柄} nIDEvent: UINT; {指定一个非 0 的定时器标识符} uElapse: UINT; {指定间隔时间, 单位是毫秒} lpTimerFunc: TFNTimerProc {每到时间后, 要调用的函数... 阅读全文
posted @ 2008-02-16 14:51 万一 阅读(7727) 评论(8) 推荐(1) 编辑
WinAPI: QueryPerformanceCounter - 获取高性能定时器的当前值
摘要://声明: QueryPerformanceCounter( var lpPerformanceCount: TLargeInteger {获取定时器每秒的频率数; TLargeInteger = Int64} ): BOOL; {返回 False 表示调用失败, 或者是硬件不支持高性能定时器} //一个有趣的示例: 判断你的鼠标点击速度; 我的最快记录是 151 毫米 var n1... 阅读全文
posted @ 2008-02-16 14:24 万一 阅读(3305) 评论(0) 推荐(0) 编辑
WinAPI: QueryPerformanceFrequency - 获取高性能定时器的每秒频率数
摘要://声明: QueryPerformanceFrequency( var lpFrequency: TLargeInteger {此参数获取定时器每秒的频率数; TLargeInteger = Int64} ): BOOL; {返回 False 表示硬件不支持高性能定时器} //举例: var i: Int64; begin if ... 阅读全文
posted @ 2008-02-16 13:56 万一 阅读(6086) 评论(7) 推荐(0) 编辑
一种获取无符号整数最大值的方法:
摘要://一种获取无符号整数最大值的方法: procedure TForm1.Button1Click(Sender: TObject); var {Delphi 标准的无符号整数类型只有三种} num_Byte : Byte; num_Word : Word; num_Cardinal : Cardinal; {Windows API 中相应的类型就太多了, 下... 阅读全文
posted @ 2008-02-16 11:36 万一 阅读(5955) 评论(0) 推荐(0) 编辑
Application.ProcessMessages
摘要://如果有这样一个循环, 是非常可怕的; 因为它完不了, 你得等着. procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to MaxInt do begin Text := IntToStr(i); end; end; //即使这样也无济于事, 因为在循环期... 阅读全文
posted @ 2008-02-16 10:55 万一 阅读(12840) 评论(11) 推荐(0) 编辑
WinAPI: LoadString - 从资源中载入字符串
摘要://声明: LoadString( hInstance: HINST; {EXE 或 DLL 的句柄} uID: UINT; {资源 ID} lpBuffer: PChar; {缓冲区} nBufferMax: Integer {缓冲区大小} ): Integer; {返回字串实际长度} //假如有这样一个字符串资源: Str... 阅读全文
posted @ 2008-02-15 23:37 万一 阅读(9329) 评论(2) 推荐(0) 编辑
WinAPI: LoadMenu - 从资源中载入菜单
摘要://声明: LoadMenu( hInstance: HINST; {EXE 或 DLL 的句柄} lpMenuName: PChar {资源标识符} ): HMENU; {返回菜单句柄} 这里有示例 阅读全文
posted @ 2008-02-15 23:10 万一 阅读(3942) 评论(4) 推荐(0) 编辑
WinAPI: LoadLibrary、FreeLibrary - 载入与载卸模块
摘要://声明: LoadLibrary( {将可执行模块映射到调用进程的地址空间} lpLibFileName: PChar {DLL 或 EXE 文件名; 如没指定路径会按以下顺序查找: 程序目录/当前目录/System32/Windows/PATH环境变量} ): HMODULE; {返回模块句柄} FreeLibrary( hLibModul... 阅读全文
posted @ 2008-02-15 23:04 万一 阅读(5416) 评论(0) 推荐(0) 编辑
WinAPI: LoadIcon - 从资源中载入图标
摘要://声明: LoadIcon( hInstance: HINST; {EXE 或 DLL 的句柄, 0 表示载入系统资源} lpIconName: PChar {资源标识符} ): HICON; {返回图标句柄} 这里有示例 //调用系统图标的例子: unit Unit1; interface uses Windows, Messages, SysU... 阅读全文
posted @ 2008-02-15 22:22 万一 阅读(7131) 评论(4) 推荐(0) 编辑
WinAPI: LoadCursor - 从资源中载入光标
摘要://声明: LoadCursor( hInstance: HINST; {EXE 或 DLL 的句柄, 0 表示载入系统资源} lpCursorName: PChar {资源标识符} ): HCURSOR; {返回光标句柄} 这里有示例 //调用系统光标的例子: unit Unit1; interface uses Windows, Messag... 阅读全文
posted @ 2008-02-15 21:23 万一 阅读(4959) 评论(0) 推荐(0) 编辑
WinAPI: LoadBitmap - 从资源中载入位图
摘要://声明: LoadBitmap( hInstance: HINST; {EXE 或 DLL 的句柄} lpBitmapName: PChar {资源标识符} ): HBITMAP; {返回位图句柄} 这里有示例 阅读全文
posted @ 2008-02-15 21:12 万一 阅读(4432) 评论(3) 推荐(0) 编辑
WinAPI: ExtractIcon - 获取 EXE、DLL 或 ICO 文件中的图标
摘要://声明: ExtractIcon( hInst: HINST; {调用函数的程序实例} lpszExeFileName: PChar; {文件路径; 文件可以是 *.exe、*.dll、*.ico} nIconIndex: UINT {图标索引} ): HICON; {返回图标句柄; 索引为 0 时返回第一个图标句柄; 索引为 #FFFFFFFF ... 阅读全文
posted @ 2008-02-15 19:26 万一 阅读(11941) 评论(10) 推荐(0) 编辑
学习使用资源文件[11] - DLL 中的资源文件
摘要:本例将把一张 bmp 图片, 以资源文件的方式嵌入 dll, 然后再调用. 第一步: 建一个 DLL 工程, 如图: 然后保存, 我这里使用的名称都是默认的. 第二步: 建一个资源原文件, 如图: 编辑内容如下(路径中的文件一定要存在): img1 BITMAP "c:\temp\test.bmp" 然后, 取个名(后缀须是 rc, 我这里取名为 Res.rc), 保存在工程目录... 阅读全文
posted @ 2008-02-15 16:11 万一 阅读(15276) 评论(30) 推荐(0) 编辑
学习使用资源文件[10] - 嵌入和提取任何类型的文件
摘要://下面是 Windows 支持的资源格式: RT_CURSOR = MakeIntResource(1); RT_BITMAP = MakeIntResource(2); RT_ICON = MakeIntResource(3); RT_MENU = MakeIntResource(4); RT_DIALOG = MakeIn... 阅读全文
posted @ 2008-02-15 15:26 万一 阅读(5790) 评论(2) 推荐(0) 编辑
学习使用资源文件[9] - WAVE 资源
摘要://rc 文件: sound1 WAVE "SoundFile1.wav" sound2 WAVE "SoundFile2.wav" //代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrl... 阅读全文
posted @ 2008-02-15 12:00 万一 阅读(6323) 评论(18) 推荐(0) 编辑
学习使用资源文件[8] - 关于 HInstance
摘要://几乎每一个提取资源的例子都用到了 HInstance, 做个对比测试: var h,a,f: Cardinal; begin h := HInstance; a := Application.Handle; f := Self.Handle; ShowMessage(IntToStr(h)); {4194304} ShowMessage(IntToStr(a)); ... 阅读全文
posted @ 2008-02-14 22:01 万一 阅读(3526) 评论(1) 推荐(1) 编辑
学习使用资源文件[7] - 字符串资源
摘要://rc 文件: StringTable begin 0 "AAAA" 1 "BBBB" 2 "CCCC" 3 "DDDD" end //也可以这样写: StringTable begin 0,"AAAA" 1,"BBBB" 2,"CCCC" 3,"DDDD" end //还可以这样写: StringTable { 0,"AAAA" 1,"BBBB" 2,"CCCC" 3,&q 阅读全文
posted @ 2008-02-14 21:30 万一 阅读(4809) 评论(2) 推荐(0) 编辑
学习使用资源文件[6] - 菜单资源
摘要://rc 文件: MyMenu1 MENU begin Popup "File" begin MenuItem "&Open" MenuItem "&Save" MenuItem Separator MenuItem "E&xit" end end {严格的头可能是这样写: MyMenu1 MENU PRELOAD DISCARDABLE} //程序代码: unit Unit1; i... 阅读全文
posted @ 2008-02-14 20:42 万一 阅读(3978) 评论(2) 推荐(0) 编辑
学习使用资源文件[5] - 鼠标指针资源
摘要://rc 文件: cur1 CURSOR cur\kyodai.cur cur2 CURSOR cur\static.cur //或者 cur1,CURSOR,cur\kyodai.cur cur2,CURSOR,cur\static.cur //程序代码: unit Unit1; interface uses Windows, Messages, SysUtils, Varian... 阅读全文
posted @ 2008-02-14 19:09 万一 阅读(3981) 评论(4) 推荐(0) 编辑
学习使用资源文件[4] - 用资源中的图片做背景、使用 LoadFromResourceID
摘要:首先编辑 rc 文件如下(假定图片文件放在程序目录下的 img 文件夹下): 1 BITMAP img\bmpFile1.bmp 2 BITMAP img\bmpFile2.bmp 或者: 1,BITMAP,img\bmpFile1.bmp 2,BITMAP,img\bmpFile2.bmp 这次我们是给每个资源做了编号, 没有取标识名称; 然后在窗体上添加两个 Button, 代码如下: u... 阅读全文
posted @ 2008-02-14 16:29 万一 阅读(4597) 评论(0) 推荐(0) 编辑
学习使用资源文件[3] - 用 Image 显示资源中的图片
摘要:首先编辑 rc 文件如下(假定图片文件放在程序目录下的 img 文件夹下): bmp1 BITMAP img\bmpFile1.bmp bmp2 BITMAP img\bmpFile2.bmp 或者: bmp1,BITMAP,img\bmpFile1.bmp bmp2,BITMAP,img\bmpFile2.bmp 然后在窗体上添加一个 Image、两个 Button, 代码如下: unit ... 阅读全文
posted @ 2008-02-14 12:53 万一 阅读(6063) 评论(9) 推荐(0) 编辑
学习使用资源文件[2] - Ico
摘要:现在要做一个携带两个图标的资源文件, 并调用的例子. 1、首先建新工程, 保存, 注意这次我们不删除 {$R *.res} 2、复制两个 ico 文件到工程目录, 譬如文件是: IcoFile_1.ico、IcoFile_2.ico 3、建立文本文件输入: ico1 ICON IcoFile_1.ico ico2 ICON IcoFile_2.ico 然后保存为: MyRes.rc, 并 Add... 阅读全文
posted @ 2008-02-14 11:01 万一 阅读(5476) 评论(0) 推荐(0) 编辑
学习使用资源文件[1] - 入门
摘要:资源文件(*.res)通过编译指令 $R 关联, 譬如工程文件 Project1 中的 {$R *.res} 就是关联 Project1.res 资源文件, 我们直接写作 {$R Project1.res} 不会有问题(但如果工程文件改名时, 你也得随着改才行). 譬如: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1... 阅读全文
posted @ 2008-02-14 09:07 万一 阅读(7590) 评论(3) 推荐(0) 编辑
WinAPI: ShellExecute - 打开外部程序或文件
摘要:ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定动作, 譬如: open、print} FileName: PChar; {指定要打开的文件或程序} Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil} Directory: PChar; ... 阅读全文
posted @ 2008-02-13 21:59 万一 阅读(46917) 评论(19) 推荐(3) 编辑
WinAPI: WinExec - 运行外部程序
摘要://声明 WinExec( lpCmdLine: LPCSTR; {文件名和参数; 如没指定路径会按以下顺序查找: 程序目录/当前目录/System32/Windows/PATH环境变量} uCmdShow: UINT {启动选项} ): UINT; //返回值: 大于 31 {调用成功} 等于 0 ... 阅读全文
posted @ 2008-02-13 14:14 万一 阅读(20724) 评论(12) 推荐(1) 编辑
WinAPI: GetSystemPowerStatus - 获取系统电源状态的信息
摘要://声明 GetSystemPowerStatus( var lpSystemPowerStatus: TSystemPowerStatus {TSystemPowerStatus 结构} ): BOOL; //TSystemPowerStatus 是 _SYSTEM_POWER_STATUS 结构的重定义: _SYSTEM_POWER_STATUS = packed record A... 阅读全文
posted @ 2008-02-13 13:37 万一 阅读(5320) 评论(2) 推荐(1) 编辑
WinAPI: GetLocalTime、SetLocalTime、SetSystemTime - 获取与设置系统时间
摘要://声明 GetLocalTime( var lpSystemTime: TSystemTime {TSystemTime 结构} ); {无返回值} //设置本地时间 SetLocalTime( const lpSystemTime: TSystemTime {TSystemTime 结构} ): BOOL; //SetSy... 阅读全文
posted @ 2008-02-13 11:31 万一 阅读(8257) 评论(0) 推荐(0) 编辑
WinAPI: SwapMouseButton - 交换鼠标左右键的功能
摘要://声明 SwapMouseButton( fSwap: BOOL {True: 交换; False: 恢复} ): BOOL; 阅读全文
posted @ 2008-02-13 08:49 万一 阅读(2103) 评论(0) 推荐(0) 编辑
WinAPI: GetDoubleClickTime、SetDoubleClickTime - 获取与设置鼠标双击间隔时间
摘要://声明 GetDoubleClickTime: UINT; {无参数; 返回鼠标双击间隔时间, 单位是毫秒} SetDoubleClickTime( Interval: UINT {依毫秒为单位的时间数} ): BOOL; //举例: var c: Cardinal; begin c := GetDoubleClickTime; ShowMessage(... 阅读全文
posted @ 2008-02-13 08:38 万一 阅读(3607) 评论(0) 推荐(0) 编辑
WinAPI: SetWindowPos - 改变窗口的位置与状态
摘要://声明: SetWindowPos( hWnd: HWND; {窗口句柄} hWndInsertAfter: HWND; {窗口的 Z 顺序} X, Y: Integer; {位置} cx, cy: Integer; {大小} uFlags: UINT {选项} ): BOOL; //hWndInser... 阅读全文
posted @ 2008-02-12 16:56 万一 阅读(31159) 评论(11) 推荐(2) 编辑
WinAPI: MoveWindow - 改变窗口的位置与大小
摘要://声明: MoveWindow( hWnd: HWND; {窗口句柄} X, Y: Integer; {位置} nWidth, nHeight: Integer; {大小} bRepaint: BOOL {是否重绘} ): BOOL; //举例: procedure TForm1.Button1Clic... 阅读全文
posted @ 2008-02-12 15:47 万一 阅读(15546) 评论(5) 推荐(0) 编辑
WinAPI: IsIconic、IsZoomed - 分别判断窗口是否已最小化、最大化
摘要://声明: IsIconic( hWnd: HWND {窗口句柄} ): BOOL; IsZoomed( hWnd: HWND {窗口句柄} ): BOOL; 阅读全文
posted @ 2008-02-12 13:46 万一 阅读(7278) 评论(1) 推荐(0) 编辑
WinAPI: GetParent - 判断两个窗口是不是父子关系
摘要://声明: IsChild( hWndParent, hWnd: HWND {参数是两个窗口句柄, 父窗口在前} ): BOOL; 阅读全文
posted @ 2008-02-12 13:40 万一 阅读(2654) 评论(0) 推荐(0) 编辑
WinAPI: GetParent - 获取指定窗口的父窗口句柄
摘要://声明: GetParent( hWnd: HWND {窗口句柄} ): HWND; {返回父窗口句柄} //举例: procedure TForm1.Button1Click(Sender: TObject); var h1,h2: HWND; begin h1 := GetParent(Button1.Handle); h2 := Panel1.Handle; ... 阅读全文
posted @ 2008-02-12 13:31 万一 阅读(14939) 评论(0) 推荐(0) 编辑
WinAPI: GetFocus - 获取当前拥有焦点的窗口的句柄
摘要://声明: GetFocus: HWND; {无参数; 返回当前拥有焦点窗口的句柄} //举例: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TFo... 阅读全文
posted @ 2008-02-12 13:17 万一 阅读(12371) 评论(0) 推荐(0) 编辑
WinAPI: GetActiveWindow - 获取当前活动窗口的句柄
摘要://声明: GetActiveWindow: HWND; {无参数; 返回当前活动窗口的句柄} //举例: var h: HWND; begin h := GetActiveWindow; FlashWindow(h, True); end; 阅读全文
posted @ 2008-02-12 12:43 万一 阅读(10793) 评论(0) 推荐(0) 编辑
WinAPI: FlashWindow - 闪烁窗口
摘要://声明: FlashWindow( hWnd: HWND; {窗口句柄} bInvert: BOOL {设为 True 才会闪烁} ): BOOL; //举例: begin FlashWindow(Handle, True); end; 阅读全文
posted @ 2008-02-12 12:39 万一 阅读(5259) 评论(1) 推荐(0) 编辑
WinAPI: SetVolumeLabel - 设置磁盘卷标
摘要://声明: SetVolumeLabel( lpRootPathName: PChar; {根路径} lpVolumeName: PChar {新卷标指针, nil 表示删除卷标} ): BOOL; //举例: begin SetVolumeLabel('c:\', 'NewLabel'); end; 阅读全文
posted @ 2008-02-12 11:41 万一 阅读(4104) 评论(0) 推荐(0) 编辑
WinAPI: SetCurrentDirectory、GetCurrentDirectory - 设置与获取当前目录
摘要://声明: SetCurrentDirectory( lpPathName: PAnsiChar {路径名} ): BOOL; GetCurrentDirectory( nBufferLength: DWORD; {缓冲区大小} lpBuffer: PAnsiChar {缓冲区} ): DWORD; {返回目录实际长度} //举例: var... 阅读全文
posted @ 2008-02-12 10:44 万一 阅读(9046) 评论(0) 推荐(0) 编辑
WinAPI: RemoveDirectory - 删除空目录
摘要://声明: RemoveDirectory( lpPathName: PAnsiChar {目录名} ): BOOL; //举例: var Dir: string; begin Dir := 'c:\temp\Test'; if RemoveDirectory(PChar(Dir)) then ShowMessage(Dir + ' 已被删除') else ... 阅读全文
posted @ 2008-02-12 10:33 万一 阅读(4259) 评论(3) 推荐(0) 编辑
WinAPI: CreateDirectoryEx - 根据模版建立文件夹
摘要://声明: CreateDirectoryEx ( lpTemplateDirectory: PChar; {模版目录名} lpPathName: PChar; {新目录名} lpSecurityAttributes: PSecurityAttributes {TSecurityAttributes 结构的指针... 阅读全文
posted @ 2008-02-12 10:23 万一 阅读(3829) 评论(0) 推荐(0) 编辑
WinAPI: CreateDirectory - 建立文件夹
摘要://声明: CreateDirectory( lpPathName: PChar; {目录名} lpSecurityAttributes: PSecurityAttributes {TSecurityAttributes 结构的指针} ): BOOL; //TSecurityAttributes 是 _SECURITY_ATTRIBUTES... 阅读全文
posted @ 2008-02-12 10:04 万一 阅读(9291) 评论(0) 推荐(0) 编辑
WinAPI: GetCurrentPositionEx - 获取当前的画笔位置
摘要://声明: GetCurrentPositionEx( DC: HDC; {设备场景句柄} Point: PPoint {点指针} ): BOOL; //举例: var pt: TPoint; begin GetCurrentPositionEx(Canvas.Handle, @pt); ShowMessage(Format('%d,%d',[pt.X,pt.Y... 阅读全文
posted @ 2008-02-11 22:16 万一 阅读(2321) 评论(0) 推荐(0) 编辑
WinAPI: GetLogicalDriveStrings - 获取系统中存在的逻辑驱动器字符串
摘要://声明: GetLogicalDriveStrings( nBufferLength: DWORD; {缓冲区大小} lpBuffer: PAnsiChar {缓冲区} ): DWORD; //缓冲区的结果是这样储存的: 譬如 A 驱动器会表示为 A:\ 后面隔一个空字符, 依次向后; //所以每个驱动器会占 4 字节. //举例: procedure TForm1.Form... 阅读全文
posted @ 2008-02-11 20:11 万一 阅读(5076) 评论(1) 推荐(0) 编辑
StrCopy、StrCat、StrPas
摘要:const P1: PChar = 'CodeGear'; P2: PChar = 'Delphi'; var S: array[0..15] of Char; begin StrCopy(S, P1); StrCat(S, ' '); StrCat(S, P2); ShowMessage(StrPas(S)); {CodeGear Delphi} ShowMes... 阅读全文
posted @ 2008-02-11 19:39 万一 阅读(8525) 评论(6) 推荐(1) 编辑
WinAPI: GetLogicalDrives - 判断系统中存在的逻辑驱动器
摘要://声明: GetLogicalDrives: DWORD; {无参数} //返回值: 返回值的二进制右边第一位为 1 表示驱动器 A: 存在; 返回值的二进制右边第二位为 1 表示驱动器 B: 存在...以次类推. //举例: procedure TForm1.FormCreate(Sender: TObject); var Drives: DWord; i: Integer; b... 阅读全文
posted @ 2008-02-11 17:21 万一 阅读(4187) 评论(1) 推荐(0) 编辑
WinAPI: GetVolumeInformation - 读取文件系统信息
摘要://声明: GetVolumeInformation( lpRootPathName: PChar; {磁盘驱动器代码字符串} lpVolumeNameBuffer: PChar; {磁盘驱动器卷标名称} nVolumeNameSize: DWORD; {磁盘驱动器卷标名称长度} lpVolumeSeria... 阅读全文
posted @ 2008-02-11 16:26 万一 阅读(14841) 评论(1) 推荐(0) 编辑
WinAPI: GetDriveType - 获取磁盘类型
摘要://声明: GetDriveType( lpRootPathName: PChar {磁盘根目录} ): UINT; //返回值: DRIVE_UNKNOWN = 0; {未知} DRIVE_NO_ROOT_DIR = 1; {可移动磁盘} DRIVE_REMOVABLE = 2; {软盘} DRIVE_FIXED = 3; {本地硬盘} DRIVE_REMOTE ... 阅读全文
posted @ 2008-02-11 15:33 万一 阅读(10743) 评论(13) 推荐(0) 编辑
WinAPI: GetDiskFreeSpaceEx - 获取磁盘容量信息
摘要://声明: GetDiskFreeSpaceEx( lpDirectoryName: PChar; {磁盘根路径} var lpFreeBytesAvailableToCaller: TLargeInteger; {可用空间} var lpTotalNumberOfBytes: TLargeInteger; {总空间}... 阅读全文
posted @ 2008-02-11 15:14 万一 阅读(5645) 评论(3) 推荐(0) 编辑
WinAPI: GetDiskFreeSpace - 获取磁盘组织与容量信息
摘要://声明: GetDiskFreeSpace( lpRootPathName: PChar; {磁盘根路径} var lpSectorsPerCluster: DWORD; {一个簇内的扇区数} var lpBytesPerSector: DWORD; {一个扇区内的字节数} var lpNumberOfFreeClusters: DWO... 阅读全文
posted @ 2008-02-11 14:55 万一 阅读(5955) 评论(0) 推荐(0) 编辑
WinAPI: GetKeyboardType - 获取键盘的类型信息
摘要://声明: GetKeyboardType( nTypeFlag: Integer {0:键盘类型; 1:键盘子类型; 2:功能键数量} ): Integer; //举例: procedure TForm1.FormCreate(Sender: TObject); var i: Integer; List: TStringList; begin List := TStringL... 阅读全文
posted @ 2008-02-11 10:37 万一 阅读(3127) 评论(0) 推荐(0) 编辑
WinAPI: GetSystemInfo - 获取系统信息
摘要://声明: GetSystemInfo( var lpSystemInfo: TSystemInfo {} ); //TSystemInfo 是 _SYSTEM_INFO 结构的重定义: _SYSTEM_INFO = record case Integer of 0: ( dwOemId: DWORD); {返回计算机标识符, 已废弃} 1: ( ... 阅读全文
posted @ 2008-02-11 10:11 万一 阅读(6291) 评论(1) 推荐(1) 编辑
WinAPI: CopyFile - 复制文件
摘要://声明: CopyFile( lpExistingFileName: PChar; {源文件} lpNewFileName: PChar; {目标文件} bFailIfExists: BOOL {如果目标文件存在, True: 失败; False: 覆盖} ): BOOL; //例1: begin CopyFile('c:\BOOTLOG.TXT',... 阅读全文
posted @ 2008-02-11 08:38 万一 阅读(24156) 评论(19) 推荐(2) 编辑
WinAPI: DrawFrameControl - 绘制控件
摘要://声明: DrawFrameControl( DC: HDC; {设备环境句柄} const Rect: TRect; {矩形} uType, uState: UINT {控件类型与控件状态} ): BOOL; //控件类型 uType 参数可选值: DFC_CAPTION = 1; {标题按钮} DFC_MENU = 2; {菜单} DF... 阅读全文
posted @ 2008-02-10 22:01 万一 阅读(10474) 评论(3) 推荐(1) 编辑
WinAPI: SetPixel 和 SetPixelV - 设置设备环境中指定位置的颜色
摘要://声明: SetPixel( DC: HDC; {设备环境句柄} X, Y: Integer; {坐标} Color: COLORREF {颜色值} ): COLORREF; {返回颜色值} SetPixelV( DC: HDC; {设备环境句柄} X, Y: Integer; {坐标} Color: COLORREF {颜色... 阅读全文
posted @ 2008-02-10 18:44 万一 阅读(4099) 评论(0) 推荐(2) 编辑
WinAPI: GetPixel - 获取设备环境中指定位置的颜色
摘要://声明: GetPixel( DC: HDC; {设备环境句柄} X, Y: Integer {坐标} ): COLORREF; {返回颜色值} 阅读全文
posted @ 2008-02-10 17:27 万一 阅读(3265) 评论(2) 推荐(0) 编辑
WinAPI: DrawCaption - 绘制标题栏
摘要://声明: DrawCaption( p1: HWND; {窗口句柄} p2: HDC; {设备环境句柄} const p3: TRect; {矩形} p4: UINT {选项} ): BOOL; //p4 参数可选值: DC_ACTIVE = 1; {使用活动标题栏颜色} DC_SMALLCAP = 2; {使... 阅读全文
posted @ 2008-02-10 17:10 万一 阅读(4546) 评论(0) 推荐(0) 编辑
WinAPI: CreateBrushIndirect - 根据画刷结构建立画刷
摘要://声明: CreateBrushIndirect( const p1: TLogBrush {画刷结构} ): HBRUSH; {返回画刷句柄} //TLogBrush 是 tagLOGBRUSH 结构的重定义: tagLOGBRUSH = packed record lbStyle: UINT; {画刷风格} lbColor: COLORREF; ... 阅读全文
posted @ 2008-02-10 15:55 万一 阅读(2854) 评论(0) 推荐(0) 编辑
窗体图片背景
摘要:var Bitmap: TBitmap; procedure TForm1.FormCreate(Sender: TObject); begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile('c:\temp\bg.bmp'); Self.Brush.Bitmap := Bitmap; end; procedure TForm1.... 阅读全文
posted @ 2008-02-10 15:48 万一 阅读(4561) 评论(3) 推荐(0) 编辑
WinAPI: CreatePatternBrush - 建立位图画刷
摘要://声明: CreatePatternBrush( Bitmap: HBITMAP {位图句柄} ): HBRUSH; {返回画刷句柄} //举例: procedure TForm1.FormPaint(Sender: TObject); var Bitmap: TBitmap; BrushHandle: HBRUSH; begin Bitmap := TBit... 阅读全文
posted @ 2008-02-10 15:37 万一 阅读(4290) 评论(2) 推荐(0) 编辑
WinAPI: CreateHatchBrush - 建立阴影画刷
摘要://声明: CreateHatchBrush( p1: Integer; {阴影样式} p2: COLORREF {颜色值} ): HBRUSH; {返回画刷句柄} //p1 参数可选值: HS_HORIZONTAL = 0; HS_VERTICAL = 1; HS_FDIAGONAL = 2; HS_BDIAGONAL = 3; HS_CROSS = ... 阅读全文
posted @ 2008-02-10 14:24 万一 阅读(3490) 评论(0) 推荐(0) 编辑
WinAPI: CreateSolidBrush - 建立实心画刷
摘要://声明: CreateSolidBrush( p1: COLORREF {颜色值} ): HBRUSH; {返回画刷句柄} //举例: procedure TForm1.FormPaint(Sender: TObject); var BrushHandle: HBRUSH; begin BrushHandle := CreateSolidBrush(clYellow);... 阅读全文
posted @ 2008-02-10 14:03 万一 阅读(3817) 评论(4) 推荐(0) 编辑
WinAPI: CreatePenIndirect - 根据笔的参数结构建立画笔
摘要://声明: CreatePenIndirect( const LogPen: TLogPen {笔结构} ): HPEN; {返回笔句柄} //TLogPen 是 tagLOGPEN 结构的重定义: tagLOGPEN = packed record lopnStyle: UINT; {笔样式} lopnWidth: TPoint; {笔... 阅读全文
posted @ 2008-02-10 13:12 万一 阅读(2372) 评论(0) 推荐(0) 编辑
WinAPI: CreatePen - 建立画笔
摘要://声明: CreatePen( Style, Width: Integer; {样式与笔宽} Color: COLORREF {颜色} ): HPEN; {返回笔句柄} //Style 参数可选值: PS_SOLID = 0; {实线} PS_DASH = 1; {段线; 要求笔宽 //举例: procedur... 阅读全文
posted @ 2008-02-10 11:26 万一 阅读(9079) 评论(0) 推荐(0) 编辑
WinAPI: InflateRect - 改变矩形大小
摘要://声明: InflateRect( var lprc: TRect; {要修改的矩形} dx, dy: Integer {变化值} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); var R: TRect; const s = '%d,%d,%d,%d'; begin R := Rect(60, ... 阅读全文
posted @ 2008-02-10 09:55 万一 阅读(6294) 评论(0) 推荐(0) 编辑
WinAPI: PolyPolyline - 绘制多组线段
摘要://声明: PolyPolyline( DC: HDC; {设备环境句柄} var Points; {点数组} var nPoints;{数组, 数组元素是每个组的顶点数} p4: Integer {分组数, 也就是 nPoints 的元素数} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); var... 阅读全文
posted @ 2008-02-09 20:55 万一 阅读(3859) 评论(0) 推荐(0) 编辑
WinAPI: PolyPolygon - 绘制一组多边形
摘要://声明: PolyPolygon( DC: HDC; {设备环境句柄} var Points; {点数组} var nPoints;{数组, 数组元素是每个多边形的顶点数} p4: Integer {多边形数, 也就是 nPoints 的元素数} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); v... 阅读全文
posted @ 2008-02-09 20:46 万一 阅读(3042) 评论(0) 推荐(0) 编辑
WinAPI: PolylineTo - 绘制一组连续线段(更新当前位置)
摘要://声明: PolylineTo( DC: HDC; {设备环境句柄} var Points; {点数组} Count: Integer {数组元素个数} ): BOOL; //如果不给 PolylineTo 指定起点, 将默认 0 点位起点 procedure TForm1.FormPaint(Sender: TObject); var ps: array... 阅读全文
posted @ 2008-02-09 20:23 万一 阅读(2274) 评论(0) 推荐(0) 编辑
WinAPI: Polyline - 绘制一组连续线段
摘要://声明: Polyline( DC: HDC; {设备环境句柄} var Points; {点数组} Count: Integer {数组元素个数} ): BOOL; {Polyline 与 Polygon 的参数一模一样, 但 Polygon 能自动闭合} //绘制连续直线 Polyline procedure TForm1.FormPaint(Sende... 阅读全文
posted @ 2008-02-09 20:08 万一 阅读(2175) 评论(0) 推荐(0) 编辑
WinAPI: Polygon - 绘制多边形
摘要://声明: Polygon( DC: HDC; {设备环境句柄} var Points; {点数组} Count: Integer {数组元素个数} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); var ps: array[0..5] of TPoint; begin ps[0].... 阅读全文
posted @ 2008-02-09 20:04 万一 阅读(2537) 评论(0) 推荐(0) 编辑
WinAPI: PolyBezierTo - 绘制贝塞尔线(更新当前位置)
摘要://声明: PolyBezierTo( DC: HDC; {设备环境句柄} const Points; {点数组} Count: DWORD {数组元素个数} ): BOOL; //需要给 PolyBezierTo 指定起始点 procedure TForm1.FormPaint(Sender: TObject); var ps: array[0..2] of T... 阅读全文
posted @ 2008-02-09 19:43 万一 阅读(2482) 评论(5) 推荐(0) 编辑
WinAPI: PolyBezier - 绘制贝塞尔线
摘要://声明: PolyBezier( DC: HDC; {设备环境句柄} const Points; {点数组} Count: DWORD {数组元素个数} ): BOOL; //一条贝塞尔线最少要有 4 个点 procedure TForm1.FormPaint(Sender: TObject); var ps: array[0..3] of TPoint; be... 阅读全文
posted @ 2008-02-09 19:08 万一 阅读(3403) 评论(0) 推荐(0) 编辑
WinAPI: DrawFocusRect - 绘制焦点矩形
摘要://声明: DrawFocusRect( hDC: HDC; {设备环境句柄} const lprc: TRect {矩形结构} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); var MyRect: TRect; begin MyRect := Rect(20,20, 180,100);... 阅读全文
posted @ 2008-02-09 18:42 万一 阅读(5596) 评论(5) 推荐(0) 编辑
WinAPI: Chord - 绘制弦
摘要://声明: Chord( DC: HDC; {设备环境句柄} X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer {四个坐标点} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); const x1 = 10; y1 ... 阅读全文
posted @ 2008-02-09 17:59 万一 阅读(1870) 评论(0) 推荐(0) 编辑
WinAPI: Arc - 绘制弧线
摘要://声明: Arc( DC: HDC; {设备环境句柄} X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer {四个坐标点} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); const x1 = 10; y1 = ... 阅读全文
posted @ 2008-02-09 17:33 万一 阅读(2826) 评论(0) 推荐(0) 编辑
WinAPI: RoundRect - 绘制圆角矩形
摘要://声明: RoundRect( DC: HDC; {设备环境句柄} X1, Y1, X2, Y2, X3, Y3: Integer {点1、点2是构成矩形的坐标; X3是圆角宽度、Y3是圆角高度} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); const x1... 阅读全文
posted @ 2008-02-09 16:59 万一 阅读(4768) 评论(0) 推荐(0) 编辑
WinAPI: Ellipse - 绘制椭圆
摘要://声明: Ellipse( DC: HDC; {设备环境句柄} X1, Y1, X2, Y2: Integer {两个点的坐标} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); const x1 = 20; y1 = 20; x2 = 200; y2 = 100; ... 阅读全文
posted @ 2008-02-09 16:51 万一 阅读(2686) 评论(0) 推荐(0) 编辑
WinAPI: Rectangle - 绘制矩形
摘要://声明: Rectangle( DC: HDC; {设备环境句柄} X1, Y1, X2, Y2: Integer {两个点的坐标} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); const x1 = 20; y1 = 20; x2 = 200; y2 = 100... 阅读全文
posted @ 2008-02-09 16:45 万一 阅读(3675) 评论(0) 推荐(0) 编辑
WinAPI: Pie - 绘制饼图
摘要://声明: Pie( DC: HDC; {设备环境句柄} X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer {四个坐标点} ): BOOL; //举例: procedure TForm1.FormPaint(Sender: TObject); const x1 = 10; y1 = 1... 阅读全文
posted @ 2008-02-09 16:35 万一 阅读(2958) 评论(0) 推荐(0) 编辑
WinAPI: MoveToEx 与 LineTo - 绘制直线
摘要://声明: MoveToEx( DC: HDC; {设备环境句柄} p2, p3: Integer; {坐标} p4: PPoint {用于保存 p2、p3 值的 TPoint 结构的指针} ): BOOL; LineTo( DC: HDC; {设备环境句柄} X, Y: Integer {直线终点坐标} ): BOOL; //举例... 阅读全文
posted @ 2008-02-09 15:58 万一 阅读(6356) 评论(4) 推荐(0) 编辑
WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体
摘要://声明: CreateFontIndirect( const p1: TLogFont {字体结构} ): HFONT; {返回新字体指针} //TLogFont 是 tagLOGFONTA 结构的重定义: tagLOGFONTA = packed record lfHeight: Longint; {字体高度} lfWidth: Longint;... 阅读全文
posted @ 2008-02-09 15:08 万一 阅读(11814) 评论(5) 推荐(3) 编辑
WinAPI: GetCharABCWidths - 获取 TrueType 字符的宽度信息
摘要://声明: GetCharABCWidths( DC: HDC; {设备环境句柄} FirstChar, LastChar: UINT; {范围内的第一个和最后一个字符值} const ABCStructs {接受每个字符信息的 TABC 结构数组} ): BOOL; //TABC 类型是 _ABC 结构的重定义: _ABC ... 阅读全文
posted @ 2008-02-09 12:42 万一 阅读(4146) 评论(0) 推荐(0) 编辑