//获取任务栏尺寸 procedure GetMonthDay(const ADate: TDateTime; var AMonthFirst, AMonthLast: TDateTime); var Year, Month, Day: Word; begin DecodeDate(ADate, Year, Month, Day); AMonthFirst := EncodeDate(Year, Month, 1); if Month + 1 > 12 then AMonthLast := EncodeDate(Year + 1, 1, 1) - 1 else AMonthLast := EncodeDate(Year, Month + 1, 1) - 1 end; procedure GetMonthDay(const ADate: TDateTime; var AMonthFirst, AMonthLast: TDateTime); var Year, Month, Day: Word; begin DecodeDate(ADate, Year, Month, Day); AMonthFirst := EncodeDate(Year, Month, 1); AMonthLast := EncodeDate(Year, Inc(Month), 1) - 1 end; //修改指定路径下的文件只读属性 function PathSetAttr(sFilePath: string): Boolean; var SearchRec: TSearchRec; begin Result := False; if Copy(sFilePath, Length(sFilePath) - 1, Length(sFilePath)) <> ’\’ then sFilePath := sFilePath + ’\’; if DirectoryExists(sFilePath) then begin if FindFirst(sFilePath+’*.*’, faAnyFile, SearchRec) = 0 then begin FileSetAttr(SearchRec.Name, 32); while FindNext(SearchRec) = 0 do FileSetAttr(SearchRec.Name, 32); end; Result := True; end; end; //为控件加边框 procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT; procedure TForm1.WMNCPaint(var Msg: TWMNCPaint); var dc: hDC; Pen: hPen; OldPen: hPen; OldBrush: hBrush; begin inherited; dc := GetWindowDC(Handle); msg.Result := 1; Pen := CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); OldPen := SelectObject(dc, Pen); OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH)); Rectangle(dc, 0, 0, Self.Width, Self.Height); SelectObject(dc, OldBrush); SelectObject(dc, OldPen); DeleteObject(Pen); ReleaseDC(Handle, Canvas.Handle); end; //制作透明窗体 procedure CreateParams(var Params: TCreateParams); override; //重载 CreateParams 过程的实现 procedure TForm1.CreateParams(var Params: TCreateParams); begin //先继承原来的 CreateParams 过程 inherited; //然后修改 Param.ExStyle 的值,使窗体具有透明效果 Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT; end; procedure TForm1.FormCreate(Sender: TObject); begin inherited; //将画布的笔刷样式改成 bsClear 以及时清除窗体原来的内容,这样 窗体就有透明效果 Canvas.Brush.Style := bsClear; end; //Memo 组件的光标定位 procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Lpos, Cpos, Linelength: integer; begin Lpos := SendMessage(Memo1.Handle, EM_LineFromChar, Memo1.SelStart, 0); Cpos := SendMessage(Memo1.Handle, EM_LineIndex, Lpos, 0); LineLength := SendMessage(Memo1.Handle, EM_LineLength, Cpos, 0); Cpos := Memo1.SelStart - Cpos; Label1.Caption := IntToStr(Lpos); Label2.Caption := IntToStr(Cpos); Label3.Caption := IntToStr(LineLength); end; //点击客户区也能拖动窗口 procedure WmNCHitTest(var Msg: TWMNCHitTest); message WM_NCHitTest; procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest); begin DefaultHandler(Msg); if Msg.Result = HTClient then Msg.Result := HTCaption; end; //自定义Memo控件的边界 procedure TForm1.Button1Click(Sender: TObject); var Rect: TRect; begin SendMessage(Memo1.Handle, EM_GETRECT, 0, LongInt(@Rect)); Rect.Left := 20; Rect.Top := 20; Rect.Right := Rect.Right - 19; Rect.Bottom := Rect.Bottom - 19; SendMessage(Memo1.Handle, EM_SETRECT, 0, LongInt(@Rect)); Memo1.Refresh; end; //在系统菜单上添加自定义菜单项 procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; const idMyFunc = $f200; procedure TForm1.FormCreate(Sender: TObject); begin AppendMenu(GetSystemMenu(Handle, False), MF_STRING, idMyFunc, ’我的系统菜单项’); end; procedure TForm1.WMSysCommand(var Msg: TWMSysCommand); begin inherited; if Msg.CmdType and $FFF0 = idMyFunc then ShowMessage(’我的系统菜单项’); end; COOLBAR内嵌TOOLBAR,但是TOOLBAR的按钮偏上的解决办法:把COOLBAR 的COOLBAND的BORDERSTYLE设为SINGLE。 另外,如果想把主菜单弄到TOOLBAR里面,只要把TOOLBAR的MENU设为主 菜单名,并把主菜单的AUTOMERGE设为TRUE即可。 ------------------------------------ listbox从文件中读取列表的操作 ListBox1.Items.LoadFromFile(ExtractFilePath (Application.ExeName)+’aaa.txt’); ListBox1.Items.Add(Edit1.Text); //添加了一个项目 ListBox1.Items.SaveToFile(ExtractFilePath(Application.ExeName) +’aaa.txt’); 删除项目ListBox1.Items.Delete(listbox1.itemindex); ------------------------------------ 判断窗体是否已经打开 if frmPriceInput <> nil then .... 注意:有时窗体虽然已经关闭,但没完全释放,最好在该窗体关闭的 CLOSE事件里加入 frmPrintInput = nil; ------------------------------------ 关闭MDI子窗口的方法 在子窗口的OnClose事件处理过程中加入如下代码 Action := caFree; Delphi为一个Form的关闭行为指定了四种方式,分别是: caNone -- 禁止Form被关闭 caHide -- Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序 访问。 caFree -- Form被关闭,并且释放其占用的资源。 caMinimize -- Form被最小化而不是被关闭,这是MDI子窗口的默认关 闭行为。 ------------------------------------ 系统配置文件 *.INI 的操作 头部要引用IniFiles 1、声明变量 Inifile:TiniFile; 2、指明路径 IniFile := TIniFile.Create(ExtractFilePath (Application.ExeName)+’option.ini’); 3、读取变量,注意变量有类型之分readstring,readinteger...等 titleBMPfile:=IniFile.ReadString (’TitleImage’,’FileName’,’’); //IniFile.ReadString(’组 名’,’变量’,’默认值’) IniFile.ReadInteger IniFile.ReadBool 4、写入或修改变量 IniFile.WriteString(’标题’,’变量1’,’值’); 5、用完后释放 IniFile.Free; ------------------------------------ 动态读取图象 Image1.Picture.LoadFromFile(titleBMPFile); ------------------------------------ fastreport自定义函数的用法 1、先在普通工程窗体上定义好函数 2、在frreport控件的userfunction中写入 if ansicomparetext( ’My_StrToRMB’ , Name ) = 0 then val:=My_StrToRMB(frparser.Calc(p1)); //MY_STRTORMB是函数名 //如果定义多个函数,就多来几个IF即可。 在报表设计视图中就可以调用这个函数了。 ------------------------------------ 数组是这样定义的 sbh:array [0..9999999,0..1] of string; ------------------------------------ treeview的用法 //先定义项目序数和节点 n: Integer; Node: TTreeNode; Node := Tree1.Selected; if (Node = nil) or (Node.StateIndex = -1) then Exit;//一般可以 把不作反应的列的stateindex定为-1 n := Node.StateIndex; ------------------------------------ Fields[] 通过索引返回字段,要自己选择返回的类型! FieldByName() 通过名字返回字段,要自己选择返回的类型! Fieldvalues[] 通过名字返回字段的值,自动化类型! ------------------------------------ 调用外部程序方法 用ShellExecute,在USES段加入SHELLAPI,使用时如: ShellExecute(handle,’open’,’c:\myapp\myapp.exe’,’- s’,’’,SW_SHOWNORMAL); 第一个参数为父窗口句柄; 第二个参数为打开方式(OPEN,PRINT两种); 第三个参数为执行文件全路径; 第四个参数为执行文件参数; 第五个参数为执行文件开始运行时的初始目录; 第六个参数为为执行文件运行方式 (SW_HIDE,SW_MAXIMIZE,SW_MINIMIZE, SW_RESTORE,SW_SHOW,SW_SHOWDEFAULT,SW_SHOWMAXIMIZED,SW_SHOWMINI MIZED, SW_SHOWMINNOACTIVE,SW_SHOWNA,SW_SHOWNOACTIVATE,SW_SHOWNORMAL); ------------------------------------ 判断文件是否存在 if not fileexists(’db2.mdb.bak’) then ... ------------------------------------ 判断按键 if Key=#13 then //如果回车则。。。 ------------------------------------ 退出 关闭窗口 close; 关闭程序:Application.Terminate; 退出事件 exit; ------------------------------------ 检测软件是否已在运行 if GetLastError = ERROR_ALREADY_EXISTS then... ------------------------------------ 定义函数是这样写的 function IsReadOnly(b: Boolean; colors: Tcolor): Boolean; ------------------------------------ fastreport直接打印 FrReport1.PrepareReport; //初始化 FrReport1.PrintPreparedReport(’1’,1,True,frAll); //打印 预览FrReport1.showreport; ------------------------------------ 找开浏览器,进入某站点。(或调用WINDOWS程序) 进入站点ShellExecute(Handle, PChar(’OPEN’), PChar (’http://www./downloads/index.asp’), nil, nil, SW_SHOWMAXIMIZED); 发送邮件ShellExecute(Handle, ’open’, PChar(’mailto:’ + edtemail.Text + ’?subject=’), nil, nil, SW_SHOW); ------------------------------------ 打开文件对话框 if OpenPictureDialog.Execute then ------------------------------------ 调用帮助文件 Application.HelpFile := ’..\..\Help\eBars.hlp’; ------------------------------------ 打开窗口 TForm1.Create(self).ShowModal; ------------------------------------ 取得当前执行程序的路径 FPath := ExtractFilePath(Application.ExeName); 或 FileName := ExtractFilePath(ParamStr(0)) + ’\MDB\电子通讯 录.mdb’; ------------------------------------ 当前路径 getcurrentdir ------------------------------------ 判断当前鼠标处于某个位置(TAG) case TComponent(Sender).Tag of 0: begin ... lbBarBackgroud.Caption := sCustomImage; end; 1: begin ... lbBarBackgroud.Caption := sCustomImage; end; 2: begin ... lbBarBackgroud.Caption := sCustomImage; end; ------------------------------------ 数据库连接 1、建立一个adoconnection控件,命名为conn 2、建立一个adodataset控件,命名为ds 然后就可以用以下语句连接并执行SQL查询(本例是access的数据库,带 密码)。 conn.ConnectionString:=’Provider=Microsoft.Jet.OLEDB.4.0;Data Source=’+getcurrentdir+’\data\pn.mdb;Persist Security Info=False;jet oledb:database password=80513’; conn.Connected:=true; ds.Active:=false; ds.CommandText:=’select 拜访日期,拜访时间,拜访客户,拜访地点, 谈话内容 from khbf order by 拜访日期 desc’; ds.Active:=true; ------------------------------------ ADODataSet1.State的用法 if ADODataSet1.State in [dsEdit,dsInsert] then ADODataSet1.Post ; ------------------------------------ ADOQuery.open和ADOQuery.execSQL的区别 用于存贮时如insert 只能用execSQL ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ 回车光标移到另一个输入框 if key=#13 then cmb_name.SetFocus; ------------------------------------ 播放声音 playsound(’c:\windows\media\start.wav’,0,SND_ASYNC); ------------------------------------ 列表框listbox增加项目 cmb_name.Items.Add(adotable1.Fieldvalues[’账号’]); ------------------------------------ listview用法 ListView.Selected := ListView.Items[0]; ListView.Selected.Focused := True; ListView.Selected.MakeVisible(False); ListView.Selected.Index ListView.Items.Count ListView.Items.Delete(3) //删除第3个项目 ListView.Items.Add.Caption:=’dddddddd’; //增加一个项目 ListView.Items.BeginUpdate; ListView.Items.EndUpdate ListView.Canvas.Font.Color := clGrayText; if ListView.Selected <> nil then。。。。。 //往listview添加项目 先定义 var itm: TListItem; 然后 listview.Items.Clear; itm := listview.Items.Add; itm.ImageIndex := 5; itm.Caption := Msg.Subject; itm.SubItems.Add(’aaaaa’); itm.SubItems.Add(’ffffff’); itm.SubItems.Add(’ffdfdfdf’); itm.SubItems.Add(’oooo’); ------------------------------------ 静态调用DLL的方法 有参数 procedure CreateSms(Text: Pchar);stdcall;External ’SmsLib.dll’; 无参数 procedure CreateSms;stdcall;External ’SmsLib.dll’; ------------------------------------ 确定、取消对话框作用 if application.MessageBox(’真的退出?’,’提示’,mb_okcancel) =idok then application.Terminate; //Terminate是终止程序 showmessage(’请先选中要修改的班级’); //这个是简单的显示提 示框 messagebox(self.Handle ,’价格输入不合法!’,’提示’,MB_OK or MB_ICONASTERISK); ------------------------------------ 调用窗体的步骤 先引用该窗体的单元,然后建立窗体,最后显示出来。 例1: use uxsgl; Application.CreateForm(TFmXsgl, FmXsgl); fmxsgl.ShowModal; 例2: Frm_LendDetail:=TFrm_LendDetail.Create(self); Try Frm_LendDetail.ShowModal; Finally Frm_LendDetail.Free; End; ------------------------------------ 数据库查询 先建立数据源,然后添加一个TADOQUERY adoquery1.SQL.Clear ; adoquery1.Close; adoquery1.SQL.Add(’select * from tkcb order by ckcb_kh’); adoquery1.Open; aaa=adoquery1.Fieldvalues[’ckcb_kc’]; //取出当前记录某字 段的值 adoquery1.Next; //下一记录 adoquery1.Close; //关闭查询 ------------------------------------ 判断键盘输入字符-chr(13)是回车 if key=chr(13) then bitbtn1.SetFocus; ------------------------------------ 时间格式 lblTime.Caption := FormatDateTime(’yyyymmdd hh:nn:ss’,Now); ------------------------------------ 表数据的添加添加 dmd是数据模块 tbl_zgdb是表名 with dmd.tbl_zgdb do begin Append; |
|