大悟还俗

邮箱 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月9日

摘要: 需求:由于某种原因,需要根据管理员设定的时间定时关闭服务器上的COM+程序以及Windows Service程序。任务:任务就是做一个Windows Service,这个Service要有一个配置窗体(该窗体可通过HotKey呼出窗体或在服务启动时把配置窗体放到系统托盘中),用于管理员配置所要关闭的服务条目以及关闭时间。关键点:1.要设置允许服务与桌面进行交互2.定时(不想用Timer)3.关闭相关程序定时功能刚才调试了一下,已经实现!实现的方法就是在服务中创建一个线程,以管理员设置的Interval做为阻塞时间步骤1:先创建线程uses Classes,SyncObjs,Dialogs,S.阅读全文

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

摘要: //第1种方法procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);begin if ActiveControl = ComboBox1 then Handled := True;end;//第2种方法(了解该方法后,以后会有助于我们处理更复杂的问题)unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Cl...阅读全文

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

摘要: 这种模式如果不用面向对象的思想的话,也就是case Type of 1:doCreditCardPayment(); 2:doCheckPayment()end;然后在doCreditCardPayment中复制一段其它支付方式的代码拷到这个过程中,就搞定了!但以后如果需要新增加一种付款方式的话,您必须要打开程序,添加某过程,编译。然后进行整体业务流程的测试。往往程序员在修改主系统时会很头痛的,说不定改了哪部分会导致整体程序出问题。基于上述原因,我们在想,能不能在不修改主系统的前提下加上这个功能?我们一般是这样做:1.先在主系统做一个基类,类似于下述的TPayment,把付款业务的共同代码出来阅读全文

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

摘要: 要想跨进程访问DBGRID,貌似只能用HOOK,写一个DLL想办法注入到目标进程。注入成功后,使DLL与目标进程在同一进程空间中(其内有一些细节问题,请参见代码),这时可以访问目标进程的VCL组件。并把VCL组件的数据通过进程通信的方式发给Sniffer进程。如何进行注入? 可以安装一个WH_CALLWNDPROC钩子,这样当有消息在窗口函数中时,系统就会装载HOOK,即执行DLL部分。如何发消息? 可以在DLL中设置一个自定义消息,在安装完钩子后,发送一个自定义消息至目标进程的窗口函数。以下实例可读出另一进程的EDIT、LABEL、DBGRID等控件的值。如何了解这个原理,跨进程读取Stri阅读全文

posted @ 2013-10-09 11:49 大悟还俗 阅读(328) 评论(1) 编辑

摘要: 1.利用SQL的Exec()来计算2.利用JavaScript来计算3.利用逆波兰式来计算(比较复杂)这里用JavaScript来实现uses ComObj;function TForm1.DoCaculate(exp: string): string;var script: Variant;begin script := CreateOleObject('ScriptControl'); script.Language := 'JavaScript'; Result := script.Eval(Exp);end;procedure TForm1.btn1Cl阅读全文

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

摘要: //以下代码是错误的!!!//这一节主要告诉大家,以这种方式进行开发dll是不对的以及错误原因,正确的方式是什么!//DLL内创建对象,并把对象返回function GetDataSet(str,conn:PChar): TADODataSet;stdcall; begin Result:=TADODataSet.Create(nil); Result.Close; Result.ConnectionString:=conn; Result.CommandText:= str; try Result.Open; except on E:Excepti...阅读全文

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

摘要: function ExecShowModal(APath: PChar; ACmdShow: Integer; ATimeout: Longword): Integer;var vStartupInfo: TStartupInfo; vProcessInfo: TProcessInformation;begin FillChar(vStartupInfo, SizeOf(TStartupInfo), 0); with vStartupInfo do begin cb := SizeOf(TStartupInfo); dwFlags := STARTF_USESHOWWIN...阅读全文

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

摘要: 【容器+结构体】注意事项1//这里的List是一种容器,是一种泛指,可以是List、StringList、ThreadList、ObjectList等!//现以List为例做一个例子!unit StudentExample;interfaceuses Classes,SysUtils,Dialogs;type //定义结构体及其指针,定义指针目的在于把指针放到List容器中 PStudent = ^TStudent; TStudent = packed record Name: PChar;//这里以指针数据为例(简单数据类型太简单,没什么可注意的) Age: Intege...阅读全文

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

摘要: RTTI需要引用单元TypeInfoGetPropInfo 函数用于获得属性的 RTTI 指针 PPropInfo。它有四种重载形式,后面三种重载的实现都是调用第一种形式。AKinds 参数用于限制属性的类型,如果得到的 PPropInfo 不属于指定的类型,则返回 nil。function GetPropInfo(TypeInfo: PTypeInfo; const PropName: string): PPropInfo;function GetPropInfo(Instance: TObject; const PropName: string;AKinds: TTypeKinds = [阅读全文

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

摘要: //想实现在函数中生成Memo1的内容,而后赋给Memo.Lines//方法1:var s: TStrings;begin s := TStringList.Create; AddMemoData(s); Memo1.Lines := s; //进行对象复制,而不是简单的指针赋值{procedure TCustomMemo.SetLines(Value: TStrings);begin FLines.Assign(Value);//进行对象的深度复制end;} s.Free; //释放TStringsend;//方法2var s:TStrings;//全局function A...阅读全文

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

摘要: //该例程为在系统级屏蔽一些系统键、如WIN、TAB、CAP、POWER、SLEEP、HOME等!//屏蔽组合键下面例程不适用!(比如CTRL+ESC需要在钩子函数中用(p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) 0)进行判断,也不难,这里只是举个简单的例子)unit KeyBlocker;interfaceuses SysUtils, Classes, Windows, Messages;const WH_KEYBOARD_LL = 13;type PKBDLLHOOKSTRUCT = ^KBDLLHO...阅读全文

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

摘要: var Str:TStream; begin Str:=TFileStream.Create('c:/windows/system32/taskmgr.exe',fmOpenWrite); end; View Code阅读全文

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

摘要: //方法1: uses EncdDecd; Memo2.Text:=UTF8Decode( DecodeString(Memo1.Text));//方法2:// 使用控件 Memo2.Text:=IdDecoderMIME1.DecodeString(Memo1.Text);View Code阅读全文

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

摘要: unit Androidapi.JNI.Network;interfacefunction IsConnected: Boolean;function IsWiFiConnected: Boolean;function IsMobileConnected: Boolean;implementationuses System.SysUtils, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, FMX.Helpers.Android;type JConnect...阅读全文

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

摘要: uses AndroidAPI.JNI.GraphicsContentViewText, AndroidAPI.JNI.JavaTypes, AndroidAPI.JNI.OS; function BatteryPercent(const aContext: JContext): Integer; var filter: JIntentFilter; battery: JIntent; level, scale: Integer; begin filter := TJIntentFilter.Create; filter.addAction(TJIntent...阅读全文

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

2013年10月8日

摘要: 在VCL下,常用的询问对话框包括procedure TfrmMainVCL.btnAppMessageboxClick(Sender: TObject);begin if Application.MessageBox('是否退出?', '询问', MB_YESNO + MB_ICONQUESTION) = IDYES then begin Close; end;end;或者是:uses System.UITypes;procedure TfrmMainVCL.btnMessageDlgClick(Sender: TObject);begin if Message阅读全文

posted @ 2013-10-08 17:58 大悟还俗 阅读(162) 评论(0) 编辑

摘要: 在VCL中,关闭程序的主窗体也就意味着程序的主循环结束,主程序自然而然结束。所以在主窗体中使用窗体的关闭函数(Close)即可,如下:procedure TfrmMain.btncloseClick(Sender: TObject);begin Close;end;在FMX中,由Activity替代了Form的概念,虽然TForm类仍然存在,但MainForm通过关闭函数无法结束程序,使用Application.Terminate均无效,调整为:uses FMX.Platform.Android;procedure TForm2.SpeedButton1Click(Sender: TObjec阅读全文

posted @ 2013-10-08 17:56 大悟还俗 阅读(273) 评论(0) 编辑

摘要: procedure SetBack(const AAction : JString); //后台运行。。var Intent: JIntent;begin Intent:= TJIntent.JavaClass.init(AAction); intent.addCategory(TJIntent.JavaClass.CATEGORY_HOME); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); SharedActivityContext.startActivity(Intent);end;调用SetBack(TJ...阅读全文

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

2013年10月7日

摘要: 最近发现经常无原无故自动乱点屏幕,非常不方便,找了下网上解决的方法,有四个:方案一:1、 关闭手机,取出电池,手机静置五分钟左右2、 找一根USB数据线,连接手机3、 洗手,或者把手弄湿(关键步骤,为的是更好把静电导出去)4、 湿手状态下同一只手的拇指接触USB线另一端的金属部分,食指按到地上两秒左右(初步去电)5、 拆开后盖我们可以看到一个小小的金属块在电池仓隔壁,这就是手机震动的发生器,俗称震子。由于它也是直接连接手机主板的,我们可以如法炮制,湿手状态下同一只手的拇指接触震子,食指按到地上两秒左右。 方案二: 最近屏幕老是出现飘移,就是屏幕被莫名乱点,点不...阅读全文

posted @ 2013-10-07 03:20 大悟还俗 阅读(113) 评论(0) 编辑

2013年9月29日

摘要: 其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍.1.短信息.很简单方法a.不使用Intent而是直接发短信.smsManager对应的Delphi代码应该是:usesAndroidapi.JNI.JavaTypes,Androidapi.JNI.Telephony;varj: JSmsManager;beginj := tjsmsmanager.Create;j.sendTextMessage(stringtojstring('137114553XX'), nil, stri阅读全文

posted @ 2013-09-29 16:41 大悟还俗 阅读(119) 评论(0) 编辑

摘要: Delphi早就把IO相关的都提取到System.IoUtils单元中了.路径操作就使用TPath的方法都很方便.usesSystem.IoUtilsTPath.GetTempPath//临时目录TPath.GetCameraPath//照相机目录(照片/录像)TPath.GetMusicPath//音乐目录TPath.GetDownloadsPath//下载目录……如果使用TPath类的静态方法那么代码就是跨平台的,在Windows,Mac,iOS,Android上都能用.如果仅仅对Android的操作也可以使用Androidapi.IOUtils单元的那些GetXX的函数,也很简单,都没有阅读全文

posted @ 2013-09-29 16:40 大悟还俗 阅读(205) 评论(0) 编辑

摘要: 手机号不是存在SIM卡上的,SIM卡只有一个串号.在运营商的服务器上有手机号和序号对应的一张表.所以你SIM卡办理遗失,运营商只要把新SIM卡的串号和你原来的手机号绑定即可.获取手机号的唯一办法是收个短信,短信里面有你的手机号码.所以很多程序为了获取手机号会要求你注册时发短信,然后它给你回个短信.usesAndroidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge,Androidapi.JNI.Telephony, Androidapi.JNI.JavaTypes, FMX.Helpers.Android;varTelephonyMa阅读全文

posted @ 2013-09-29 16:38 大悟还俗 阅读(369) 评论(0) 编辑

摘要: 经过测试,将sqlserver里的字段由varchar 或者char 改为 nvarchar 或者nchar然后在手机端的clientdataset 增加字段的时候数据类型选择widestring如图阅读全文

posted @ 2013-09-29 16:37 大悟还俗 阅读(112) 评论(0) 编辑

2013年9月26日

摘要: TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。以下代码实现xe5 开发的文本转语音的方法和访问蓝牙一样,这里用javaclass的接口实现接口声明部分:{*******************************************************}{ }{ CodeGear Delphi Runtime Library }{ Copyright(c) 2013 Jeff O...阅读全文

posted @ 2013-09-26 17:00 大悟还俗 阅读(341) 评论(0) 编辑

摘要: C:\Users\Public\Documents\RAD Studio\12.0\Samples\FireMonkeyMobile例子中的绑定方式如下图:1、拖拽一个listview到界面上,然后用绑定向导2、选择listview3、选择tprototypebindsource4、点击增加5、选择前九个类型6、在绑定设计界面将 colorname1 拖拽至 item.text 就完成了帮点显示颜色名称了如图7、imagelist 如图:选择listview的itemapperance属性为 imagelistitem然后在绑定向导里 将contactbitmap1 拖拽至 itm.bitma阅读全文

posted @ 2013-09-26 16:55 大悟还俗 阅读(141) 评论(0) 编辑

摘要: 用以下代码中的接口实现控制蓝牙的开、关及详细信息unit Androidapi.JNI.BluetoothAdapter;// (c) RedTitan Technology 2013// JNI BLUETOOTH import demo// Note - REQUIRES - PROJECT OPTIONS - USES PERMISSIONS - BLUETOOTHinterfaceuses Androidapi.JNIBridge, Androidapi.JNI.JavaTypes, Classes;type /////////////////////////// Bluetoo...阅读全文

posted @ 2013-09-26 16:53 大悟还俗 阅读(256) 评论(0) 编辑

摘要: 本篇文章我们来看一下delphi xe5 在android程序里怎样启动照相机并获取所拍的照片,本代码取自xe自带打sample,路径为:C:\Users\Public\Documents\RAD Studio\12.0\Samples\MobileCodeSnippets\AccessCameraApp1、前两步骤新建firemonkey mobile application 然后 选择blank application2、界面摆放如下: toolbar 、image 、actionlist2、右键点击new standard action然后选择 TakePhotoFromCameraAc阅读全文

posted @ 2013-09-26 16:52 大悟还俗 阅读(183) 评论(0) 编辑

摘要: 把供手机端调用的web服务完成,接下来实现手机端调用webservices获取数据1、新建firemonkey mobile application2、选择blank application3、这里选择分辨率,我用的手机是三星的p3100,没别的优点 就是大,7寸的屏,我女儿管这个叫平板手机 O(∩_∩)O~4、界面布局摆放如下:5、绑定数据集 xe5中使用livebingding来绑定数据集,没有datasource属性了,理论上所有的控件都可以绑定数据集。 先在clintdataset中添加字段依次添加 code ,name ,py_code 三个字段,然后选中grid,点击,然后将dat阅读全文

posted @ 2013-09-26 16:49 大悟还俗 阅读(232) 评论(0) 编辑

摘要: 其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍.1.短信息.很简单方法a.不使用Intent而是直接发短信. smsManager对应的Delphi代码应该是:uses Androidapi.JNI.JavaTypes,Androidapi.JNI.Telephony;var j: JSmsManager;begin j := tjsmsmanager.Create; j.sendTextMessage(stringtojstring('137114553XX'), nil,阅读全文

posted @ 2013-09-26 16:45 大悟还俗 阅读(234) 评论(0) 编辑

摘要: 在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查。1、新建firemonkey mobile application2、选择blank application3、这里选择分辨率,仍旧选择我女儿称呼的平板手机p3100的7寸分辨率 O(∩_∩)O~ ,界面上摆放一个open按钮,一个grid 同时拖拽一个 FDConnection 和 FDPhysSQLiteDriverLink1 FDQuery1 另外根据运行结果提示 还需要一个 FDGUIxWaitCursor ,运行的时候会有提示 4、连接sqlite 数据库,这里我就不再赘述怎样建立sqlite数阅读全文

posted @ 2013-09-26 16:43 大悟还俗 阅读(379) 评论(0) 编辑

摘要: ① 就用那个bitmap设计工具,先打开vcl里的皮肤(..... \Embarcadero\RAD Studio\12.0\Redist\styles\vcl里)② save as 转换成fmx里的.style文件③ 用stylebook控件里load这个转过来的皮肤 ④ 收工…… 在FireMonkey移动窗体设计器双击stylebook1选择stylebook1在下拉菜单Using the preceding procedure as a guide:Drop four stylebooks on the form, one each for Windows, Mac OS X, ...阅读全文

posted @ 2013-09-26 15:07 大悟还俗 阅读(225) 评论(0) 编辑

2013年9月17日

摘要: 建立一个webservices stand-alone vcl application 作为手机访问的服务端1、new->other->webservices2、选择stand-alone vcl application3、这里使用 默认端口80804、选择创建接口5、给服务起个名字6、点ok后保存工程,保存为目录如下:7、至此为止,什么代码都不写,点击运行,我们看到8、启动并点击 open browser按钮在浏览器里看到一个web服务就创建完成了。==================================================================阅读全文

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

摘要: 通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍.1.短信息.很简单方法a.不使用Intent而是直接发短信. smsManager对应的Delphi代码应该是:uses Androidapi.JNI.JavaTypes,Androidapi.JNI.Telephony;var j: JSmsManager;begin j := tjsmsmanager.Create; j.sendTextMessage(stringtojstring('137114553XX'), nil, stri阅读全文

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

摘要: Delphi XE5支持Android ARM的开发,可以在Android虚拟机里运行,因此建议将XE5安装在64bit的Windows,内存可以大于3GBDelphi XE5安装光盘中包含了最基本的Android开发的环境文件,但是并没有提供Android模拟机。我们需要安装Android的SDK后生成Android模拟机,安装步骤:1.到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK1.7安装2.到http://developer.android.com/sdk/index.html下载Andr阅读全文

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

摘要: 找到Delphi XE5的安装根目录 .... \Program Files (x86)\Embarcadero\RAD Studio\12.0\bin下的cglm.ini文件,打开cglm.ini文件[Embarcadero License Management]RootDir=${MODULE_DIR}\..LicenseDir=${ROOTDIR}\LicenseInfoDir=${COMMON_APPDATA}\Embarcadero\.licensesSlipDir=${COMMON_APPDATA}\Embarcadero\RegExe=bdsreg.exeLockType=5[E阅读全文

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

2012年4月28日

摘要: var i:Integer;begin for i:=0 to componentcount-1 do begin if (components[i] is TEDIT) then begin TEDIT(components[i]).text:=''; end; end; end;阅读全文

posted @ 2012-04-28 11:21 大悟还俗 阅读(95) 评论(0) 编辑

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