飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2814|回复: 0

小知识,如Form淡出、捕捉Form最小化

[复制链接]
  • TA的每日心情
    开心
    2019-9-19 16:05
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2007-2-8 10:29:10 | 显示全部楼层 |阅读模式
    (*)Form淡出
    1)AnimateWindow(Form1.Handle,1000,AW_BLEND);//淡入
      AnimateWindow(Form1.Handle,1000,AW_HIDE or AW_BLEND);//淡出
    2)窗体有AlphaBlend属性和AlphaBlendValue属性,将AlphaBlend属性设为True,然后在Timer组件中随着时间改变AlphaBlendValue的值(0-255)即可
      AlphaBlendValue:=1;//窗体透明

    (*)捕捉Form最小化
    定义一个过程
    public
        procedure onminsize(var msg:twmsyscommand);message wm_syscommand;
    procedure TForm1.onminsize(var msg: twmsyscommand);
    begin
      if msg.CmdType=SC_MINIMIZE then
      begin
        form1.Width:=100;
        form1.Height:=100;
        form1.Left:=100;
        form1.Top:=300;
        exit;
      end;
      inherited;
    end;

    (*)createGuid(out newGUID)
       s:=GUIDToString(newGUID)

    (*)四舍五入取正: y:=Round(x)

    (*) string:=StringReplace(string1,'*','#',[rfReplaceAll]);

    (*)把一个string用单引号括起来作为string返回
      QuotedStr(const S: string): string

    (*) 如何让DBGRID中的内容分页显示
      ADODataSet1.Open;
      ADODataSet1.Recordset.PageSize := 10;           //显示第一页   
      ADODataSet1.Recordset.AbsolutePosition := 1;
      ADODataSet1.Recordset.PageSize := 10;           //显示第二页
      ADODataSet1.Recordset.AbsolutePosition := 11;

    (*)实现解析IP地址为主机域名
    uses WinSock
    过程如下:
      function IPAddrToName(IPAddr : String): String;
      var
        SockAddrIn: TSockAddrIn;
        HostEnt: PHostEnt;
        WSAData: TWSAData;
      begin
        WSAStartup($101, WSAData);
        SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));
        HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
        if HostEnt<>nil then
        begin
          result:=StrPas(Hostent^.h_name)
        end
        else
        begin
          result:='';
        end;
      end;
    使用函数:
    var
      Name: string;
    begin
      Name := InputBox('输入对方主机IP', '主机IP地址:', '');
      showmessage(IpAddrToName(Name));
    end;

    (*)去掉twebbrowser右边的ScrollBar
    WebBrowser1.oleobject.Document.body.Scroll := 'no';

    (*)TTreeView的结点如何具有CheckBox
    TreeView有个Images属性,做三张小图片:
    全选中、部分选中、不选状态(直接拍下CheckBox三种状态的图片在加工一下就可以了),然后在点击事件中根据具体情况设置TTreeNodes的ImageIndex就OK了。
    重载TreeView的CreateParams:
    type
      TCheckBoxTreeView = class(TTreeView)
      protected
        procedure CreateParams(var Params: TCreateParams); override;
      end;

    procedure TCheckBoxTreeView.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.Style:=Params.Style or TVS_CHECKBOXES;
      { TVS_CHECKBOXES declared in CommCtrl }
    end;

    如果要Check这个CheckBox,可以用下面的代码:
    function IsNodeChecked(Node :TTreeNode) :Boolean;
    const
      TVIS_CHECKED = $2000;
    var
      TvItem :TTVItem;
    begin
      TvItem.Mask  := TVIF_STATE;
      TvItem.hItem := Node.ItemId;
      TreeView_GetItem(Node.TreeView.Handle, TvItem);
      Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;
    end;

    procedure SetNodeChecked(Node :TTreeNode; Checked :Boolean);
    const
      TVIS_CHECKED = $2000;
    var
      TvItem :TTVItem;
    begin
      FillChar(TvItem, SizeOf(TvItem), 0);
      with TvItem do begin
        hItem     := Node.ItemId;
        Mask      := TVIF_STATE;
        StateMask := TVIS_STATEIMAGEMASK;
        if Checked then
          TvItem.State :=TVIS_CHECKED
        else
          TvItem.State :=TVIS_CHECKED shr 1;
        TreeView_SetItem(Node.TreeView.Handle, TvItem);
      end;
    end;
    可以做成事件和封装成一个类:
    private OldState :Boolean;

    procedure Change(Node: TTreeNode); override;
    begin
      inherited Change(Node);
      OldState := IsNodeChecked(Node);
    end;

    procedure Click; override;
    var
      NewState :Boolean;
    begin
      inherited Click;
      NewState := IsNodeChecked(Self.Selected);
      if NewState = OldState then Exit;
      if (NewState) and Assigned(OnNodeChecked) then OnNodeChecked()
      else if (not NewState) and Assigned(OnNodeUnChecked) then
    OnNodeUnChecked()

    // OnNodeChecked & OnNodeUnchecked will be events that you declare
    end;

    (*)如何将stringgrid中每列的数据居中显示?
      (1)将stringgrid的defaultdraw设为:false;
      (2)procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;  Rect: TRect; State: TGridDrawState);
    var
      sText: string;
    begin
      with StringGrid1 do
      begin
        sText := Cells[ACol, ARow];
        if sText <> '' then
        begin
          Canvas.FillRect(Rect);
          DrawText(Canvas.Handle, PChar(sText), Length(sText), Rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
        end;
      end;
    end;

    DLL获得自己所在的路径:Windows.GetModuleFileName(HInstance,lp, 100);

    Caption := Copy(Edit1.Text, 3, MaxInt); //建议,少计算一次

    取得explorer句柄,线程
    GetWindowThreadProcessID(FindWindow('ExploreWClass', nil), nil)
    FindWindow('ExploreWClass', nil)

    调用记事本
    uses .... shellapi;
    shellexecute(handle,nil,pchar('c:\windows\notepad'),nil,nil,sw_shownormal);

    用回车代替TAB  在onkeypress  写
        if  key=#13 then perform(WM_NEXTDLGCTL,0,0);


    fieldName like "%'+gA_FindValue+'%"'

    formatFloat('0.00',doubleValue);  //格式化 Float ---> string

    mailto:[email protected]?subject=subjectTille        ( &Attach=C:\Config.sys )

    //返回给定月份的天数
    uses SysUitls; // IsLeapYear
    ...
    function DaysOfMonth(Date: TDateTime): integer;
    var y, m, d: Word;
    begin
       DecodeDate( Date, y, m, d );
       case m of
         2:  if IsLeapYear(y) then
               Result:=29 else Result:=28;
         1,3,5,7,8,10,12: Result:=31;
         4,6,9,11:        Result:=30;
      end;
    end;

    //触发一个错误
      raise Exception.Create('delete table Error');

    //获取 IP 地址  (getIP.exe)
    procedure TForm1.Button1Click(Sender: TObject);
    var
      wVersionRequested : WORD;
      wsaData : TWSAData;
      p : PHostEnt;
      s : array[0..128] of char;
      p2 : pchar;
      OutPut:array[0..100] of char;
    begin
    {Start up WinSock}
         wVersionRequested := MAKEWORD(1, 1);
         WSAStartup(wVersionRequested, wsaData);

    {Get the computer name}
         GetHostName(@s, 128);
         p := GetHostByName(@s);

    {Get the IpAddress}
         p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
         StrPCopy(OutPut,'Hostname: '+Format('%s', [p^.h_Name])+#10#13+
                           'IP address: '+Format('%s',[p2])
                           );
         WSACleanup;
         MessageBox(0,OutPut,'Get IP ! - this is your IP Address',mb_ok or mb_iconinformation);
    end;
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表