DELPHI学习笔记

摘:http://search.csdn.net/Expert/topic/952/952794.xml?temp=.5073358

1,用Application.Teminate终止程序,不会触发OnClose、OnCloseQuery事件。
Terminate() 会调用Windows的PostQuitMessage()函数向应用程序的消息队列中发一个消息。VCL据此释放应用程序创建的所有对象。但并不是一调 用Terminate()就马上使应用程序终止,而是当应用程序检索到WM_QUIT消息时才会真正终止。而Halt()立即终止应用程序的执行,但不释 放先前创建的对象,也不会返回到调用Halt()的地方。


2,窗体的AlphaBlend,AlphaBlendValue属性,SetLayeredWindowAttributes函数只在WIN2000环境下有效。

3,在菜单中选择Project-Options-Packages选中‘Build with runtime pakages’编译时减少可执行文件大小(执行程序时运行环境必须有这些Packages存在)

4,超链接:uses ShellAPI;
ShellExcute(Handle,'open','http://www.37.com',nil,nil,sw_show);
ShellExcute(Handle,'open','mailto ilang@email.com',nil,nil,sw_show);

-----------------------------------------------------------------------
5,快捷键

在代码编辑器中按Ctrl+E可以 激活Increment Search。这样就避免了从菜单中选择Search->Find,再输入文本的繁琐步骤。

选中一或者几行文本,然后按Ctrl+Shift+I,可以增加这几行的缩进量;Ctrl+Shift+U减少缩进。缩进的距离取决于Editor Options里面的Auto Indent设置。

选中一些文本,按Ctrl+O+U(保持Ctrl按下,先按O,再按U),将改变选中文本的大小写。Ctrl+K+E将选中文本全部变成小写;Ctrl+K+F变成全部大写。

在Form Designer中工作的时候,选中某个构件,按下Ctrl和方向键拖动它将能够微调它的位置,而不用对齐到网格(Snap to Grid只对鼠标操作有效。)

-----------------------------------------------------------------------
6,几个预定义的编译符号
Delphi 版本

{$IFDEF VER140}
  ShowMessage('Is Delphi 6!')
{$ENDIF}

{$IFDEF VER130}
  ShowMessage('Is Delphi 5!')
{$ENDIF}

操作系统
{$IFDEF MSWINDOWS}
  ShowMessage('Is MSWINDOWS!')
{$ENDIF}

{$IFDEF LINUX}
  ShowMessage('Is Delphi LINUX!')
{$ENDIF}

{$IFDEF WIN32}
  ShowMessage('Is WIN32!')
{$ENDIF}

1,(1)设置没有标题栏但可以改变大小的窗体
{procedure CreateParams(var Params: TCreateParams); override;
inherited CreateParams(Params);
Params.Style := WS_THICKFRMAE or WS_POPUP or WS_BORDER;}
(2)设置没有标题栏但可以拖动的窗体
{procedure WMNCHitTest(var Message: TWMNCHitTest);
  message WM_NCHitTest;
inherited;
if Message.Result = htClient then
Message.Result := htCaption;}

2,TApplication.ExeName 属性:返回应用程序的全路径和文件名;
ExtractFileName(Application.ExeName) 返回文件名
ExtractFilePath(Application.ExeName) 返回全路径
ExtractFileExt(Application.ExeName)  返回文件扩展名

3,(1)对于没有Owner的组件,ComponentIndex属性总等于-1;
(2)TApplication.HandleException用于显示项目中出现异常的有关信息;
(3)TApplication.ProcessMessages用于程序执行一个长的过程又不中断其他
代码的执行(例如安装程序时响应放弃按钮),与HandleMessages的区别是
如果没有发现消息,ProcessMessages方法不会把应用程序置于空闲状态;
单单一个在一个处理过程中增加Application.ProcessMessages,则程序在响应
其他过程后会返回来处理这个过程,且处理完这个过程之前无法退出程序,要在程序
转向其他过程的时候终止当前过程,可在Application.ProcessMessages后加上
一 个布尔变量判断如 if InterruptProcess then Exit;然后在其他需要响应的过程中设置InterruptProcess := true;(或者设置一个整型变量给予需要这样处理的过程一个过程标识,这样:if ProcessID <> CurID(本过程标识) then Exit )
(4)TApplication.Minimize用于把应用程序的主窗体最小化;TApplication.
Restore 用于把主窗体恢复成最小化或最大化前的大小。
(5)当应用程序置于空闲状态时将触发OnIdle事件。
(6)Applicatiion.Title属性决定程序最小化时的标题。

4,√√√√√√√√Delphi5开发人员指南(第四章)√√√√√√√推荐阅读

5,LoadBitmap() 不能返回调色板(无法调入256位图),用TBitmap.LoadFromResourceName 或TBitmap.LoadFromResourceID

6,从资源文件中调入资源,资源的标识符必须全部大写。

7,调入自定义光标
Const cr := 1;(必须为正数或-20以内的负数)

{$R cr.res}

Screen.Cursors[cr] := LoadCursor(hInstance,'CR');
Screen.Cursor := cr;

8,WM_WindowPosChanging 消息 窗体大小改变时发生
GetSystemMetrics(SM_CYCAPTION)取得标题栏的高度,宽度SM_CXCAPTION。

9,(1)在Windows NT 环境下 使用ExitWindowsEX()不会关闭系统,必须使用
WIN32 API函数AdjustTokenPrivleges()授予SE_SHUTDOWN_NAME权限;
(2) 调用ExitWindowsEX()或ExitWindows()时,每个应用程序会收到WM_QUERYENDSESSION消息,如果应用程序从这个消息返回非零值,表示允许关闭,
运行一个无窗体应用程序时,需要通过拦截这个消息来确定是否关闭系统。
(3) 可以使用SysUtils.pas中的Win32Check()函数,它将调用Win32 API函数GetLa stError()来显示错误信息。如:Win32Check(ExitWindowsEX(EWX_SHUTDOWN, 0);

10,消息处理的过程命名约定:过程名与消息的标识符一致,但不要全部大写,不要
有下划线。例:procedure CMDesignHitTest(var Message: TCMDesignHitTest); message CM_DESIGNHITTEST;{添加Message.Result := 0 让控件在设计时响应消息}

11,一个应用程序内部发送消息 Perform()(不依赖API函数),SendMessage(),PostMessage()。

12,(1)自定义消息
范围:WM_USER + 100-$7FFF.(WM_USER-$7FFF)
(2)在两个或多个应用程序之间发送消息:RegisterWindowsMessage();

1,(1)在一个面板区域设置右键菜单,只是这样Panel1.PouupMenu:=PopupMenu还不够,一个简单的做法是设窗体的ActiveControl属性为Panel1.
(2)PopupMenu1.PopupComponent返回右键菜单点击的控件。

2,ParamCount 函数返回命令行参数的个数;ParamStr(0), 传回执行档的档名(含路径);ParamStr(n), 传回第n个参数的内容。

3,对于一般的构件而言,height就是clientheight,width就是clientwidth,而对于窗体而言,height是包括标题条在内的高度,而clientheight是指窗体工作区的高度。同理,clientwidth是指定窗体工作区的宽度。

4,通常在OnCreate或Onshow中直接用Close关闭窗体会出现保护性错误,用PostMessage(self.handle, WM_CLOSE, 0, 0);

5,(1)给数值加上千位分隔符:Format('%*.*n',[10,2,n]);
(2)设定DateTimePicker的日期格式:DateTimePicker1.Perform(DTM_SETFORMAT, 0, DWORD(PCHAR('MM/dd/yyyy')))。

6,浮点数相除:/;整数:div。

1,当用户选取菜单时,Windows会向程序发送WM_INITMENU消息,例:
{procedure WMInitMenu(var msg: TMessage); message WM_INITMENU;
  if msg.WParam = GetMenu(Handle) then
  N1.Enabled := Clipboard.HasFormat(CF_OEMTEXT);
  else inherited;}

2,拖动Panel控件
在MouseDown事件中添加:
const
  SC_DragMove = $F012;  { a magic number }
begin
  ReleaseCapture;
  panel1.perform(WM_SysCommand, SC_DragMove, 0);
end;
{适用于其他一些控件如TEdit,TMemo,TButton;不能用于TLabel但TStaticText可;SC_DragMove  = $F011- $F019 效果相同,SC_DragMove  = $F020-$F029
鼠标单击时控件最小化,双击恢复;SC_DragMove  = $F030-$F039时最大化,SC_DragMove  = $F060-$F069 时隐藏}

3,使RichEdit能添加大于64K的内容
SendMessage(RichEdit1.Handle, EM_EXLIMITTEXT, 0, $7FFFFFFF);

4,√√√TFrame(框架)的使用√√√

5,WM_EXITSIZEMOVE判定用户改变窗口大小或改变窗口位置的事件是何时
完成的。

1,使用Random取任意值函数,加上initialization randomize或在代码前面直接添加randomize;

2,把应用程序添加到打开方式中
例:uses Registry;
var
  reg: TRegistry;
begin
  try
    reg := TRegistry.Create;
    try
      reg.RootKey := HKEY_CLASSES_ROOT;
      reg.OpenKey('*/Shell/Trc', true);     { 写入注册表,'Trc'为标识,
                                               可自行指定 }
      reg.WriteString('', 'Open with Trc'); { ‘Open...'为应用程序
                                               在打开方式中显示的名称 }
      reg.CloseKey;                         { 关闭注册表项 }
      reg.OpenKey('*/Shell/Trc/Command', true); { 打开命令参数项,此项用
                                                 来保存命令行及参数 }
      reg.WriteString('', '"' + ParamStr(0) + '" "%1"'); { ParamStr(0)
                                         命令行参数此处为可执行文件路径 }
      reg.CloseKey;
    finally
      reg.Free;
    end;
  except
    raise;
  end;

  { 打开文件 }
  if ParamCount >= 1 then { 直接运行时 ParamCount=0,用打开方式运行时
                              ParamCount=1 }
  begin
    MyOpenFile(ParamStr(1)); { ParamStr(1)命令行参数为待打开文件的路
                                 径 ,MyOpenFile为自定义的打开文件过程}
    { 另外GetCommandLine函数取得ParamStr各项值 }
  end;
end;
{ 一郎 2002.7.6 }

3,SHAddToRecentDocs(uFlags: Cardinal, pv: Point)用于在开始菜单的文档
中加入指定的文件{例:SHARD_PATH, pChar(s),s为路径},函数位于ShlObj
单元;清除文档SHAddToRecentDocs(SHARD_PATH, nil){速度慢}。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值