随笔分类 - Delphi
Delphi
简单的矩阵计算(结构体,静态数组)
摘要:有个需求需要用到矩阵工具..从十几年前的资料里找到了一个矩阵计算,但是是用类来实现的,改写了一下,改成结构体.只做了简单测试,发现问题欢迎告诉我... 1 unit MatrixCal; 2 3 interface 4 5 uses 6 Windows, SysUtils; 7 8 const 9
阅读全文
最小二乘法 曲线拟合
摘要:最近有个需求,要拟合一些数据采集通道的修正结果,由于数据量大,需要自己写软件处理,于是上网找了个现成的..bug较多,基本发现的bug都修复了,增加了一些新的功能.只适用于 y = m0 + m1*x + m2*x^2 +....+mn*x^n 这一个函数的拟合.阶数可以自行定义,也可以根据判断最接近1的R来找到最合适的阶数.最大阶数为20.一样会送上demo,以及全部源码.demo里的数据为r141b(制冷剂)的饱和压力温度.7次方的公式就可以比较完美的拟合了.功能实现unit的pas,原作者的版权声明基本都在...修改者-我的声明也在.嘿嘿,貌似一次上传不完,分段了: 1 unit CYH
阅读全文
TStream与内存段相互转换
摘要:刚才有人问起..顺手写的.他是用于DLL,所以我多写了2个函数.在DLL里提供内存指针输出,一定要记得提供相应的内存释放函数.有借有还,再借不难...老规矩..下面是demo 1 var 2 MS: TMemoryStream; 3 bytes: PByte; 4 size: Integer; 5 begin 6 MS := TMemoryStream.Create; 7 MS.LoadFromFile('d:\1.rar'); 8 size := StreamToBytes(MS, bytes); 9 10 MS.Clear;11 12 BytesToStream(bytes
阅读全文
打开资源管理器,并将焦点指向某文件
摘要:uses ShellAPI;var FileName: string;begin FileName := 'D:\tools\cpu-z\cpuz.exe'; ShellExecute(0, 'Open' ,'explorer.exe', PChar('/e,/select,' + FileName), nil, SW_NORMAL);end;-------------------------------------------------------无敌分割线-----------------------------------
阅读全文
得到鼠标和键盘的空闲时间
摘要:var t: TLastInputInfo;begin t.cbSize := SizeOf(t); GetLastInputInfo(t); Label1.Caption := IntToStr(GetTickCount - t.dwTime); //这里是msend;-------------------------------------无敌分割线----------------------------------------------type PLastInputInfo = ^TLastInputInfo; {$EXTERNALSYM tagLASTINPUTINFO} tagLA
阅读全文
用代码打开文件或者文件夹的属性
摘要:1 var 2 sei: SHELLEXECUTEINFO; 3 FileName: string; 4 begin 5 FileName := 'C:\a.a'; 6 with sei do begin 7 cbSize := SizeOf(sei); 8 fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI ; 9 Wnd := Self.Handle;10 lpVerb := 'properties';11 lpFile := PChar(FileN
阅读全文
让鼠标穿透窗体
摘要:1 var2 ws: DWORD;3 begin4 ws := GetWindowLong(Form1.Handle, GWL_EXSTYLE);5 ws := ws or WS_EX_TRANSPARENT;6 ws := ws or $80000;7 SetWindowLong(Form1.Handle, GWL_EXSTYLE, ws);8 end;
阅读全文
把普通函数指针,变成对象方法指针
摘要:delphi里的普通函数指针pointer 为4个字节,但是对象的方法指针是8个字节,由对象指针self(4字节)和函数指针(4字节)组合而成.了解了这句话,将普通的函数指针变成对象的方法指针就不是难事了.这种手段只能用于对象方法只有Sender这一个参数的情况.下面是简单的例子代码. 1 procedure Button2Click(Sender: TObject); //这里是一个普通的函数 2 implementation 3 4 {$R *.DFM} 5 procedure Button2Click(Sender: TObject); 6 begin 7 ShowMessage(
阅读全文
进度条窗体的源代码 - Delphi
摘要:1个窗体,1个unit先说调用方法吧,刚才在csdn里也贴了这段代码..不过没写详细使用方法...汗.. 1 CreateProgressDlg(); 2 try 3 while () do begin 4 UpdateProgressDlg(); 5 if ProgressCanceled then 6 break; 7 end; 8 finally 9 DestroyProgressDlg();10 end; View Code 1 //--------------------------------------------进度条窗体----------------------------
阅读全文
得到当前活动窗体的标题
摘要: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.
阅读全文
在ColorDialog里预置自定义颜色
摘要:用起来还真的挺麻烦. 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;
阅读全文
将结构体存入Access数据库
摘要:懒得修改了。参数里应该再加一个字段名称,有兴趣的修改一下。。。目前是根据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)=
阅读全文
PopupMenu响应鼠标左键
摘要:OnMouseUp1 var2 aPoint: TPoint;3 begin4 if Button = mbLeft then begin5 GetCursorPos(aPoint);6 PopupMenu.Popup(aPoint.x , aPoint.y);7 end;8 end;
阅读全文
ListBox类似组件,鼠标右键点击事件得到选中Item
摘要:允许多选的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
阅读全文
ADO读取Excel Sheet
摘要: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
阅读全文
将某个MenuItem移动至右侧,即Help sytle.
摘要:调用时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
阅读全文
MIDAS中传递自定义结构体
摘要: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^
阅读全文
一个有趣的组合算法
摘要:一般的寻找某个集合的子集组合,都是使用递归..找到了一个有趣的算法,实现了连续自然数的子集组合算法...稍微修改一下,就可以实现任意集合的子集组合查找.组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中。 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为 “01”组合,同时将其左边的所有“1”全部移动到数组的最左端。 当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得 到了最后一个组合。例如求5中选3的组合: 1 1
阅读全文
ModBus RTU,CRC,数据转换代码
摘要: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.
阅读全文
浙公网安备 33010602011771号