2011年7月21日
摘要: 1 function GetActiveWindowText: string; 2 3 var 4 hnd: HWND; 5 6 stlen: Integer; 7 8 begin 9 10 hnd := GetForegroundWindow;11 12 stlen := GetWindowTextLength(hnd);13 14 SetLength(Result, stlen);15 16 GetWindowText(hnd, PChar(Result), stlen);17 18 end; 顺便一提,GetActiveWindow只能得到调用进程内的窗体Handle. 阅读全文
posted @ 2011-07-21 22:47 solokey 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 用起来还真的挺麻烦. 1 const 2 ColorPrefix = 'Color'; 3 4 var 5 6 i: integer; 7 8 begin 9 10 for i := 0 to 15 do11 12 ColorDialog1.CustomColors.Values[ColorPrefix + Char(Ord('A') + i)] := IntToHex(Color_Ary[i], 8); 13 14 end; 阅读全文
posted @ 2011-07-21 22:44 solokey 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 懒得修改了。参数里应该再加一个字段名称,有兴趣的修改一下。。。目前是根据VersionNO来判断,读的时候也可以根据数据库中流的长度来比较。。最好是通过外界手段。。自己控制吧。。。只要是连续内存的东西,都可以拿来存... 1 function TDataModuleDataBase.LoadRecFromDB(const aName, TableName: string; 2 var Rec; RecSize: Integer): Boolean; 3 var 4 MS: TMemoryStream; 5 begin 6 Result := False; 7 if Trim(aName)=&# 阅读全文
posted @ 2011-07-21 22:42 solokey 阅读(438) 评论(0) 推荐(0) 编辑
摘要: OnMouseUp1 var2 aPoint: TPoint;3 begin4 if Button = mbLeft then begin5 GetCursorPos(aPoint);6 PopupMenu.Popup(aPoint.x , aPoint.y);7 end;8 end; 阅读全文
posted @ 2011-07-21 22:41 solokey 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 允许多选的ListBox需要加判断.可以参考被注释掉的代码.不再赘述. 1 //OnMouseUp: 2 3 var 4 APoint: TPoint; 5 Index: Integer; 6 begin 7 if Button=mbRight then 8 begin 9 APoint.x := X;10 APoint.y := Y;11 Index := ListBox.ItemAtPos(APoint, True);12 {if (ListBox.SelCount <= 1) and (Index >= 0) then begin13 SelectedList 阅读全文
posted @ 2011-07-21 22:39 solokey 阅读(821) 评论(0) 推荐(0) 编辑
摘要: sheet的第一行被ADO读为表名.其他操作和其他数据库类似.1 ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +2 'Data Source=' + TargetXlsFileName + ';Mode=Share Deny None;Extended Properties="Excel 8.0;IMEX=1";' +3 'Persist Security Info=False;Jet OLEDB 阅读全文
posted @ 2011-07-21 22:37 solokey 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 调用时1 //右侧显示2 3 SetMainMenuAlignment(MainMenu1, True);4 5 //左侧显示6 7 SetMainMenuAlignment(MainMenu1, False); 不多说了....这个东西貌似也没什么实际用途...无聊写着玩吧.. 1 //============================无敌分割线===================== 2 3 //将某个MenuItem(包括其右侧所有MenuItem),移动至右侧 4 5 procedure SetMenuItemAlignment(MainMenu: TMainMenu; Men 阅读全文
posted @ 2011-07-21 22:32 solokey 阅读(315) 评论(0) 推荐(0) 编辑
摘要: MIDAS中不可以传递自定义的结构体,或者数据流之类的.可以借助Variant来实现这一功能. 1 //将VarArray转换成结构体,这种转换只需要设计接口时传回Variant和Rec的Size就可以了. 2 3 procedure VarAryToRec(aVar: Variant; const Size:Integer; var Rec); 4 var 5 pb: PByteArray; 6 i: Integer; 7 begin 8 FillChar(Rec, Size, 0); 9 pb := @Rec;10 for i := 0 to Size - 1 do begin11 Pb^ 阅读全文
posted @ 2011-07-21 22:28 solokey 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 一般的寻找某个集合的子集组合,都是使用递归..找到了一个有趣的算法,实现了连续自然数的子集组合算法...稍微修改一下,就可以实现任意集合的子集组合查找.组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中。 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为 “01”组合,同时将其左边的所有“1”全部移动到数组的最左端。 当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得 到了最后一个组合。例如求5中选3的组合: 1 1 阅读全文
posted @ 2011-07-21 22:25 solokey 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 1 //====================================================================== 2 3 function ModBusCRC(Data: string): string; //生成modbus CRC数据 4 var 5 CRC16Lo, CRC16Hi, CL, CH, UseHi, UseLo: Dword; 6 i, index: integer; 7 begin 8 CRC16Lo := $FF; //CRC16Lo为CRC寄存器低8位 9 CRC16Hi := $FF; //CRC16Hi为CRC寄存器高8位10. 阅读全文
posted @ 2011-07-21 22:22 solokey 阅读(958) 评论(0) 推荐(0) 编辑