DelForEx 是Delphi IDE的代码格式化工具,可快捷整理当前编辑的pas,dpr文件的代码格式。
修改记录:
添加Delphi XE 支持
修改默认快捷键为Ctrl+Shift+D ,防止快捷键冲突
【下载】
dropbox:http://dl.dropbox.com/u/1813734/DelForEx_2.5.4.zip
dbank: http://dl.dbank.com/c00xij3inr
需要源码的,留言。
DelForEx 是Delphi IDE的代码格式化工具,可快捷整理当前编辑的pas,dpr文件的代码格式。
修改记录:
添加Delphi XE 支持
修改默认快捷键为Ctrl+Shift+D ,防止快捷键冲突
【下载】
dropbox:http://dl.dropbox.com/u/1813734/DelForEx_2.5.4.zip
dbank: http://dl.dbank.com/c00xij3inr
需要源码的,留言。
DelforExp
看起来像是官网,有提供原始版本的下载,甚至是之前说是不开源的delfordll的源码
http://www.aew.wur.nl/UK/Delforexp/
delforex for gexpert的集成
http://www.dummzeuch.de/delphi/gexperts/english.html
另外GExperts的网站
可惜,没找到源码下载链接
几个有用的Delphi网站
最近的项目,一个工程组里面,包含有十几个的项目,如果打开项目组进行编辑,调试的时候,总会使Delphi 2010的ide失去响应,cpu占用50%,双核的。如果是单个exe项目的话,就不会。
解决办法:
用Delphidistiller ,把 component toolbar ide package的包去掉,即可。
ps:
参考:Component Toolbar slows down RAD Studio 2010
可知,可以加快code和design切换的速度~~
安装的D7版本:
打开原来的一个项目后,
假死
经研究发现:
项目都是经过高版本的Delphi 打开过的,如Delphi 2007,Delphi 2010等,目录下可明显的看到xxxx.dpr.2007等文件。
用Delphi2010+intraweb开发,利用
response.contentstream:=astream;
response.sendresponse;
返回数据流到客户端。
先发现一个问题:
exe中运行正常。而编译成isapi的dll后,从firebug可以看到,数据一直没有到,最后超时。
跟踪断点进去,发现代码都已经执行完成了,甚至返回了,可是,还是等待数据超时。
解决办法:
生成astream后,设置astream.position:=0,也就是把要返回的流复位。
一般Delphi中,写isapi的方法都是,先建立一个cgi的工程,编程,调试,程序调试完成后,再修改成isapi的工程,重新编译成dll,然后部署到iis上。但是,这样有个问题,有时候cgi和isapi的处理方式还是有些区别的,这样,某些问题就无法发现。比如说,在cgi的exe中,post的数据和url中的参数数据,就可以用contentfields和queryfields获取,而isapi中,就必须严格按照,参数用queryfields,而post的数据用contentfields获取。
设置isapi的方法,就是利用调试时的attach to process的方法,把dll调试进程attach到iis的可执行程序w3wp.exe进程,网上有些文章说是inetsrv.exe,是错误的。
新装的win2003,原来在xp上跑的好好的intraweb 编译的isapi 的dll,出现了一堆乱码。
查看页面的源代码,就是
<html><head><script> function IWTop(){ if ((parent != self) && (parent != null) ) { try { return parent.IWTop(); } catch (e) { return window; } } else { return window; } } IWTop().document.writeln('?佄呃偙?瑨汭倠?????????堠呈?ㄠ?吠慲獮瑩潩慮???∠瑨灴?眯睷眮?牯?剔砯瑨汭?呄?桸浴?琭慲獮瑩潩慮?瑤≤??瑨汭砠汭獮∽瑨灴?眯睷眮?牯???砯瑨汭??格慥??洼瑥?瑨灴攭畱癩∽敒牦獥?挠湯整瑮∽?甠汲???潌楧?汤????洼瑥?瑨灴攭畱癩∽潃瑮湥?祔数?潣瑮湥?琢硥?瑨汭※档牡敳?呕?????楴汴????????楴汴??猼祴敬琠灹?琢硥?獣? ̄?挣湥整???潰楳楴湯愺獢汯瑵??眊摩桴??硰※?敬瑦?┰※?潴????稊椭摮硥?※?慢正牧畯摮挭汯牯????※?慭杲湩氭晥???硰?琊硥?污杩?散瑮牥?昊湯?敷杩瑨?戠汯??潢摲牥?硰猠汯摩???敦?洊牡楧?潴??瀲????????猯祴敬 ̄??敨摡??潢祤??楤?摩∽散瑮牥??搼癩猠祴敬∽慰摤湩??硰???楤?瑳汹?昢湯?楳敺?瀲??敓獳潩?螿鳦?搯癩??牨????瑳汹?挢汯牯????昻湯?楳敺?瀲??臥芦???覜蟨???????苧?愼栠敲????潌楧?汤????貇????????楤???楤???潢祤??栯浴??
已经设置了脚本和运行权限了。
后来,写了另外一个小的dll,才发现
原来是临时目录的权限不对,临时目录是在C:windowsTemp
解决办法:
右键C:windowsTemp,共享和安全
添加everyone用户,设置权限为可修改和写入
重启iis即可。
选择文件的对话框,就经常用,发现选择目录的对话框倒是用的少,经常有看到网上在问的
其实,有两个函数实现,在filectrl单元,记得uses
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string; Options: TSelectDirExtOpts = [sdNewUI]; Parent: TWinControl = nil): Boolean; overload;
两个都是叫selectdirectory,重载的。
1.function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
options可参考帮助。
最重要的是用法,帮助有示例:
效果如图:
就是说,是老式的,win95的样式。
2.function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string; Options: TSelectDirExtOpts = [sdNewUI]; Parent: TWinControl = nil): Boolean; overload;
参数说明:
caption:对话框标题
root:对话框显示的可选择根目录
directory:选择结果保存的变量
options:选项,参考filectrl.pas源码,有以下选择项可组合
parent:父窗体
默认有个[sdNewUI]的选项
效果,就是我们现在常见的,下图,添加了sdNewFolder的选项
所以说呢,要实现目录选择对话框,还是要用新的比较好。
标 题: Self-Delete程序之Delphi版本,终于搞定了。
发信站: BBS 水木清华站 (Mon Jun 4 20:50:42 2001)
到Borland的论坛去问了问,确实跟laoduan说得一样,要自己GetProcAddress。代码如下:
program Project1; {$APPTYPE CONSOLE} uses SysUtils, Windows; procedure DeleteSelf; var hModule: THandle; buff: array[0..255] of Char; hKernel32: THandle; pExitProcess, pDeleteFileA, pUnmapViewOfFile: Pointer; begin hModule := GetModuleHandle(nil); GetModuleFileName(hModule, buff, sizeof(buff)); CloseHandle(THandle(4)); hKernel32 := GetModuleHandle('KERNEL32'); pExitProcess := GetProcAddress(hKernel32, 'ExitProcess'); pDeleteFileA := GetProcAddress(hKernel32, 'DeleteFileA'); pUnmapViewOfFile := GetProcAddress(hKernel32, 'UnmapViewOfFile'); asm LEA EAX, buff PUSH 0 PUSH 0 PUSH EAX PUSH pExitProcess PUSH hModule PUSH pDeleteFileA PUSH pUnmapViewOfFile RET end; end; begin try { TODO -oUser -cConsole Main : Insert code here } DeleteSelf; except on E: Exception do begin Writeln(E.Classname, ': ', E.Message); end; end; end.
现在有一点比较古怪,那就是必须把代码放在一个Procedure里,