2007年4月13日 星期五

delphi的幾個技巧

內容來源: http://qiang82.cnblogs.com/

  1. 、判斷一個字串是否包含於另外一個字串的方法
    例如:if pos('ab','abcd')<>0 then
       messagedlg('ab是包含于abcd',mtConfirmation,[mbYes, mbNo],0);
    pos(obj,target) 在target字串中找出第一個出現obj的第一個字串位置,如果找不到,返回0
  2. 如何使窗口全屏,類似游戲一樣,而不是視窗的最大化!
    (1) BorderStyle 为 bsNone
    (2) Windowstate 为 wsMaximized
    (3) 離開時可加一個按鈕,寫上 close 即可退出。
  3. 數字格式化
    format('%8.2f',[123.456]) ==> ' 123.46'。
  4. 播放wav
    use mmsystem;
    SndPlaySound('hello.wav',SND_FILENAME or SND_SYNC);
  5. InputBox,InputQuery和ShowMessage函數
    uses dialogs;
    var s,s1:string;
      b:boolean;
    begin
      s:=trim(Inputbox('NewPassword','Password','masterkey'));
      b:=s<>''s1:=s;
      if b then
       b:=InputQuery('Confirm Password','Password',s1);
      if not b or (s1<>s) then
       ShowMessage('Password Failed');
    end;
  6. 將一個可视控件变成图形类型
    例如将一个带背景的LABEL变成一个TIMAGE图片类型,可以这样做:
    image1.width:=label1.width;
    image1.height:=label1.height;
    label1.perform(WM_PAINT,image1.Canvas.Handle,0);
  7. 如何得到字的ASCII值
    var: a:integer;
    string1:string;
    begin
      string1:='ABC';
    a:=byte(string[1]); {此时就得到'A'的ASCII值}
    end;
  8. 動態更新DBGrid的顏色
    例如,如果一个城市的人口大于200万,我们就让它显示为蓝色。使用的控件事件为DBGrid.OnDrawColumeCell:
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    if Table1.FieldByName('Population').AsInteger > 20000000 then
    DBGrid1.Canvas.Font.Color := clBlue;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
  9. 取得路徑中的文件名:
    ExtractFileName(Address.Text);
  10. 複制文件:
    CopyFile(pchar(strSourcePath),pchar(strSavePath),false);
    false表示如存在同名文件是否覆蓋。
  11. 复制文件夹:
    //1.1拷貝目錄:DoCopyDir
    function DoCopyDir(sDirName:String;sToDirName:String):Boolean;
    var
    F: TSearchRec;
    //hFindFile:Cardinal;
    t,tfile:String;
    sCurDir:String[255];
    FindFileData:WIN32_FIND_DATA;
    begin
    //先保存目前目錄
    sCurDir:=GetCurrentDir;
    ChDir(sDirName);
    F.FindHandle:=FindFirstFile('*.*',FindFileData);
    if F.FindHandle<>INVALID_HANDLE_VALUE then
    begin
    if not DirectoryExists(sToDirName) then //如果目錄不存在
    ForceDirectories(sToDirName); //強迫建立目錄
    repeat
    tfile:=FindFileData.cFileName;
    if (tfile='.') or (tfile='..') then
    Continue; //跳過兩個目錄
    if FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
    begin
    t:=sToDirName+'\'+tfile;
    if not DirectoryExists(t) then
    ForceDirectories(t);
    if sDirName[Length(sDirName)]<>'\' then
    DoCopyDir(sDirName+'\'+tfile,t)
    else
    DoCopyDir(sDirName+tfile,sToDirName+tfile);
    end
    else
    begin
    t:=sToDirName+'\'+tFile;
    CopyFile(PChar(tfile),PChar(t),false);
    end;
    until FindNextFile(F.FindHandle,FindFileData)=false;
    FindClose(F);
    end
    else
    begin
    ChDir(sCurDir);
    result:=false;
    exit;
    end;
    //回到原來的目錄下
    ChDir(sCurDir);
    result:=true;
    end;

    //---- 1.2拷貝目鍵的函數:CopyDir
    function CopyDir(sDirName:String;sToDirName:string):Boolean;
    begin
    if Length(sDirName)<=0 then exit; //拷貝 Result:=DoCopyDir(sDirName,sToDirName); end;

沒有留言: