Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:WIN系统    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  Form淡出、捕捉Form最小化  
 

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

关键字/核心提示:[标签:副标题]  (*)Form淡出  1)AnimateWindow(Form1.Handle,1000, AW_BLEND);//淡入  AnimateWindow(Form1.Handle,1000,AW_HIDEorAW_BLEND);//淡出  2)窗体有AlphaBlend属性和AlphaBlendVa...

  (*)Form淡出
  1)AnimateWindow(Form1.Handle,1000,AW_BLEND);//淡入
  AnimateWindow(Form1.Handle,1000,AW_HIDEorAW_BLEND);//淡出
  2)窗体有AlphaBlend属性和AlphaBlendValue属性,将AlphaBlend属性设为True,然后在Timer组件中随着时间改变AlphaBlendValue的值(0-255)即可
  AlphaBlendValue:=1;//窗体透明

  (*)捕捉Form最小化
  定义一个过程
  public
  procedureonminsize(varmsg:twmsyscommand);messagewm_syscommand;
  procedureTForm1.onminsize(varmsg:twmsyscommand);
  begin
  ifmsg.CmdType=SC_MINIMIZEthen
  begin
  form1.Width:=100;
  form1.Height:=100;
  form1.Left:=100;
  form1.Top:=300;
  exit;
  end;
  inherited;
  end;

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

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

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

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

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

  (*)实现解析IP地址为主机域名
  usesWinSock
  过程如下:
  functionIPAddrToName(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);
  ifHostEnt<>nilthen
  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
  procedureCreateParams(varParams:TCreateParams);override;
  end;

  procedureTCheckBoxTreeView.CreateParams(varParams:TCreateParams);
  begin
  inherited;
  Params.Style:=Params.StyleorTVS_CHECKBOXES;
  {TVS_CHECKBOXESdeclaredinCommCtrl}
  end;

  假如要Check这个CheckBox,可以用下面的代码:
  functionIsNodeChecked(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.StateandTVIS_CHECKED)=TVIS_CHECKED;
  end;

  procedureSetNodeChecked(Node:TTreeNode;Checked:Boolean);
  const
  TVIS_CHECKED=$2000;
  var
  TvItem:TTVItem;
  begin
  FillChar(TvItem,SizeOf(TvItem),0);
  withTvItemdobegin
  hItem:=Node.ItemId;
  Mask:=TVIF_STATE;
  StateMask:=TVIS_STATEIMAGEMASK;
  ifCheckedthen
  TvItem.State:=TVIS_CHECKED
  else
  TvItem.State:=TVIS_CHECKEDshr1;
  TreeView_SetItem(Node.TreeView.Handle,TvItem);
  end;
  end;
  可以做成事件和封装成一个类:
  privateOldState:Boolean;

  procedureChange(Node:TTreeNode);override;
  begin
  inheritedChange(Node);
  OldState:=IsNodeChecked(Node);
  end;

  procedureClick;override;
  var
  NewState:Boolean;
  begin
  inheritedClick;
  NewState:=IsNodeChecked(Self.Selected);
  ifNewState=OldStatethenExit;
  if(NewState)andAssigned(OnNodeChecked)thenOnNodeChecked()
  elseif(notNewState)andAssigned(OnNodeUnChecked)then
  OnNodeUnChecked()

  //OnNodeChecked&OnNodeUncheckedwillbeeventsthatyoudeclare
  end;

  (*)如何将stringgrid中每列的数据居中显示?
  (1)将stringgrid的defaultdraw设为:false;
  (2)procedureTForm1.StringGrid1DrawCell(Sender:TObject;ACol,ARow:Integer;Rect:TRect;State:TGridDrawState);
  var
  sText:string;
  begin
  withStringGrid1do
  begin
  sText:=Cells[ACol,ARow];
  ifsText<>''then
  begin
  Canvas.FillRect(Rect);
  DrawText(Canvas.Handle,PChar(sText),Length(sText),Rect,DT_CENTERorDT_VCENTERorDT_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:windowsotepad'),nil,nil,sw_shownormal);

  用回车代替TAB在onkeypress写
  ifkey=#13thenperform(WM_NEXTDLGCTL,0,0);

  
  fieldNamelike"' gA_FindValue '"'

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

  mailto:whj@aa.com?subject=subjectTille(&Attach=C:Config.sys)

  //返回给定月份的天数
  usesSysUitls;//IsLeapYear
  ...
  functionDaysOfMonth(Date:TDateTime):integer;
  vary,m,d:Word;
  begin
  DecodeDate(Date,y,m,d);
  casemof
  2:ifIsLeapYear(y)then
  Result:=29elseResult:=28;
  1,3,5,7,8,10,12:Result:=31;
  4,6,9,11:Result:=30;
  end;
  end;

  //触发一个错误
  raiseException.Create('deletetableError');

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

  {Getthecomputername}
  GetHostName(@s,128);
  p:=GetHostByName(@s);

  {GettheIpAddress}
  p2:=iNet_ntoa(PInAddr(p^.h_addr_list^)^);
  StrPCopy(OutPut,'Hostname:' Format('s',[p^.h_Name]) #10#13
  'IPaddress:' Format('s',[p2])
  );
  WSACleanup;
  MessageBox(0,OutPut,'GetIP!-thisisyourIPAddress',mb_okormb_iconinformation);
  end;

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站