本人今天把自已以前的一些delphi编程经验进行个小总结,总结完后突有一个
这样的想法:如果我把这些总结发给网上的delphi朋友,而他们如果也有些自已
的delphi编程小结,也发给我(如果愿意的话),这样大家的进步肯定是很快的。  
 本人email:[email protected]
(1).按下ctrl和其它键之后发生一事件。
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (ssCtrl in Shift) and (key =67) then
         showmessage('keydown Ctrl+C');
    end;
(2).Dbgrid中用Enter键代替Tab键.
   procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
   begin
     if Key = #13 then
     if ActiveControl = DBGrid1 then
     begin
        TDBGrid(ActiveControl).SelectedIndex := TDBGrid(ActiveControl).SelectedIndex + 1;
        Key := #0;
     end;
   end;
(3).Dbgrid中选择多行发生一事件。
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    booklist:Tbooklist;
    book:tbookstr;
    begin
      book:=adoquery1.Book;
      booklist:=dbgrid1.SelectedRows;
      try
      begin
        for i:=0 to booklist.Count-1 do
        begin
          adoquery1.Book:=booklist[i];
          with adoquery1 do
          begin
            edit;
            fieldbyname('mdg').AsString:=edit2.Text;
            post;
          end;
        end;
      end;
      finally
      adoquery1.Book:=book;
      end;
    end;
(4).Form的一个出现效果。 
    procedure TForm1.Button1Click(Sender: TObject);
    var
    r:thandle;
    i:integer;
    begin
      for i:=1 to trunc(width/1.414) do
      begin
        r:=CreateEllipticRgn(trunc(width/2)-i,trunc(height/2)-i,trunc(width/2)+i,trunc(height/2)+i);
        SetWindowRgn(handle,r,true);
        Application.ProcessMessages;
        sleep(1);
      end;
    end;
(5).用Enter代替Tab在编辑框中移动隹点。
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if key=#13 then
        begin
          if not (Activecontrol is Tmemo) then
          begin
            key:=#0;
            keybd_event(vk_tab,mapvirtualkey(vk_tab,0),0,0);
          end;
        end;
    end;
(6).Progressbar加上色彩。
    const
    {$EXTERNALSYM PBS_MARQUEE}
    PBS_MARQUEE = 08;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    uses
    CommCtrl;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // Set the Background color to teal
      Progressbar1.Brush.Color := clTeal;
      // Set bar color to yellow
      SendMessage(ProgressBar1.Handle, PBM_SETBARCOLOR, 0, clYellow);
    end;
(7).住点移动时编辑框色彩不同。
    procedure TForm1.Edit1Enter(Sender: TObject);
    begin
      (sender as tedit).Color:=clred;
    end;
    procedure TForm1.Edit1Exit(Sender: TObject);
    begin
      (sender as tedit).Color:=clwhite;
    end;
(8).备份和恢复
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
      begin
        try
          adoconnection1.Connected:=False;
          adoconnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=FRIEND-YOFZKSCO;'+
          'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=FRIEND-YOFZKSCO;Use Encryption for Data=False;Tag with column collation when possible=False';
          adoconnection1.Connected:=True;
          with adoQuery1 do
          begin
            Close;
            SQL.Clear;
            SQL.Add('Backup DataBase sfa to disk ='''+opendialog1.FileName+'''');
            ExecSQL;
          end;
        except
          ShowMessage('±?·Y꧰ü');
        Exit;
        end;
      end;
      Application.MessageBox('1§?2?ú£?êy?Y±?·Y3é1|','ìáê?',MB_OK + MB_ICONINFORMATION);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
      begin
        try
          adoconnection1.Connected:=false;
          adoconnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=FRIEND-YOFZKSCO;'+
          'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=FRIEND-YOFZKSCO;Use Encryption for Data=False;Tag with column collation when possible=False';
          adoconnection1.Connected:=true;
          with adoQuery1 do
          begin
            Close;
            SQL.Clear;
            SQL.Add('Restore DataBase sfa from disk ='''+opendialog1.FileName+'''');
            ExecSQL;
         end;
       except
         ShowMessage('???′꧰ü');
         Exit;
       end;
     end;
     Application.MessageBox('1§?2?ú£?êy?Y???′3é1|','ìáê?',MB_OK + MB_ICONINFORMATION);
    end;

解决方案 »

  1.   

    (9).查找局域网上的sqlserver报务器。
        uses Comobj;
        procedure TForm1.Button1Click(Sender: TObject);
        var
        SQLServer:Variant;
        ServerList:Variant;
        i,nServers:integer;
        sRetValue:String;
        begin
          SQLServer := CreateOleObject('SQLDMO.Application');
          ServerList:= SQLServer.ListAvailableSQLServers;
          nServers:=ServerList.Count;
          for i := 1 to nservers do
          ListBox1.Items.Add(ServerList.Item(i));
          SQLServer:=NULL;
          serverList:=NULL;
        end;
    (10).窗体打开时的淡入效果。
        procedure TForm1.FormCreate(Sender: TObject);
        begin
          AnimateWindow (Handle, 400, AW_CENTER);
        end;
    (11).动态创建窗体。
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          try
            form2:=Tform2.Create(self);
            form2.ShowModal;
          finally
            form2.Free;
          end;
        end;
        procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
        begin
          action:=cafree;
        end;
        procedure TForm1.FormDestroy(Sender: TObject);
        begin
          form1:=nil;
        end;
    (12).复制文件。
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          try
          copyfileA(pchar('C:\AAA.txt'),pchar('D:\AAA.txt'),false);
          except
          showmessage('sfdsdf');
          end;
        end;
    (13).复制文件夹。
        uses shellAPI;
        procedure TForm1.Button1Click(Sender: TObject);
        var
           lpFileOp: TSHFileOpStruct;
        begin
          with lpFileOp do
          begin
            Wnd:=Self.Handle;
            wfunc:=FO_COPY;
            pFrom:=pchar('C:\AAA');
            pTo:=pchar('D:\AAA');
            fFlags:=FOF_ALLOWUNDO;
            hNameMappings:=nil;
            lpszProgressTitle:=nil;
            fAnyOperationsAborted:=True;
         end;
         if SHFileOperation(lpFileOp)<>0 then
         ShowMessage('删除失败');
        end;
    (14).改变Dbgrid的选定色。
        procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
        Field: TField; State: TGridDrawState); 
        begin
          if gdSelected in state then
          SetBkColor(dbgrid1.canvas.handle,clgreen)
          else
          setbkcolor(dbgrid1.canvas.handle,clwhite);
          dbgrid1.Canvas.TextRect(rect,0,0,field.AsString);
          dbgrid1.Canvas.Textout(rect.Left,rect.Top,field.AsString);
        end;
    (15).检测系统是否已安装了ADO。
        uses registry;
        function Tform1.ADOInstalled:Boolean;
        var
        r:TRegistry;
        s:string;
        begin
          r := TRegistry.create;
          try
          with r do
          begin
            RootKey := HKEY_CLASSES_ROOT;
            OpenKey( '\ADODB.Connection\CurVer', false );
            s := ReadString('');
            if s <> '' then Result := True
            else Result := False;
            CloseKey;
          end;
          finally
           r.free;
          end;
        end;
        procedure TForm1.Button1Click(Sender: TObject);
        begin
         if ADOInstalled then showmessage('this computer has installed ADO');
        end;
    (16).取利主机的ip地址。
        uses winsock;
        procedure TForm1.Button1Click(Sender: TObject);
        var
        IP:string;
        IPstr:String;
        buffer:array[1..32] of char;
        i:integer;
        WSData:TWSAdata;
        Host:PHostEnt;
        begin
          if WSAstartup(2,WSData)<>0 then
          begin
            showmessage('WS2_32.DLL3?ê??ˉ꧰ü.');
            exit;
          end;
          try
            if GetHostname(@buffer[1],32)<>0 then
            begin
              showmessage('??óDμ?μ??÷?ú??.');
            exit;
          end;
          except
            showmessage('??óD3é1|·μ???÷?ú??');
            exit;
          end;
          Host:=GetHostbyname(@buffer[1]);
          if Host=nil then
          begin
            showmessage('IPμ??·?a??.');
            exit;
          end
          else
          begin
            edit2.Text:=Host.h_name;
            edit3.Text:=chr(host.h_addrtype+64);
            for i:=1 to 4 do
            begin
             IP:=inttostr(ord(host.h_addr^[i-1]));
             if i<4 then
             ipstr:=ipstr+IP+'.'
            else
             edit1.Text:=ipstr+ip;
            end;
           end;
           WSACleanup;
        end;
    (17).取得计算机名。
        function tform1.get_name:string;
        var  ComputerName: PChar;  size: DWord;
        begin
            GetMem(ComputerName,255);
            size:=255;
            if GetComputerName(ComputerName,size)=False then
               result:=''
            else
               result:=ComputerName;
            FreeMem(ComputerName);
        end;
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          label1.Caption:=get_name;
        end;
      

  2.   

    (18).取得硬盘序列号。
        function tform1.GetHDSerialNumber: LongInt;    
        {$IFDEF WIN32}
        var 
          pdw : pDWord; 
          mc, fl : dword; 
        {$ENDIF} 
        begin 
          {$IfDef WIN32} 
          New(pdw); 
          GetVolumeInformation('c:\',nil,0,pdw,mc,fl,nil,0); 
          Result := pdw^;
          dispose(pdw); 
         {$ELSE}
          Result := GetWinFlags;
          {$ENDIF} 
        end;
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          edit1.Text:=inttostr(gethdserialnumber);
        end;
    (19).限定光标移动范围。
        procedure TForm1.Button1Click(Sender: TObject);
        var
        rect1:trect;
        begin
          rect1:=button2.BoundsRect;
          mapwindowpoints(handle,0,rect1,2);
          clipcursor(@rect1);
        end;
        procedure TForm1.Button2Click(Sender: TObject);
        var
        screenrect:trect;
        begin
          screenrect:=rect(0,0,screen.Width,screen.Height);
          clipcursor(@screenrect);
        end;
    (20).限制edit框只能输入数字。
        procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
        begin
          if not (key in ['0'..'9','.',#8]) then
          begin
            key:=#0;
            Messagebeep(0);
          end;
        end;
    (21).dbgrid中根据任一条件某一格变色。
        procedure TForm_main.DBGridEh1DrawColumnCell(Sender: TObject;
        const Rect: TRect; DataCol: Integer; Column: TColumnEh;
        State: TGridDrawState);
        begin
          if (trim(DataModule1.ADOQuery1.FieldByName('dczt').AsString)='OK') then
          begin
            if datacol=6 then
            begin
              DbGrideh1.Canvas.Brush.Color:=clGradientActiveCaption;
              DbGrideh1.DefaultDrawColumnCell(Rect,datacol,column,state);
            end;
          end;
        end;
    (22).打开word文件。
        procedure TfjfsglForm.SpeedButton4Click(Sender: TObject);
        var
        MSWord: Variant;
        str:string; 
        begin
          if trim(DataModule1.adoquery27.fieldbyname('fjmc').asstring)<>'' then
          begin
            str:=trim(DataModule1.ADOQuery27.fieldbyname('fjmc').AsString);
            MSWord:= CreateOLEObject('Word.Application');//
            MSWord.Documents.Open('d:\Program Files\Common Files\Sfa\'+str, True);//
            MSWord.Visible:=1;//
            str:='';
            MSWord.ActiveDocument.Range(0, 0);//
            MSWord.ActiveDocument.Range.InsertAfter(str);//?úWord?D???ó×?·?'Title'
            MSWord.ActiveDocument.Range.InsertParagraphAfter;
          end
          else
          showmessage('');
        end;
    (23).word文件传入和传出数据库。
        uses IdGlobal;
        procedure TdjhyForm.SpeedButton2Click(Sender: TObject);
        var
        sfilename:string;
        function BlobContentTostring(const Filename:string):string;
        begin
          with Tfilestream.Create(filename,fmopenread)  do
          try
            setlength(result,size);
            read(pointer(result)^,size);
          finally
            free;
          end;
        end;
        begin
          if opendialog1.Execute then
          begin
            sfilename:=opendialog1.FileName;
            DataModule1.ADOQuery14.Edit;
            DataModule1.ADOQuery14.FieldByName('word').AsString:=blobcontenttostring(sfilename);
            DataModule1.ADOQuery14.Post;
          end;
        end;
        procedure TdjhyForm.SpeedButton1Click(Sender: TObject);
        var
        sfilename:string;
        bs:Tadoblobstream;
        begin
          bs:=Tadoblobstream.Create(TBLOBfield(DataModule1.ADOQuery14.FieldByName('word')),bmread);
          try
            sfilename:=extractfilepath(application.ExeName)+trim(DataModule1.adoquery14.fieldbyname('hybh').AsString);
            sfilename:=sfilename+'.'+'doc';
            bs.SaveToFile(sfilename);
            try
              djhyopenform:=Tdjhyopenform.Create(self);
              djhyopenform.olecontainer1.CreateObjectFromFile(sfilename,false);
              djhyopenform.OleContainer1.Iconic:=true;
              djhyopenform.ShowModal;
            finally
              djhyopenform.Free;
            end;
          finally
            bs.free;
          end;
        end;
    (24).中文标题的提示框。
        procedure TdjhyForm.SpeedButton5Click(Sender: TObject);
        begin
          if Application.MessageBox('', Mb_YesNo + Mb_IconWarning) =Id_yes then DataModule1.ADOQuery14.Delete;
        end;
    (25).运行一应用程序文件。
        WinExec('HH.EXE D:\Program files\common files\MyshipperCRM e-sales help\MyshipperCRM e-sales help.chm',SW_NORMAL);
      

  3.   

    谢谢楼主不过,这样也称"一生delphi编程经验"是不是太......??????
      

  4.   

    to : Eastunfail(恶鱼杀手) 
    能不能把不完善的地方指点出来?
      

  5.   

    一生经验应该是夸张的说法,我不信楼主就这么25招吧,但你是好人,谢谢!
    [email protected]
      

  6.   

    真是好人,发一份给我[email protected]
    以后多交流,我已经添加你的我的QQ里面了
      

  7.   

    楼主:多谢各位. 现在谁人能来帮我?
    (2003-06-06 14:23:31)   delphi_8.0
    在quickreport可以实现这样的功能: 在qrreport里放一个qrlabel1,后通过代码如qrlabel1.caption:=DataModule1.adoquery1.fields[0].asstring来动态显视qrlable1的值.
    这在fastreport里又是如何实现呢?在fastreport里放一个text,好象用代码动态控制不了呵.如何动态实现text的值?
      

  8.   

    我也收集了一些,没有分类,欢迎大家交流。
    http://freehost19.websamba.com:81/soaringsouth/list.asp?boardid=7
      

  9.   

    我也帮忙顶一下
    顺便也发一个
    http://expert.csdn.net/Expert/topic/1830/1830978.xml?temp=.245907
      

  10.   

    用过COM的请进来——我被一个PSafeArray类型的参数搞晕了......巨急!http://expert.csdn.net/Expert/topic/1882/1882915.xml?temp=.7844507