ITPub博客

首页 > Linux操作系统 > Linux操作系统 > delphi一句话帮助 (转)

delphi一句话帮助 (转)

原创 Linux操作系统 作者:amyz 时间:2007-11-05 16:03:05 0 删除 编辑
delphi一句话帮助 (转)[@more@]

1.  如果想你的程序能够正确处理异常情况的话,请引用SysUtils.pas单元,否则即使程序使用了try。。。except。。。也不能正确捕获异常。XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

2.  定义常量字符串的一种方式

resourcestring

   aa='aaaa';

raise Exception.CreateRes(@aa);

3.  字符串常量数组的初始化

const  constarray:array [0..2] of string=(‘first’,’second’,’third’);

4.  结构体初始化

type  Tstructinit=record

  A1:integer;

  A2:array [0..2] of integer;

End;

Const m_structinit:Tstructinit=(A1:0;A2:(0,1,2));

5.  多维数组的长度

var  array2:array of array of integer;

setlength(array2,2,2);

6.  使用Create和New开辟的空间都存在于堆中,不能自动释放,建议使用FreeAndNil释放, 参数以及局部变量存在于栈中,自动释放。

7.  SizeOf不适合于对象,返回的总是4;对于固定类型可以正确返回.

8.  Create(nil)需要手工释放,Creat(self)会随着拥有者的释放而释放.

9.  动态改变已定义常量的值

procedure ChangeConst(const Const;var Value;Size:Integer);

begin

  Move((@Value)^,(@Constant)^,Size);

End;

10.  进行删除操作的时候循环使用DownTo,会避免错误.

11.  汉字的Ascii码>128,可以用它来判别是否为汉字

12.  dll编写中,需要使用Sharemem单元来引用BORLANDMM.DLL内存管理.

13.  PostMessage只将消息放到消息队列中,需要排队等待处理。

SendMessage绕过消息队列直接发送到窗口过程,等到消息处理返回值才返回.

14.  鼠标移入移出消息:CM_MOUSEENTER,CM_MOUSELEAVE

15.  关机消息WM_QUERYENDSESSION

16.  可以利用ThintWindow和类的方法ActivateHint来创建浮动窗体.

17.  调出文件属性对话框

uses shellapi;

function ShowFileProperties(FileName: String; Wnd: HWND):Boolean;

var

  sfi: TSHELLEXECUTEINFO;

begin

  with sfi do

  begin

  cbSize := SizeOf(sfi);

  lpFile := PAnsiChar(FileName);

  Wnd := Wnd;

  fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI;

  lpVerb := PAnsiChar('properties');

  lpIDList := nil;

  lpDirectory := nil;

  nShow := 0;

  hInstApp := 0;

  lpParameters := nil;

  dwHotKey := 0;

  hIcon := 0;

  hkeyClass := 0;

  hProcess := 0;

  lpClass := nil;

  end;

  Result := ShellExecuteEX(@sfi);

end;

 

procedure TForm1.Button1Click(Sender: Tobject);

begin

  ShowFileProperties('c:AA.txt', Handle);

end;

18.  更改系统时间

uses windows,Dialogs,Forms;

var MyTime:TsystemTime;

begin

  FillChar(MyTime,sizeof(MyTime),#0);

  MyTime.wYear:=2003;

  MyTime.wMonth:=06;

  MyTime.wDay:=01;

  If not SetSystem(MyTime) then

Showmessage(‘Failure’);

  End;

19.  复制文件夹Xcopy

.  procedure Xcopy(SourceDir,DestinationDir:String);

  var


   Search : TSearchRec;


 Rec  : word;


Begin


 SourceDir := SourceDir + '';


   Rec := FindFirst(SourceDir + '*.*', faAnyFile, Search);


 While Rec = 0 Do


   Begin


   If Search.Name[1] <> '.' Then


   Begin


   If (Search.Attr And faDirectory) = faDirectory Then


   Begin


   Windows.CreateDirectory(PChar(DestinationDir + '' + Search.Name), nil);


   FileSetAttr(DestinationDir + '' + Search.Name, FileGetAttr(SourceDir + '' + Search.Name));


   X_Copy(SourceDir + '' + Search.Name, DestinationDir + '' + Search.Name);


   end


   Else


   Begin


   CopyFile(PChar(SourceDir + '' + Search.Name),PChar(DestinationDir + '' + Search.Name), True);


   FileSetAttr(DestinationDir + '' + Search.Name, FileGetAttr(SourceDir + '' + Search.Name));


   Application.ProcessMessages;


   end;


   end;


   Rec := FindNext(Search);


   end;


   FindClose(Search);


end;


20.  绘制透明位图

  procedure DrawTrans(DestCanvas: TCanvas; X,Y: smallint; SrcBitmap: TBitmap; AColor, BackColor: TColor);

var  ANdbitmap, ORBitmap: TBitmap;

   CM: TCopyMode;

   Src: TRect;

begin

   ANDBitmap:= NIL;

   ORBitmap:=  NIL;

   try

   ANDBitmap:= TBitmap.Create;

   ORBitmap:= TBitmap.Create;

   Src  := Bounds(0,0, SrcBitmap.Width, SrcBitmap.Height);

   with ORBitmap do begin

   Width:= SrcBitmap.Width;

   Height:= SrcBitmap.Height;

   Canvas.Brush.Color := clBlack;

   Canvas.CopyMode := cmSrcCopy;

   Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);

   end;

   with ANDBitmap do begin

   Width:= SrcBitmap.Width;

   Height:= SrcBitmap.Height;

   Canvas.Brush.Color := BackColor;

   Canvas.CopyMode := cmSrcInvert;

   Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);

   end;

   with DestCanvas do begin

   CM := CopyMode;

   CopyMode := cmSrcAnd;

   Draw(X,Y, ANDBitmap);

   CopyMode := cmSrcPaint;

   Draw(X,Y, ORBitmap);

   CopyMode := CM;

   end;

   finally

   ANDBitmap.Free;

   ORBitmap.Free;

   end;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

   DrawTrans(Image1.Canvas, 0,0, Image2.Picture.Bitmap, clBlack, clSilver);

end;

21.  获取cpu速度

  function GetCpuSpeed: Extended;

var

  t, mhi, mlo, nhi, nlo: dword;

  shr32 : comp;

begin

   shr32 := 65536;

   shr32 := shr32 * 65536;

  t := GetTickCount;

   while t = GetTickCount do ;

   asm

   DB 0FH,031H // rdtsc

   mov mhi,edx

   mov mlo,eax

   end;

   while GetTickCount < (t + 1000) do ;

   asm

   DB 0FH,031H // rdtsc

   mov nhi,edx

   mov nlo,eax

   end;

   Result := ((nhi * shr32 + nlo) - (mhi * shr32 + mlo)) / 1E6;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

   label1.Caption := FloatToStr(GetCpuSpeed) + 'mhz';

end;

 

暂时只是写了这么多,以后会逐步更新添加

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-980872/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7339269