WINDOWS编程技巧之DELPHI篇

本文由lanyus收集整理,文中技术来源网络,部分摘自《奇思异想编程之DELPHI篇》,转载请注明此处。

       ///* lanyus QQ:231221 greathjw@163.com *///

一、隐藏任务栏
在WINDOWS中,系统的任务栏本质上也是一个窗口,其窗口类名为“Shell_TrayWnd"。要实现对它的操作,可通过API

函数FindWindow和ShowWindow来达到目的。

var
wndHandle:THandle;
wndClass:Array[0..50] of char;
begin
StrPCopy(@wndClass[0],'Shell_TrayWnd');
wndHandle:=FindWindow(@wndClass[0],nil);
ShowWindow(wndHandle,SW_HIDE);   //sw_restore
end;


二、隐藏桌面上的快捷方式
跟任务栏一样,桌面其实也是一个窗口,它的类名为“ProgMan”,同样用FindWindow找到窗口句柄,再由

ShowWindow来决定是否显示。

三、获取任务栏尺寸及位置
用FindWindow找到句柄,再用GetWindowRect获取当前任务栏尺寸大小。
GetWindowRect(HWND hWnd,    //所求窗口的句柄
              LPRECT lpRect   //存储窗口坐标的结构体的地址
             ):Boolean;

四、获取CPU信息
CPU的相关信息是存储在一个结构体中的,这个结构体由DELPHI用TSYSTEMINFO进行了封装,定义如下:
typedef struct_SYSTEM_INFO{
  union{
 DWORD dwOemId;                    //已改用如下结构体分支来代替这个变量的使用了
        struct{
            WORD wProcessorArchitecture; //表示处理器的架构
            word wReserved;        //保留字
        };
   };
 DWORD swPageSiae;            //分页大小
 LPVOID lpMinimumApplicationAddress;   //应用程序和动态链接库可以访问的最小地址
 LPVOID lpMaximumApplicationAddress;   //应用程序和动态链接库可以访问的最大地址
 DWORD  swActiveProcessorMask;      //活动处理器的掩码
 DWORD  dwNumberOfProcessors;       //处理器的数目
 DWORD  dwProcessorType;         //处理器的类别
 DWORD  dwAllocationGranularity;     //虚拟内存地址分配的间隔
 WORD   wProcessorLevel;         //处理器的级别
 WORD   wProcessorRevision;       //处理器修改信息
 }SYSTEM_INFO;
其中dwProcessorType由wProcessorArchitecture、wProcessorLevel和wProcessorRevision三个成员来确定

,其值为:
  PROCESSOR_INTEL_386:INTEL80386系列;
  PROCESSOR_ITNEL_486:INTEL80486系列;
  PROCESSOR_INTEL_PENTIUM:INTEL PENTIUM系列;
  PROCESSOR_MIPS_R4000:MIPS的4000系列(仅适用于WINDOWS NT);
  PROCESSOR_ALPHA_21064:ALPHA的21064系列(仅适用于WINDOWS NT);

另外,获得CPU信息调用API函数GetSystemInfo即可。

五、获取内存信息。
与获取CPU一样,系统依然采用了一个结构体来存储内存信息。这个存储内在状态信息的体定义下如:
typedef struct_MEMORYSTATUS{
 DWORD dwLength;            //SIZEOF(MEMORYSTATUS)即本结构体的大小
 DWORD dwMemoryLoad;        //当前使用内存与总内在的百分比
 DWORD dwTotalPhys;     //总物理内存大小
 DWORD dwAvailPhys;     //可用物理内存大小
 DWORD dwTotalPageFile;   //总页面文件的大小
 DWORD dwAvailPageFile;   //可用页面文件的大小
 DWORD dwTotalVirtual;    //总虚拟内存的大小
 DWORD dwAvailVirtual;    //可用虚拟内存的大小
}MEMORYSTATUS,*LPMEMORYSTATUS;

最后调用API函数GlobalMemoryStatus来获取内存信息。

六、获取磁盘空间大小。   (测试发现不准)
使用API函数GetDiskFreeSpace。
BOOL GetDiskFreeSpace(
 LPCTSTR lpRootPathName,           //根目录
 LPDWORD lpSectorsPerCluster,   //每簇的扇区数
 LPDWORD lpBytesPerSector,     //每个扇区的字节数
 LPDWORD lpNumberOfFreeClusters,  //可用的簇数
 LPDWORD lpTotalNumberOfClusters  //总簇数
 );
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Secspclu,Bytespsec,Freeclu,Totalclu,Ts,Fs:DWORD;
begin
GetDiskFreeSpace('c:/',Secspclu,Bytespsec,Freeclu,Totalclu);
Fs:=Freeclu*Secspclu*Bytespsec;
Ts:=Totalclu*Secspclu*Bytespsec;
Edit1.text:=FormatFloat('###,###',Ts); //总空间
Edit2.text:=FormatFloat('###,###',Fs);  //可用空间
end;

七、限制鼠标移动范围。
WINDOWS里有一个现成的API函数ClipCursor可以限制光标移动区域。
BOOL ClipCursor(
     CONST RECT *lpRect    //指向一个存储矩形范围数据的结构体
     );
有了这个函数就可以限制光标在屏幕的移动范围了。但是,如果想控制鼠标在某窗口的固定范围内移动,则需要调用

咖一个函数MapWindowPoints,它可以将一个窗体的坐标转化为另一个相关的窗体坐标。
int MapWindowPoints(
    HWND hWndFrom,         //源窗口句柄
    HWND hWndTo,     //目标窗体句柄
    LPPOINT lpPoints,   //指向结构体数组,包含需要转化的坐标
    UINT cPoints     //数组中结构体的数量
    );
参数hWndForm或hWndTo为NULL或HWND_DESKTOP时,表明所源窗体或目标窗体为屏幕窗体。参数lpPoints可以指向一个

Rect结构体,此时cPoints的值将设为2。

procedure TForm1.BitBtn1Click(Sender: TObject);
var
sc:TRect;
begin
sc:=BitBtn2.BoundsRect;
MapWindowPoints(handle,0,sc,2);
ClipCursor(@sc);

end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
sc:TRect;
begin
sc:=RECT(0,0,screen.Width,screen.Height);
ClipCursor(@sc);
end;

八、如何启动屏幕保护程序。
使用SendMessage或PostMessage函数。
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
   sendmessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0);
end;
启动屏幕保护程序还有一个方法,调用函数SystemParametersInfo,能过其参数设置可以启动或关闭屏幕保护程序。
  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,0);  //启动屏保
 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,nil,0);  //关闭屏保


九、检测驱动器是否准备就绪。
在DELPHI中没有提供专门的函数检测驱动器是否准备就绪,也不能直接调用一人API函数来实现这一操作。但是,我

们可以利用DiskSize来检测磁盘容量,如果驱动器不存在或没有准备好,它会返回-1,其它情况下则返回该磁盘或光

盘的容量。

Function DiskSize(Drive:Byte):Int64;
参数为0时,表示指定当前驱动器;为1时表示A盘,2表示B盘,依此类推。

十、隐藏鼠标。
利用ShowCursor函数。
int ShowCursor(
    BOOL bShow     //光标是否可见的标志
    );
参数bShow为FALSE时表示光标不可见。注意,调用此函数仅仅隐藏了鼠标,程序还是可以检测到并激发鼠标的单击或

移动等事件的。

十一、串口操作。
在DELPHI中没有提供专门的串口操作控件,帮助文件里介绍串口的资料也是廖廖无几的。但是,我们可以通过调用一

系列的API来操作串口,spcomm串口操作控件也是通过调用一系列API工作的。
打开串口用API函数CreateFile,该函数可打开、新建文件或打开设备,其原形如下:
CreateFile(
  lpFileName:PChar;   //为文件名或设备名,串口用COM1,COM2表示。
  dwDesiredAccess:DWORD;   //访问类型,Generic_Read为只读访问,Generic_Write为写访问。Generic_Read or

Generic_Write为读写访问。
  dwShareMode:DWORD; //指定该文件的共享属性,该参数是为有许多应用程序共享的文件提供的,串口不能共享,

必须设置为0。
  lpSecurityAttributes:PSecurityAttributes; //引用安全性属性SECURITY_ATTRIBUTES结构,该结构定义了一些

属性,例如通信句柄如何被 打开端口的应用程序的子程序所继承。设置为NULL将为该端口分配缺省的安全性属性。
  dwCreationDisposition:DWORD; //指定如果CreateFile正在被已有的文件调用时应做些什么,串口是实物,必须

设置成OPEN_Existing,该标志告诉WINDOWS不要创建新端口,而是打开已存在的端口。
  dwFlagsAndAttributes:DWORD; //描述了该端口的各种属性。对串口来说,唯一有意义的设置是

File_Flag_Overlapped。
  hTemplateFile:THandle  //是指向文件的句柄。串口没有模板文件,因而设置该参数为0。
  ):THANDLE;stdcall;

关闭串口使用API函数CloseHandle:CloseHandle(hObject:THandle):BOOL;stdccall; 句柄是CREATEFILE打开串口时

返回的句柄。
初始化串口使用API函数SetupComm:SetupComm(hFile:Thandle; dwInQueue,dwOutQueue:DWORD):BOOL;stdcall;
 dwInQueue,dwOutQueue分别定义接收缓冲区和发送缓冲区的大小(只是推荐的,实际大小由WINDOWS分配);
获取串口当前配置:GetCommState(hFile:Thandle; varlpDCB:TDCB):BOOL;Stdcall; 调用成功返回非0值,

GetLastError函数可获取错误信息

配置串口:SetCommState(hFile:Thandle; const lpDCB:TDCB):BOOL;Stdcall;
获取串口性能:GetCommProperties(hFile:Thandle; var lpCommProp:TCommProp):bool;stdcall;
通信设备配置:CommConfigDialog(lpszName:PChar;hWnd:HWND; var lpCC:TCommConfig);调用该函数将弹出一个配

置窗口
读串口操作:ReadFile(hFile:THandle; var Buffer; nNumberOfBytesToRead:DWORD; var

lpNumberOfBytesRead:DWORD; lpOverlapped:POverlapped):BOOL;Stdcall;支持同步或异步操作。

十二、列举进程。
引用Tlhelp32单元。
利用API函数CreateToolhelp32Snapshot创建一个系统进程快照,用Process32First得到第一个系统进程,再用

Process32Next向后列举。

procedure TForm1.BitBtn13Click(Sender: TObject);      //进程操作
var
ProName:string;  //进程名
ProID:integer;     //进程ID号
ProTheard:integer; //进程线程数
goloop:boolean;
FSnapshothandle:Thandle;   //系统进程快照句柄
FProcessEntry32:TProcessEntry32;//进程入口的结构信息
begin
  FSnapshothandle:=CreateToolHelp32Snapshot(TH32CS_SnapProcess,0); //创建一个系统进程快照
  FProcessEntry32.dwSize:=sizeof(FProcessEntry32);
  goloop:=Process32First(FSnapshothandle,FProcessEntry32); //得到第一个进程
  while goloop do
  begin
    ProName:=FProcessEntry32.szExeFile;
    ProID:=FProcessEntry32.th32ProcessID;
    ProTheard:=FProcessEntry32.cntThreads;
    ListBox1.Items.Add(ProName+'  '+Inttostr(ProID)+'  '+inttostr(ProTheard)); //进程全显示在LISTBOX组

件里
    goloop:=Process32Next(FSnapshothandle,FProcessEntry32);
end;

十三、以其它身份运行程序(RUNAS)。
使用API函数CreateProcessWithLogonW。该函数在DELPHI并没封装完整,使用前需对其作出声明与定义。
声明:
function CreateProcessWithLogon(
                         lpUsername: PWChar;  // 用户乙的账号(Account)
                         lpDomain: PWChar;  //用户乙的域(Domain)
                         lpPassword: PWChar;  // 用户乙的密码(Password)
                         dwLogonFlags: DWORD;  // logon option
                         lpApplicationName: PWChar;  // 需要运行的程序
                         lpCommandLine: PWChar;  // command-line string
                         dwCreationFlags: DWORD;  // creation flags
                         lpEnvironment: Pointer;   // new environment block
                         lpCurrentDirectory: PWChar;  // current directory name
                         const lpStartupInfo: TStartupInfo;  // startup information
                         var lpProcessInfo: TProcessInformation   // process information
                               ): BOOL; stdcall;             

定义:
function CreateProcessWithLogon; external advapi32 name 'CreateProcessWithLogonW';

十四、获取当前登录用户名。
使用API函数GetUserName.
procedure TForm1.XP_Button2Click(Sender: TObject);  //获取当前登录用户名
var
users:array[0..255] of char;//用户名
i:Dword; //缓冲区大小
begin
   if GetUserName(users,i) then
   Edit6.Text:=users;
end;

十五、修改文件创建时间、修改时间和最后访问时间。
利用API函数SetFileTime可直接修改文件的创建时间、修改时间及最后访问时间。而API函数GetFileTime则可以读出

文件的创建时间、修改时间及最后访问时间。
这两个函数原形如下:

function SetFileTime(
  hFile: THandle;   //文件句柄,可由createFile函数打开文件获得
  lpCreationTime,  //文件创建时间
  lpLastAccessTime,  //最后访问时间
  lpLastWriteTime: PFileTime //最后修改时间
  ): BOOL;

function GetFileTime(
  hFile: THandle;  //文件句柄,可由createFile函数打开文件获得
  lpCreationTime,   //文件创建时间
  lpLastAccessTime,   //最后访问时间
  lpLastWriteTime: PFileTime //最后修改时间
  ): BOOL;
//
 hFileOld :=createFile(srcFile,generic_read,file_share_read,nil,
                open_existing,FILE_ATTRIBUTE_NORMAL,Cardinal(nil));
  hFileNew :=createFile(destFile,generic_write,file_share_write,nil,
                open_existing,FILE_ATTRIBUTE_NORMAL,Cardinal(nil));
  GetMem(CreationTime,SizeOf(TFileTime));
  GetMem(LastAccessTime,SizeOf(TFileTime));
  GetMem(LastWriteTime,SizeOf(TFileTime));
  GetFileTime(hFileOld,CreationTime,LastAccessTime,LastWriteTime);
  SetFileTime(hFileNew,CreationTime,LastAccessTime,LastWriteTime);

十六、在系统托盘添加图标。
在系统托盘区添加一个图标可以通过发消息的发送来实现。WINDOWS中有这样一个API函数Shell_NotifyIcon可以用来

向托盘发送消息。
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
   DWORD dwMessage,       //发送的消息
   PNOTIFYICONDATA pnid  //指向结构体NOTIFYICONDATA
   );
它发送的消息参数如下:
  NIM_ADD        //向托盘中添加一个图标
    NIM_DELETE   //删除托盘中的某个图标
    NIM_MODIFY   //修改托盘中的某个图标
另一参数为指向结构体NOTIFYICONDATA的指针,结构体NOTIFYICONDATA则是用来存储系统任务状态栏信息的。
typedef struct_NOTIFYICONDATA{
   DWORD cbSize;                //结构体NOTIFYICONDATA的大小
   HWND hWnd;          //接收托盘鼠标事件的窗口句柄
   UINT uID;          //图标的ID(托盘鼠标事件的wParam参数)
   UINT uFlags;         //消息的有效范围
   UINT uCallbackMessage;    //系统回送消息的ID
   HICON HIcon;         //显示在托盘中的图标的句柄
   char szTip[64];       //鼠标移动到图标上时的提示信息
  }NOTIFYICONDATA,*PNOTIFYICONDATA;
注意:在安装图标时需要对结构体NOTIFYICONDATA的每一个成员赋值,而更改或删除时某些成员可不必赋值。

十七、使程序不在系统任务条上出现
procedure TForm1.FormCreate(Sender: TObject);
begin 
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;

陆续增加中......

Delphi是由Inprise公司推出的面向对象的可视化软件开发工具。Delphi 5是Delphi的最新版本。本书共分三部分、16章,主要介绍Delphi 5集成开发环境,对象Pascal语言、组件、通用编程技术、动态链接库、多线程、多媒体编程、数据库编程、网络编程Windows API编程等。 目 录 前言 第一部分 Delphi编程基础 第1章 Delphi集成开发环境 1 1.1 集成开发环境简介 1 1.2 集成调试器 5 1.3 开发环境的优化 6 1.3.1 自定义工具栏 6 1.3.2 编程环境设置 7 1.3.3 编辑环境设置 8 1.3.4 工程设置 8 1.4 方法与技巧 9 1.4.1 使用代码浏览器 9 1.4.2 使用代码编辑器 9 1.4.3 使用帮助系统 10 1.4.4 设置IDE桌面 11 第2章 对象Pascal语言 12 2.1 学习对象Pascal语言的一个通用 例程 12 2.2 对象Pascal语言基础 14 2.2.1 标识符 14 2.2.2 保留字和指令字 14 2.2.3 注释 15 2.2.4 数据类型 16 2.2.5 运算符 21 2.2.6 语句 24 2.2.7 过程与函数 27 2.3 对象Pascal语言的关键技术 30 2.3.1 对象和类 31 2.3.2 类的封装与继承 31 2.3.3 构造函数和析构函数 32 2.3.4 多态性 35 2.3.5 抽象类 38 2.3.6 运行时类型信息 39 2.3.7 类方法 41 2.3.8 类引用 42 2.3.9 单元文件与工程文件 43 2.4 异常处理 45 2.4.1 raise语句 45 2.4.2 try...except语句 45 2.4.3 try...finally语句 47 2.5 方法与技巧 48 2.5.1 命名规则 48 2.5.2 在编译时自由设置是否获得提示 信息 48 2.5.3 使用代码模板 49 2.5.4 使用动态多维数组 49 2.5.5 定义两个相互包含的类 50 2.5.6 获取和使用命令行参数 51 2.5.7 引用参数传递 51 第二部分 Delphi编程的核心技能 第3章 窗体和组件 53 3.1 窗体和组件 53 3.1.1 窗体 54 3.1.2 组件 56 3.1.3 在窗体中使用组件 57 3.2 文本组件 60 3.3 特殊输入组件 61 3.4 按钮及其分类组件 63 3.5 列表组件 64 3.6 分组组件 67 3.7 信息反馈组件 69 3.8 表格显示组件 70 3.9 图形显示组件 71 3.10 开发MDI应用程序 73 3.11 常用组件的用法 74 3.12 方法与技巧 84 3.12.1 窗体、组件的使用原则 84 3.12.2 使用信息对话框 85 3.12.3 使用组件的Hint属性 88 3.12.4 使用Edit组件的IME属性 89 3.12.5 将系统字体添加到ComboBox 组件中 89 3.12.6 在RichEdit组件中存取文件 90 3.12.7 设置模态对话框的返回值 90 3.12.8 使用事件处理过程中的Sender 参数 91 3.12.9 为控件生成多行提示信息 91 3.12.10 生成非矩形窗口 92 3.12.11 移动无标题栏窗口 94 3.12.12 制作动态字幕 95 3.12.13 在窗体上动态地设置背景 画面 96 3.12.14 Owner和Parent的区别 97 第4章 菜单、工具栏和状态栏 98 4.1 菜单 98 4.1.1 主菜单 99 4.1.2 鼠标右键弹出式菜单 99 4.1.3 使用菜单模板 99 4.2 工具栏 100 4.2.1 ToolBar 100 4.2.2 CoolBar 100 4.2.3 ControlBar 101 4.3 状态栏 101 4.4 方法与技巧 106 4.4.1 动态创建菜单 106 4.4.2 为菜单动态定义快捷键 108 4.4.3 动态改变菜单 108 4.4.4 定制系统菜单 109 4.4.5 制作图形菜单项 110 4.4.6 在状态栏中添加进度条等其他 组件 111 4.4.7 MDI应用程序中的菜单融合 113 4.4.8 制作可随处拖放的工具栏 116 4.4.9 将菜单项移到菜单栏的最右边 117 4.4.10 运行时控件的移动 117 第5章 键盘和鼠标 119 5.1 键盘事件 119 5.2 鼠标事件 120 5.2.1 常用鼠标事件 120 5.2.2 拖曳事件 120 5.3 方法与技巧 122 5.3.1 检测Shift、Alt和Ctrl键是否 按下 122 5.3.2 屏蔽系统功能键 123 5.3.3 模拟按下键盘上的某个键 124 5.3.4 限制鼠标移动的范围 124 5.3.5 自定义鼠标 125 5.3.6 设置光标闪烁的速度 126 5.3.7 不同程序间的拖曳操作 127 第6章 文件、目录和驱动器 129 6.1 文件 129 6.2 文件对话框组件 129 6.3 Win3.1相关组件 131 6.4 常用函数 131 6.4.1 文件操作常用函数 131 6.4.2 目录操作常用函数 136 6.4.3 驱动器操作常用函数 138 6.4.4 文件名操作常用函数 139 6.5 方法与技巧 145 6.5.1 获取驱动器类型信息 145 6.5.2 操作INI文件 146 6.5.3 从文件中读取超过255个字符 的行 148 6.5.4 获取文件的日期信息 149 6.5.5 检测软盘或光盘是否有变化 150 6.5.6 检测驱动器容量 151 6.5.7 拷贝整个目录 152 6.5.8 将文件删除到回收站中 153 6.5.9 检测驱动器是否就绪 153 6.5.10 获取应用程序的文件名 154 6.5.11 操作临时文件 154 第7章 打印 156 7.1 一些简单的打印输出 156 7.2 TPrinter对象和TScreen对象 156 7.3 打印操作常用函数 157 7.4 方法与技巧 164 7.4.1 获取默认打印机的信息 164 7.4.2 获取打印机队列的状态信息 165 7.4.3 打印窗体 166 第8章 多线程应用程序 167 8.1 进程与线程 167 8.2 TThread类 167 8.3 线程的同步 169 8.4 线程的优先级 170 第9章 动态链接库 176 9.1 概述 176 9.2 创建动态链接库 177 9.3 使用动态链接库 179 9.4 方法与技巧 180 9.4.1 如何调试动态链接库 180 9.4.2 在DLL中使用MessageBox代替ShowMessage 181 9.4.3 如何动态地装入DLL 181 9.4.4 如何定制不同语言版本的应用 程序 183 第三部分 Delphi高级编程技术 第10章 多媒体技术 185 10.1 多媒体 185 10.1.1 概述 185 10.1.2 多媒体应用领域 186 10.1.3 多媒体软件开发工具 187 10.2 图像格式的处理 188 10.2.1 位图 189 10.2.2 JPEG文件 191 10.3 特殊显示效果 193 10.3.1 画布 193 10.3.2 调用CopyRect 193 10.3.3 调用BitBlt 194 10.4 动画 199 10.4.1 文字动画 199 10.4.2 图像动画 200 10.5 音频、视频 206 10.6 方法与技巧 209 10.6.1 使用MessageBeep与Beep 209 10.6.2 使用PlaySound 210 10.6.3 使用mciSendString 211 第11章 关系数据库 215 11.1 关系数据库 215 11.1.1 关键字 215 11.1.2 表之间的约束 215 11.1.3 结构化查询语言(SQL) 216 11.2 Delphi提供的数据库辅助工具 218 11.2.1 使用SQL Explorer 218 11.2.2 使用Database Desktop 218 11.2.3 使用BDE Administrator 220 11.3 数据库组件 221 11.3.1 TTable 221 11.3.2 TQuery 225 11.3.3 表的连接 227 11.3.4 计算字段 229 11.3.5 查找字段 230 11.3.6 网格 231 11.4 查询记录 232 11.4.1 GotoKey 232 11.4.2 FindKey 233 11.4.3 模糊查询 233 11.4.4 Locate 234 11.5 修改记录 234 11.6 插入和删除记录 235 11.7 数据模块 237 11.8 数据字典查看器 238 11.9 事务 240 11.10 处理数据库异常 244 第12章 InterBase服务器 248 12.1 客户/服务器的概念 248 12.1.1 客户 248 12.1.2 InterBase 客户例程库 248 12.1.3 InterBase服务器 248 12.1.4 Borland数据库引擎 248 12.2 数据库的管理和维护 249 12.2.1 创建数据库 249 12.2.2 创建表 250 12.2.3 数据库安全 250 12.2.4 备份与恢复 251 12.3 服务器端程序 252 12.3.1 存储过程 252 12.3.2 触发器 252 12.4 本地缓存 253 第13章 Web与数据库 260 13.1 CGI的工作原理 260 13.2 Delphi对CGI的支持 260 13.3 创建Web应用程序 261 13.4 表单 262 13.5 把信息保存到数据库 264 13.6 查找记录 266 第14章 COM 270 14.1 在DLL中实现对象 270 14.2 接口 274 14.2.1 对象的生存期 277 14.2.2 IUnknown 279 14.2.3 全局唯一标志符(GUID) 281 14.2.4 注册表 281 14.2.5 多个接口问题 281 14.2.6 Variant类型 284 14.2.7 TComObject 289 14.2.8 TTypedComObject 295 14.3 OLE自动化 307 14.3.1 创建OLE自动化服务器 307 14.3.2 建立OLE客户程序 314 14.3.3 访问自动化服务器的方法 316 14.3.4 使用Word 316 14.4 复合文档 319 第15章 分布式程序设计 329 15.1 CORBA结构 329 15.1.1 CORBA在数据库的应用 335 15.1.2 远程访问 341 15.1.3 OSFind 341 15.2 远程数据集 342 15.2.1 基础 342 15.2.2 扩展服务器 346 15.2.3 参数传递 353 15.2.4 主从约束 355 15.2.5 离线处理 358 15.2.6 ActiveForm 361 15.3 插口Socket 362 15.3.1 插口的使用 362 15.3.2 使用插口的一个例子 363 15.3.3 TNMUDP组件 369 第16章 其他编程技术 374 16.1 使用剪贴板 374 16.1.1 组件对剪贴板操作的支持 374 16.1.2 使用剪贴板类 375 16.1.3 操作图形 378 16.1.4 操作组件 379 16.1.5 操作定制格式的数据 379 16.2 动态数据交换(DDE) 381 16.3 操作注册表 385 16.3.1 TRegistry类 387 16.3.2 与注册表相关的API函数 390 16.4 帮助系统的制作 395 16.4.1 RTF文件 395 16.4.2 HPJ文件与HLP文件 398 16.4.3 启动帮助 402 16.5 安装与卸载 403 16.6 方法与技巧 404 16.6.1 获取Windows版本信息 404 16.6.2 获取系统的度量信息和相关 配置信息 405 16.6.3 获取CPU信息 407 16.6.4 获取内存信息 408 16.6.5 存取系统的颜色信息 409 16.6.6 获取Windows及系统路径 409 16.6.7 存取计算机名称 410 16.6.8 获取用户注册信息 411 16.6.9 关闭Windows 411 16.6.10 启动控制面板 412 16.6.11 启动屏幕保护 415 16.6.12 使窗体标题栏闪烁 415 16.6.13 使窗口背景颜色渐变 416 16.6.14 隐藏/显示桌面上的图标 416 16.6.15 获取窗口标题栏中的文字 417 16.6.16 制作软件封面 418 16.6.17 隐藏/显示Windows任务栏 420 16.6.18 使应用程序不出现在Windows任务栏上 420 16.6.19 状态栏编程 421 16.6.20 存取系统参数信息 426 16.6.21 Windows启动时运行程序 427 16.6.22 为程序在启动菜单中创建 快捷方式 428 16.6.23 在程序中运行其他程序 429 16.6.24 同时只运行程序的一个实例 429 16.6.25 关闭运行的其他应用程序 431 16.6.26 显示旋转字体 432
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值