大悟还俗

邮箱 key_ok@qq.com 我的收集 http://pan.baidu.com/share/home?uk=1177427271
posts - 236, comments - 8, trackbacks - 0, articles - 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 大悟还俗 阅读(104) 评论(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 大悟还俗 阅读(204) 评论(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 大悟还俗 阅读(469) 评论(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 大悟还俗 阅读(69) 评论(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 大悟还俗 阅读(120) 评论(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 大悟还俗 阅读(124) 评论(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 大悟还俗 阅读(131) 评论(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 大悟还俗 阅读(155) 评论(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 大悟还俗 阅读(438) 评论(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 大悟还俗 阅读(121) 评论(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 大悟还俗 阅读(96) 评论(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 大悟还俗 阅读(57) 评论(0) 编辑

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

posted @ 2013-10-09 13:02 大悟还俗 阅读(295) 评论(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 大悟还俗 阅读(70) 评论(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 大悟还俗 阅读(157) 评论(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 大悟还俗 阅读(46) 评论(0) 编辑

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

posted @ 2013-10-09 12:28 大悟还俗 阅读(262) 评论(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 大悟还俗 阅读(71) 评论(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 大悟还俗 阅读(71) 评论(0) 编辑

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

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