据说delphi5到delphi7一直有这个bug,不知道更高的版本有没有改过来

我用的是delphi7

 

对Delphi了解得并不多,这次写ocx也是赶鸭子上架。所以这个bug的原因我也说不明白,但是确实把问题解决了,下面把解决方法说一下(其实也都是从网上搜的,稍加整理)

 

1、到delphi安装目录下,找到Source\VCL\AxCtrls.pas文件(这个文件中的代码有bug),拷贝到你的项目文件夹下,把这个文件添加为你项目的一部分(这样delphi就会应用你修改后的AxCtrls.pas)

 

2、找到AxCtrls.pas文件中的函数ParkingWindow,用下面的代码替换


  function   ParkingWindow:   HWND;  
  var  
      TempClass:   TWndClass;  
      ParkingName   :   String;  
  begin  
      Result   :=   xParkingWindow;   
      //if   Result   <>   0   then   Exit;   //这行代码在delphi5和delphi6中好像不用注释掉
    
      //   fix   Dax   error   :   accessviolation   (win2k,   win   xp)  
      ParkingName   :=   'DAXParkingWindow_'   +       Format('%p',   [@ParkingWindowProc]);  
   
      FillChar(TempClass,   sizeof(TempClass),   0);  
      if   not   GetClassInfo(HInstance,   PChar(ParkingName),   TempClass)   then   //   fix   Dax   error   :   accessviolation   (win2k,   win   xp)  
      begin  
          TempClass.hInstance   :=   HInstance;  
          TempClass.lpfnWndProc   :=   @ParkingWindowProc;  
          TempClass.lpszClassName   :=   PChar(ParkingName);   //   fix   Dax   error   :   accessviolation   (win2k,   win   xp)  
          if   Windows.RegisterClass(TempClass)   =   0   then  
              raise   EOutOfResources.Create(SWindowClass);  
      end;  
      xParkingWindow   :=   CreateWindowEx(WS_EX_TOOLWINDOW,   TempClass.lpszClassName,   nil,  
          WS_POPUP,   GetSystemMetrics(SM_CXSCREEN)   div   2,  
          GetSystemMetrics(SM_CYSCREEN)   div   2,   0,   0,   0,   0,   HInstance,   nil);  
      SetWindowPos(xParkingWindow,   0,   0,   0,   0,   0,   SWP_NOACTIVATE   or   SWP_NOREDRAW  
          or   SWP_NOZORDER   or   SWP_SHOWWINDOW);  
      Result   :=   xParkingWindow;  
  end;  

 

3、编译项目即可

 

参考资料:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=919005

http://blog.chinaunix.net/u/4831/showart_187926.html,这个文档说delphi7解决不了,其实是少注释了一行代码

posted @ 2008-08-29 11:12 队长 阅读(730) | 评论 (0)编辑
在ClickOnce的发布选项中没有在桌面创建快捷方式的选项,而许多客户习惯于使用桌面快捷方式。
大家都知道ClickOnce程序的实际路径是不固定的,每当程序更新到新版本的时候,启动位置都会改变,这样传统的快捷方式创建方式就不好用了。

通过研究那个开始菜单中的快捷方式,我发现其实他就是一个文件,后缀是.appref-ms,而且里面的内容是文本格式,例如:
http://zjj/WindowsApplication26/Win26.application#Win26.application, Culture=neutral, PublicKeyToken=6e8580a27fa3dbc7, processorArchitecture=msil
可以看到,这里面没有存储实际的可执行文件的地址,是一个通用地址,即时有新版本发布,也一样好用。

有了这个发现,创建桌面快捷方式就很简单了:在桌面上创建一个后缀为.appref-ms的文本文件即可。
文本内容:
1、在自己的开发机器上发布一下
2、打开开始菜单,找到那个快捷方式文件,用记事本打开

需要注意的是:文本的编码格式是Unicode
posted @ 2008-05-12 12:46 队长 阅读(552) | 评论 (5)编辑
通过设置IIS的Gzip压缩可以极大地减小网络上传输的数据流量

设置过程如下:
1、打开Internet信息管理器,右击”网站“(一定要注意是【网站】文件夹,不是那个【默认网站】),点”属性“菜单-选”服务“选项卡,选上“压缩应用程序文件”复选框,那个“压缩静态文件”好像可以不选
2、打开Web服务扩展,在其中增加Gzip压缩扩展并启用
3、设置IIS可进行压缩的文件类型,这一步骤比较繁杂,有一高人写了一个批处理文件,用来简化此操作,批处理内容如下:
IISreset.exe /stop 
 
cscript adsutil.vbs set w3svc/filters/compression/parameters/HcDoDynamicCompression true
cscript adsutil.vbs set w3svc/filters/compression/parameters/HcDoStaticCompression true 
cscript.exe adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "ppt" "xls" "xml" "pdf" "xslt" "doc" "xsl" "htc" "js" "css" 
cscript.exe adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "ppt" "xls" "xml" "pdf" "xslt" "doc" "xsl" "htc" "js" "css" 
cscript.exe adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "dll" "exe" "aspx" "asmx" "ashx" 
cscript.exe adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "dll" "exe" "aspx" "asmx" 
cscript.exe adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel "9"
cscript.exe adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel "9" 
 
IISreset.exe /restart


把该批处理文件拷贝到c:\inetpub\AdminScripts下执行即可

如果你设置完成了,可以访问下面的地址测试效果:
http://www.port80software.com/tools/compresscheck.asp

这个工具的使用建立在你的网站在Internet上可访问的基础上。如果哪位高人有可以本地使用的工具,告诉我一下,不胜感激!

参考文档:
http://angryhacker.com/blog/archive/2007/09/08/iis-compression-and-.net-web-services.aspx
http://www1.lob.cn/n2087c8.shtml
http://www.cnblogs.com/Elong/archive/2006/12/14/592394.html


posted @ 2008-04-23 16:05 队长 阅读(264) | 评论 (0)编辑

Men are all alike in their promises.

It is only in their deeds that they differ.

posted @ 2008-02-02 12:49 队长 阅读(62) | 评论 (0)编辑
     摘要: 说明,这个汉化包来自http://d.download.csdn.net/source/296105,所有的感谢都给他。
我把他的汉化包DLL用Reflector反编译了一下,用7.3.5重新编译了一遍。
共享给大家,原作者没有发布源代码,我也就不发了,其实反编译很容易的。

附使用方法(同样源自allisnew).........  阅读全文
posted @ 2008-01-08 10:56 队长 阅读(1862) | 评论 (4)编辑

FileStream fss = File.OpenRead(@"d:\a.dll");

FileStream fsd = File.OpenWrite(@"d:\b.dll");

int bytesRead = 0;

while ((bytesRead = fss.Read(buffer, 0 , bufferSize)) > 0)

{

    fsd.Write(buffer, 0, bytesRead);

}

fss.Close();

fsd.Close();

 

 

Stream si = File.OpenRead(@"d:\a.dll");

Stream so = File.OpenWrite(@"d:\b.dll");

BufferedStream bsi = new BufferedStream(si);

BufferedStream bso = new BufferedStream(so);

while ((bytesRead = bsi.Read(buffer, 0 , bufferSize)) > 0)

{

    bso.Write(buffer, 0, bytesRead);

}

bio.Flush();

bsi.Close();

bso.Close();

 

TextReader两个子类:StreamReader和StringReader

 

  • x.Read为从x中读取
  • y.Write为往y中写入
  • 被写入的流可以调用Flush方法
  • 流通常都没有Open方法,也不需要Open
  • 流都有Close方法,且必须调用
  • 使用缓冲流(BufferedStream)会提高效率,因为你自定义的buffer大小不一定是正合适的
  • 流可以叠加、嵌套,可以认为有内在流和外部流之分,当调用外部流的Close方法时,它会自动调用内在流的Close方法
  • 流本身可以认为就是字节流,为了使用方便,我们通常会用...Reader和...Writer
  • 构造...Reader的方法通常有两种:1 File.OpenText类,2 StreamReader sr = new StreamReader(源流)
posted @ 2007-12-09 14:02 队长 阅读(47) | 评论 (0)编辑
  1. 买商品房太贵,买经济适用房没资格。——都市工薪族
  2. 有大理想的人,总是要牺牲小的乐趣。
  3. 物价连连上涨,还说老百姓承担得起。不知说谎的人会不会脸红,他们是长期白吃白喝,还是不食人间烟火?
  4. 人永远不用和猪摔跤,双方搞得一身泥,正是猪喜欢的结果。
  5. 大学应该是社会的理想模型,而不应该是社会的缩影。
  6. 不准对我耍酷、不准让我吃醋、吵架你要让步、揍你你要挺住。——野蛮女友
  7. 虽然我家里穷,但是,我在道德上并不处于劣势。慈善资助不是助学贷款,也不是交易。
  8. 男:我赚钱就是为了喝酒;女:我喝酒就是为了赚钱。
  9. 你可以侮辱我的人格,绝不可以侮辱我的智商。
posted @ 2007-11-10 09:27 队长 阅读(321) | 评论 (0)编辑

用了DevExpress的GridControl,在数据绑定的时候,出现过几次莫名奇妙的问题,数据已经在DataTable中存在了,但是GridControl中的显示好像是不稳定的状态,Grid最下方的新行的Indicator显示比较奇怪,是一个小星星。再做其他操作的时候,这行还会消失。

最终执行了bindingSource.ResetBindings(false)解决了。

在这打个记号,备忘!

posted @ 2007-09-20 12:58 队长 阅读(97) | 评论 (0)编辑

测试

Balloon

真的那么好用吗?

果然好用诶!

posted @ 2007-09-18 16:30 队长 阅读(170) | 评论 (1)编辑

在我开发的WinForm+WebService程序中,偶尔会出现WebService无法调试的状况,莫名其妙地就会跟踪到这样的代码段:
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.ComponentModel.BrowsableAttribute(true)]
[System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Visible)]
public override System.Data.SchemaSerializationMode SchemaSerializationMode {
 get {
  return this._schemaSerializationMode;
 }
 set {
  this._schemaSerializationMode = value;
 }
}

解决方法是对IDE进行设置:【工具】-【选项】-【调试】-【常规】,去掉[启用“仅我的代码”(仅限托管)]设置项前面的复选框。

也有人说删除对WebService的引用,然后重新添加就好了。

参考:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=244866&SiteID=1
https://blogs.msdn.com/jmstall/archive/2004/12/31/344832.aspx

posted @ 2007-09-17 15:43 队长 阅读(272) | 评论 (0)编辑