大悟还俗

邮箱 key_ok@qq.com 我的收集 http://pan.baidu.com/share/home?uk=1177427271
posts - 236, comments - 8, trackbacks - 0, articles - 0
  新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

共6页: 上一页 1 2 3 4 5 6 下一页 

2013年10月21日

摘要: 一、override 重载type TFigure = class procedure Draw; virtual;//(我的理解是)父类中可以使用父类的,子类中使用子类的。与“四”是有区别的。 end; TRectangle = class(TFigure) procedure Draw; override;//a1 end; TEllipse = class(TFigure) procedure Draw; override;//a2 end;使用var Figure: TFigure;begin Figure := TRectangle.Create;...阅读全文

posted @ 2013-10-21 13:11 大悟还俗 阅读(113) 评论(0) 编辑

摘要: 今天用到压缩文件的问题,找了一些网上的资料,后来发现了delphi自身所带的zlib单元,根据例子稍微改变了一些,使它能够符合所有的格式。使用时,需要Zlib.pas和 Zlibconst.pas两个单元文件,这两个文件保存在 Delphi 5.0安装光盘上 InfoExtrasZlib目录下,此外,在 InfoExtrasZlibObj目录中还保存了 Zlib.pas单元引用的 Obj文件,把这个目录拷贝到delphi的lib下,即可。原来提供的例子是抓计算机屏幕,现在改成文件流,适应所有情况。也可以适当的改动比如增加目录压缩和分文件压缩,其实就是在文件流前面增加一部分描述结构就是,不多说。阅读全文

posted @ 2013-10-21 13:06 大悟还俗 阅读(93) 评论(0) 编辑

摘要: 字符描述\标记下一个字符是特殊字符或文字。例如,"n" 和字符 "n" 匹配。"\n" 则和换行字符匹配。序列 "\\" 和 "\" 匹配,而 "\(" 则和 "(" 匹配。^匹配输入的开头。$匹配输入的末尾。*匹配前一个字符零或多次。例如,"zo*" 与 "z" 或 "zoo" 匹配。+匹配前一个字符一次或多次。例如,"zo+" 与 "zoo" 匹配,但和阅读全文

posted @ 2013-10-21 09:25 大悟还俗 阅读(54) 评论(0) 编辑

摘要: 文件名称:Team Foundation Server 2010简体中文版文件大小:1.8 GBhttp://www.google.com/profiles/dedecms.com下载地址:thunder://QUFlZDJrOi8vfGZpbGV8Y25fdmlzdWFsX3N0dWRpb190ZWFtX2ZvdW5kYXRpb25fc2VydmVyXzIwMTBfeDg2X3g2NF9kdmRfNTMxOTA5Lmlzb3wxOTYzNTg5NjMyfEM5Qzc3QjI3MDdERjEwMDYyMUIzRkI2NTNDMjg1NTI0fC9aWg==/转载补充:Team Foundati阅读全文

posted @ 2013-10-21 09:21 大悟还俗 阅读(185) 评论(0) 编辑

2013年10月18日

摘要: 添加四个控件TToolbarAlignment: alTopTSpeedButtonAlignment: alRightStyleLookUp: detailstoolbuttonMargin, Right: 5 (this is set in case you want to carry this UI over to iOS as well, to account for both bordered (iOS6) and non-bordered (iOS7) button sizesTListBox with several itemsEach of the fourlistboxite阅读全文

posted @ 2013-10-18 18:04 大悟还俗 阅读(275) 评论(0) 编辑

2013年10月17日

摘要: TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。TStringList 常用方法与属性:var List: TStringList; i: Integer;begin List := TStringList.Create; List.Add('Strings1'); {添加} List.Add('Strings2'); List.Exchange(0,1); {置换} List.Insert(0,'Strings3'); {插入} i := List.IndexOf('Strings1'); {...阅读全文

posted @ 2013-10-17 14:54 大悟还俗 阅读(114) 评论(0) 编辑

2013年10月15日

摘要: 还没看正剧,所以转来帮助看电视从起源到终点:《LOST》剧情全解析(一) 此文是LOST完结之后的剧情解析,剧透,慎入从起源到终点:《LOST》剧情全解析(一)转眼间,LOST全剧结束已经一个多月了,这一个多月来我忙着跟毕业有关的各种杂事,如今已经暂别校园,真是像Desmond那句口头禅一样,一下子切换进了一个another life。LOST的大结局想必引来严重两极化的评价,有些人被感动,说这不愧是第一神剧的结局,更多人被激怒,说到头来很多悬念都不了了之,LOST是天下第一忽悠剧。且不说LOST的悬念是否真的都没有解开,我觉得就算结局不尽如人意,那也无法抹杀过程的精彩带给我们的那些惊心动魄和阅读全文

posted @ 2013-10-15 23:19 大悟还俗 阅读(116) 评论(0) 编辑

2013年10月11日

摘要: 1. 下载光盘镜像ftp://debian.ustc.edu.cn/debian-cd/7.1.0/amd64/iso-dvd/[2012.3.25]1.1去官网http://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/下载testing版,每周一个版本,刻盘。[2013.5.28]1.2 Debian 7.0 已经在今年5月初正式发布,可以到国内各大镜像下载:http://debian.ustc.edu.cn/debian-cd/7.0.0/amd64/iso-cd/http://debian.cn99.com/debian-c阅读全文

posted @ 2013-10-11 10:29 大悟还俗 阅读(253) 评论(0) 编辑

摘要: 第一步:到你netbeans安装目录下的etc目录下,找到netbeans.conf文件,打开准备编辑;第二步:在netbeans_default_options后面加上-J-Dawt.useSystemAAFontSettings=on,保存退出阅读全文

posted @ 2013-10-11 10:28 大悟还俗 阅读(59) 评论(0) 编辑

2013年10月10日

摘要: 操作方法:在RAD Studio XE5快捷方式上鼠标右击选择属性,在弹出的快捷方式标签页中将目标(T):"C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\bin\bds.exe"后面加参数-np,即启动时候不显示Welcomepage标签页。修改后的RAD Studio XE5快捷方式"C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\bin\bds.exe" -np修改后的Delphi XE5快捷方式"C:\Program Files 阅读全文

posted @ 2013-10-10 10:13 大悟还俗 阅读(114) 评论(0) 编辑

2013年10月9日

摘要: Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)Insert Classselect N'张三',N'语文',78 union allselect N'张三',N'数学',87 union allselect N'张三',N'英语',82 union allselect N'张三',N'物理',90 union allselect N'李四',N'阅读全文

posted @ 2013-10-09 17:57 大悟还俗 阅读(96) 评论(0) 编辑

摘要: uses RichEdit;procedure RichEditSetBackColor( // 设置RichEdit文字背景色 mRichEdit: TRichEdit; // Rich编辑框 mBackColor: TColor // 背景色 ); var vCharFormat2: TCharFormat2; begin if not Assigned(mRichEdit) then Exit; FillChar(vCharFormat2, SizeOf(vCharFormat2), 0); vCharFormat2.cbSize := SizeOf(vCharF...阅读全文

posted @ 2013-10-09 17:43 大悟还俗 阅读(189) 评论(0) 编辑

摘要: uses RichEdit;function TextToRtf( // 将文本处理为RTF格式 mText: WideString // 输入文本): WideString; // 返回处理后的RTF文本var I: Integer;begin Result := StringReplace(mText, #13#10, #10, [rfReplaceAll]); for I := Length(mText) downto 1 do begin case mText[I] of '\': begin Delete(Result, I,...阅读全文

posted @ 2013-10-09 17:39 大悟还俗 阅读(430) 评论(0) 编辑

摘要: type TMenuHintWindow = class(THintWindow) private FTimerShow: TTimer; FTimerHide: TTimer; procedure TimerShowTimer(Sender: TObject); procedure TimerHideTimer(Sender: TObject); procedure ApplicationHint(Sender: TObject); public constructor Create(AOwner: TComponent); override; ...阅读全文

posted @ 2013-10-09 17:36 大悟还俗 阅读(68) 评论(0) 编辑

摘要: (*//标题:无限进制处理说明:使用于数学领域进制之间相互转换和计算设计:Zswang日期:2005-01-15支持:wjhu111@21cn.com//*) uses Math; const cScaleChar: array[0..35] of Char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; function StringToCharSet( //字符串集合 mString: string //源字符串): TSysCharSet; //返回字符串中包含的集合var I: Integer;begin Result := []; 阅读全文

posted @ 2013-10-09 17:35 大悟还俗 阅读(115) 评论(0) 编辑

摘要: 今天有人问我:“用shell打开文件(显示桌面.scf)的方式还是用模拟键盘(Win+D)显示桌面”这应该有更好的方法,就搜了搜,关键字定位“ToggleDesktop”因为显示桌面.scf的内容是:[Shell]Command=2IconFile=explorer.exe,3[Taskbar]Command=ToggleDesktop找到了MSDNhttp://msdn.microsoft.com/en-us/library/bb774124(VS.85).aspx给出的是VB脚本和Javascript脚本,这个容易翻译:JavaScriptusesComObj;procedureTForm阅读全文

posted @ 2013-10-09 17:33 大悟还俗 阅读(116) 评论(0) 编辑

摘要: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Grids; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private protected { Private declarations...阅读全文

posted @ 2013-10-09 17:25 大悟还俗 阅读(124) 评论(0) 编辑

摘要: 方法a.不使用Intent而是直接发短信.smsManager对应的Delphi代码应该是:uses Androidapi.JNI.JavaTypes,Androidapi.JNI.Telephony;var j: JSmsManager;begin j := tjsmsmanager.Create; j.sendTextMessage(stringtojstring('137114553XX'), nil, stringtojstring('测试短信'), nil, nil);end;至于双卡双待用哪个卡来发送这些我没有详细研究,有兴趣的朋友可以研究下.方法b阅读全文

posted @ 2013-10-09 17:21 大悟还俗 阅读(149) 评论(0) 编辑

摘要: This is the only code that changes between the first and second code snippets: dlg.ShowModal(procedure(ModalResult: TModalResult) begin if ModalResult = mrOK then // if OK was pressed and an item is selected, pick it if dlg.ListBox1.ItemIndex >= 0 then edit1.Text := dlg.List...阅读全文

posted @ 2013-10-09 14:39 大悟还俗 阅读(420) 评论(0) 编辑

摘要: procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var vPoint: TPoint;begin if Button mbRight then Exit; vPoint := Point(X, Y); X := SendMessage(RichEdit1.Handle, EM_CHARFROMPOS,0, Integer(@vPoint)) and $0000FFFF;// 得到鼠标点击字符位置 if (X >= R.阅读全文

posted @ 2013-10-09 13:15 大悟还俗 阅读(93) 评论(0) 编辑

摘要: //-------Delphi-------usesCommCtrl;procedureTForm1.Button1Click(Sender:TObject);varvHandle:THandle;vCount:Integer;I:Integer;vProcessID:THandle;vProcess:THandle;vNumberOfBytesRead:DWORD;vPointer:Pointer;vBuffer:array[0..255]ofChar;beginvHandle:=FindWindow('Shell_TrayWnd',nil);vHandle:=FindWin阅读全文

posted @ 2013-10-09 13:09 大悟还俗 阅读(86) 评论(0) 编辑

摘要: 主窗体unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,LongWaitTrd;type TForm1 = class(TForm) btnSetTask: TButton; btnExitThd: TButton; btnCreateTrd: TButton; procedure btnSetTaskClick(Sender: TObject); procedure btn...阅读全文

posted @ 2013-10-09 13:05 大悟还俗 阅读(52) 评论(0) 编辑

摘要: 在消息队列部分,我们已经知道消息泵是以线程为单位进行分离的!换句话说,有N个程序,都产生了相关事件,在系统消息队列中会根据线程来区分,当线程的消息泵从系统消息队列抽取消息时,会挑属于自己线程的消息。当我们创建一个工程时,IDE环境已经为我们生成了主线程的代码以及消息泵,而当我们自己创建一个Worker线程时,默认是没有消息泵的,如果想要在线程内接收消息,需要添加消息泵!消息泵的结构:whileGetMessage(Msg,0,0,0)dobegin TranslateMessage(Msg); DispatchMessage(Msg)end;另:要想在线程内响应消息,没有窗口是不行的所以要在线阅读全文

posted @ 2013-10-09 13:02 大悟还俗 阅读(265) 评论(0) 编辑

摘要: 在这里把网友常常搞不清楚的属性作用列出来:一、FreeOnTerminate用于表明线程执行完毕后是自动释放还是保留,默认为False二、Terminate该过程只是简单地设置线程类的Terminated标志,并不是真正的释放,这一点要格外注意!三、Synchronize该函数是同步方法,如果线程中有操作UI的语句时,需要把UI操作写成过程(无参数过程),放到该方法中!//这段代码是要用线程打印1-99,输出至Memo1中TThread1 = class(TThread) private FNum: Integer; procedure AddLines; protected ...阅读全文

posted @ 2013-10-09 13:01 大悟还俗 阅读(65) 评论(0) 编辑

摘要: 还是本着上篇文章的原则,只不过在Delphi中string有点特殊!先了解一下Delphi中的string1.string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节,变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起始于@Str[1],@Str[1]偏移负16个字节的空间存储着字串长度、引用计数等信息。字符序列以NULL结束。2.string[n] = ShortString = 短字符串,最多容纳255个字符,实际长度是字符长度+1,是Delphi的简单类型,Str[0]存储着字符的个数,第一个字符从Str[1]开阅读全文

posted @ 2013-10-09 12:29 大悟还俗 阅读(154) 评论(0) 编辑

摘要: delphi编写指定时间不动鼠标将系统锁定/以及在不动的情况下隐藏鼠标3秒种不动鼠标键盘看看效果。GetLastInputInfo:获取闲置时间;ShowCursor:设置鼠标状态unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); ...阅读全文

posted @ 2013-10-09 12:29 大悟还俗 阅读(43) 评论(0) 编辑

摘要: 首先强调一点:任何数据在内存中都是线性存储的,归根结底都是由一个字节数组表示的!如:Integer占4个存储单元,32bit,在内存中他就是由一个长度为4的字节数组来表示!只不过在读取该类型时,系统帮我们根据不同的数据类型对数据进行捆绑读取(如果上学时学过汇编就可以想出,如果自己取的话需要把高地址的内容乘以某值后再加上低址的值)。值得注意的是:对于Delphi中的多维动态数组,不要用类似于内存复制的函数进行复制,如CopyMemory,Move等。因为多维动态数组的内存是不连续的!只要把握住这一原则,我想类型转换我就不多讲了//Word与ByteArr的互转一、从ByteArr转为Word(I阅读全文

posted @ 2013-10-09 12:28 大悟还俗 阅读(257) 评论(0) 编辑

摘要: 问题1:一般来说,要让你的线程能够尽快终止,必须在Execute方法中在较短的时间内不断地检查Terminated标志,以便能及时地退出。这是设计线程代码的一个很重要的原则!在这种情况下使用上述思路一般不会出什么问题!type TThread1 = class(TThread) private procedure Test(); protected procedure Execute; override; end;procedure TThread1.Execute;var i:Integer;begin FreeOnTerminate := True;//线程正常结束...阅读全文

posted @ 2013-10-09 12:28 大悟还俗 阅读(67) 评论(0) 编辑

摘要: 前一篇文章讲到非队列消息会直接把消息Dispatch到窗口函数上,窗口函数长什么样?//就是一个大case分支//要想拦截消息,override窗口函数是一个办法!procedure TCustomForm.WndProc(var Message: TMessage);var FocusHandle: HWND; SaveIndex: Integer; MenuItem: TMenuItem; Canvas: TCanvas; DC: HDC;begin with Message do case Msg of WM_ACTIVATE, WM_SETFOCUS, WM...阅读全文

posted @ 2013-10-09 12:27 大悟还俗 阅读(69) 评论(0) 编辑

摘要: 前一篇文章介绍了为何要共用内存管理器,有人要问可不可以在编写dll时更通用一些,可以兼顾其它编译器(如果是其它编译器的话,Delphi写的dll不能与其它语言共用内存管理器),采用一定的策略来避免在dll内创建RTL自动管理的数据类型做参数或返回值,这样其它非Delphi的开发语言也可以用了!完全可以!一般的策略如下:1.在主调函数中申请一块空间2.把这个空间的地址传送给dll3.dll内部进行逻辑运算,得到结果后把值添到主调函数传递过来的空间上4.主调函数获取值,根据业务规则对空间进行处理(释放等操作)在整个工作周期中,申请的内存一直掌握在主调函数的手中,没有给dll任何管理对象的机会!看一阅读全文

posted @ 2013-10-09 12:26 大悟还俗 阅读(171) 评论(0) 编辑

摘要: 看了MSDN后,以下是我个人的理解!消息能够被分为「队列化消息」和「非队列化消息」。队列化消息是指当程序发生某事件时,由Windows主动捕获并把消息放入系统消息队列中,而程序在运行时会初始化一个消息泵,该消息泵用于抽取系统消息队列中的与之相关的消息,并把之分发到相应窗口函数上!非队列化消息不走消息泵,而是直接分发到相应的窗口函数上!队列化消息基本上是使用者输入的结果,以击键(如WM_KEYDOWN和WM_KEYUP消息)、击键产生的字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN)的形式给出。队列化消息还包含时钟消息(WM_TIMER)、更阅读全文

posted @ 2013-10-09 12:25 大悟还俗 阅读(134) 评论(0) 编辑

摘要: 调用DLL中的函数可分为早绑定与晚绑定!早绑定是指在编译期就已经确定函数地址!晚绑定是指在运行期动态加载dll,并根据查表的方式获取dll内exports函数的地址,由于早绑定比较简单,在此不再讲述,主要说晚绑定!//晚绑定,也就是动态调用外部函数主要用以下三个命令: //LoadLibrary:获取 DLL //GetProcAddress:获取函数 //FreeLibrary:释放DLL例:type TFunctionName=function():boolean;stdcall;//定义函数类型 Function DynamicInvokeDllFunction: string; ...阅读全文

posted @ 2013-10-09 12:13 大悟还俗 阅读(157) 评论(0) 编辑

摘要: 问题描述:具体问题就是在隐式使用接口变量后,在FreeLibrary执行后,就会出现一个非法访址的错误。这个错误的原因就是在FreeLibrary后,DLL以的代码均为不可用状态,而在代码执行完整个过程后,VCL要对RTL类型的数据进行清理。而在清理过程中肯定要对接口进行减1并进行释放相关对象。而对象代码已从进程空间卸载,故报非法访址错误!解决方法:所以要想解决该问题,就应该把DLL调用过程放到一个单独的过程中,其目的就是让调用完毕后,让VCL来清理接口。清理完毕后返回后,再调用FreeLibrary来从进程空间中卸载DLL。错误调用代码为:var libHandle: THandle; ..阅读全文

posted @ 2013-10-09 12:12 大悟还俗 阅读(252) 评论(0) 编辑

摘要: Delphi创建DLL时,IDE自动生成的文档中写得很清楚,当在DLL中以动态数组或String做为参数或返回值时(即RTL自动维护的数据类型),请在每个工程文件的第一个单元加上ShareMem。这样就可以使宿主程序与DLL共享内存管理器了!这样的话,在发布程序时需要把borlndmm.DLL一同发布!问题1:为何要加到工程文件的第一个单元? 对于DLL和主程序这样的程序结构来说,使用2个内存管理器,在返回的数据类型为string的话,仅仅在主程序中将内存管理器中将引用数加1,而DLL的引用数不变,这样当退出DLL过程中,由于引用数为0,要对返回值进行释放,由于主程序中的数据为一个地址,将DL阅读全文

posted @ 2013-10-09 12:12 大悟还俗 阅读(144) 评论(0) 编辑

摘要: 相关背景:我们在做桌面级小程序时,一般的结构是:设计业务对象做工作线程写界面工作线程主要把业务对象给封装起来,处理时避免前台界面停止响应的情况。但有时业务对象会有异常,需要反应到前台界面上,这时,我们需要捕获一下线程的异常type TTrdExceptionDemo=class(TThread) private FException: Exception; procedure DoHandleException; protected procedure Execute; override; procedure HandleException; virtual...阅读全文

posted @ 2013-10-09 12:06 大悟还俗 阅读(84) 评论(0) 编辑

摘要: 在Delphi中,Inifiles单元中有一个TStringHash的类,不过它的Value仅支持Integer(其实也不是问题,有其它类型可以将变量变为Pointer),有点不舒服,今天没事做就把它替换为variant了,其中Key的名称大小写无关,就是为了加快开发速度!使用Hashtable,查找和删除复杂度都是常数级别的!type PPHashItem = ^PHashItem; PHashItem = ^THashItem; THashItem = record Next: PHashItem; Key: String; Value: Variant; end...阅读全文

posted @ 2013-10-09 12:05 大悟还俗 阅读(450) 评论(0) 编辑

摘要: 平时写程序时经常要把一些Key与Value保存起来,但一般数据量都不大,故不想用TStringHash来做。而用TStringList来做,还要写一个"=",挺别扭!而且数据类型还有限制。自己从VCL中找了一段,感觉挺好用的,以后用它玩一玩!不过对Key值的搜索采用遍历方式,数据量大就慢了,建议采用HashTable。注:Key与Value均不受数据类型限制!TLookupList = class(TObject) private FList: TList; public constructor Create; destructor Destroy; override; .阅读全文

posted @ 2013-10-09 12:02 大悟还俗 阅读(119) 评论(0) 编辑

摘要: //GetLastInputInfo是检测系统输入的,应用到某个程序中不合适!此问题有二种解法来监控输入消息:1.用线程级HOOK,钩上MOUSEHOOK与KEYBOARDHOOK2.在Application.OnMessage中做处理显然,用第2种方法比较方便!众所周知,键盘与鼠标消息都是队列消息,需要经过消息队列后经过一些处理,再发往各个WNDPROC。基于这个原理,我们可以在ONMESSAGE中做一下消息处理,即先声明全局变量,用于保存上次输入动作的时间,而后用时间控件来进行定时扫描,用GetTickCount来判断是否超时。unit Unit1;interfaceuses Windo.阅读全文

posted @ 2013-10-09 12:00 大悟还俗 阅读(145) 评论(0) 编辑

摘要: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, DB, ADODB;type PNodeInfoEx = ^TNodeInfoEx; TNodeInfoEx = Packed Record NodeID : Integer; ParentID : Integer; NodeType : Integer; ChnNodeTitle ...阅读全文

posted @ 2013-10-09 11:59 大悟还俗 阅读(76) 评论(0) 编辑

摘要: //unit UntService;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, DB, ADODB,Registry,ActiveX;type TService2 = class(TService) con1: TADOConnection; procedure ServiceExecute(Sender: TService); procedure ServiceAfterInstall(Sender: TService); pro...阅读全文

posted @ 2013-10-09 11:58 大悟还俗 阅读(220) 评论(0) 编辑

共6页: 上一页 1 2 3 4 5 6 下一页