Tag: delphi

如何指示鼠标滚轮input来控制光标而不是聚焦?

我使用了许多滚动控件:TTreeViews,TListViews,DevExpress cxGrids和cxTreeLists等。当鼠标滚轮旋转时,带焦点的控件接收input,不pipe鼠标光标控制在什么位置。 如何将鼠标滚轮input指向控制鼠标光标的任何东西? Delphi IDE在这方面工作得非常好。

delphi“与”关键字是一个不好的做法?

我一直在阅读有关delphi的关键字坏的事情,但在我看来,如果你不过度使用它。 它可以使你的代码看起来简单。 我经常把所有的TClientDataSets和TFields放在TDataModules中。 所以在我的表单中我有这样的代码 procedure TMyForm.AddButtonClick(Sender: TObject); begin with LongNameDataModule do begin LongNameTable1.Insert; LongNameTable1_Field1.Value := "some value"; LongNameTable1_Field2.Value := LongNameTable2_LongNameField1.Value; LongNameTable1_Field3.Value := LongNameTable3_LongNameField1.Value; LongNameTable1_Field4.Value := LongNameTable4_LongNameField1.Value; LongNameTable1.Post; end end; 没有with关键字我必须写这样的代码 procedure TMyForm.AddButtonClick(Sender: TObject); begin LongNameDataModule.LongNameTable1.Insert; LongNameDataModule.LongNameTable1_LongNameField1.Value := "some value"; LongNameDataModule.LongNameTable1_LongNameField2.Value := LongNameDataModule.LongNameTable2_LongNameField1.Value; LongNameDataModule.LongNameTable1_LongNameField3.Value := LongNameDataModule.LongNameTable3_LongNameField1.Value; LongNameDataModule.LongNameTable1_LongNameField4.Value := LongNameDataModule.LongNameTable4_LongNameField1.Value; LongNameDataModule.LongNameTable1.Post; end; 我认为使用with关键字更容易阅读。 我应该避免使用with关键字吗?

根据分隔符将string拆分为一个string数组

我试图find一个Delphi函数,将inputstring拆分成一个基于分隔符的string数组。 我在Google上发现了很多,但都似乎有自己的问题,我一直没能得到任何工作。 我只需要将一个像"word:doc,txt,docx"这样的string分割成一个基于':'的数组。 结果将是['word', 'doc,txt,docx'] 。 有没有人有他们知道的function? 谢谢

如何使Delphi TWebbrowser组件在IE9模式下运行?

由于TWebbrowser在IE7兼容模式下运行,因此我遇到了TWebbrowser的Javascript错误。 有没有办法来防止这个,只是让它运行在IE9模式?

我如何searchDelphi文档?

使用networkingsearch很难findDelphi文档。 通常这些文档远离命中列表的顶部。 例如,Googlesearchdelphi setlength就会得到如下结果: 指向官方Embarcadero文档的第一个命中是第八位,如上所示,列表的底部。 但是它是Delphi 2009文档的一个链接。理想情况下,我想查找最新版本的文档。

为什么在使用或释放​​事物之前不应该使用“如果已分配()”?

这个问题是我在现在看到几个不同时代的人们对于计算器的特别评论的延续。 我和那些教我Delphi的开发者一起,为了保持安全,在释放对象之前,以及在做其他各种事情之前,总是先检查if assigned() 。 不过,我现在被告知我不应该添加这个检查。 我想知道是否应用程序编译/运行如果我这样做,或者如果它不会影响结果的任何差异… if assigned(SomeObject) then SomeObject.Free; 假设我有一个表单,并且在创build表单时在后台创build一个位图对象,并在完成后释放它。 现在我想我的问题是,当我尝试访问可能在某些时候可能已被释放的对象时,我习惯于将这个检查放在很多代码上。 即使没有必要,我也一直在使用它。 我喜欢彻底… unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FBitmap: TBitmap; public function LoadBitmap(const Filename: String): Bool; property Bitmap: TBitmap read FBitmap; end; var Form1: TForm1; […]

用于Delphi的分析器和内存分析工具

我最近从delphi4升级到delphi2009年。随着delphi4我一直使用普里莫兹Gabrijelcic GpProfile作为一个分析器和内存 侦查 由涡轮动力内存分析和泄漏debugging。 两者对我都很好。 但是我现在需要一些新的工具,可以和Delphi 2009一起工作。 delphi的分析/分析工具的领先者显然是AutomatedQA的AQTime 。 他们最近甚至吞下了Atanas Soyanov的Memproof ,据我所知 ,它是一个出色的免费内存分析工具,并将其function整合到AQTime中。 但是AQTime对个人程序员来说是非常昂贵的。 它实际上比成本更高的delphi2009成本更高! 所以我的问题是:在当前版本的Delphi中,是否有其他更便宜的选项来进行性能分析和内存分析?您是否满意和推荐?还是应该咬紧牙关,为AQTime付出巨额代价? Adaline:早期的答复者似乎表示,已经包含在Delphi中的FastMMpipe理器非常适合查找内存泄漏。 那么,有没有什么好的替代品的源代码分析? 我很好奇的是迈克尔·阿道夫(Michael Adolph )的ProDelphi,它的价格不到AQTime的六分之一。 你用它吗? AQTime的价值是六倍吗? 钼2:我下载了AQTime和ProDelphi的试用版本。 AQTime起初有点令人难以置信,有点混乱。 花了几个小时find一些挂钩的技巧。 ProDelphi非常像我曾经习惯的GpProfile。 但它的窗户混乱和混乱,它不像GpProfile那么好。 对我来说,巨大的差异似乎是: ProDelphi更改您的代码。 AQTime没有。 如果出现问题,更改代码可能会破坏数据,但我对GpProfile的使用经验是,它从来没有发生过我。 另外一个用于AQTime。 ProDelphi要求您closures优化。 但是你想要分析的是你的程序在运行的方式上进行优化。 另外一个用于AQTime。 ProDelphi只能剖析function或程序。 AQTime可以下到个别的行。 AQTime加2。 ProDelphi有一个免费的版本,将20个例程,其专业版的成本低于100美元。 AQTime是600美元。 Plus ProDelphi 4。 现在比分是4-4。 你怎么看? 第三名:Primoz Gabrijelcic计划再次获得GpProfile。 请参阅他对以下某些回复的评论。 他在StackOverflow上作为Gabr 。 4:看起来好像有可能是一个探查器解决scheme。 见安德烈的开放源码asmprofiler,如下所述 。

屏幕录像机

我对使用Delphi / Pascal或C ++编写的库(对于Windows)感兴趣,它允许我logging(以video格式)桌面屏幕,要求: 必须能够指定帧速率,或者至less能够logging@ 5fps; 必须是开源或免费的; 输出格式可以是几乎任何一种,但质量必须足够好,才能够从logging中读取文本; 如果可能的话, 选项无颜色logging(灰度); 多显示器感知 ; 跨平台(Windows和Linux,其他平台也不错,但不是必需的); 如果有机会的话,我没有解释正确的东西,请随时提问,以便我可以重新修改或提供更多的细节等。

缓冲文件(用于更快的磁盘访问)

我正在处理大文件,直接写入磁盘很慢。 由于文件很大,我无法将其加载到TMemoryStream中。 TFileStream没有缓冲,所以我想知道是否有一个可以提供缓冲stream的自定义库,或者我应该只依靠OS提供的缓冲。 操作系统的缓冲是否可靠? 我的意思是如果caching已满,可能会从caching刷新旧文件(我的),以便为新文件腾出空间。 我的文件在GB范围内。 它包含数百万条logging。 不幸的是,logging不是固定的大小。 所以,我必须做数以百万计的读数(在4到500字节之间)。 阅读(和写作)是连续的。 我不会跳到文件中(我认为这是缓冲的理想select)。 最后,我必须将这样的文件写回到磁盘(再次是数百万小的写入)。 大卫Heffernan赞美的一句话! David提供了一大段代码来提供缓冲磁盘访问。 人们你必须有他的BufferedFileStream! 这是黄金。 不要忘记注册。 谢谢大卫。

为什么WideString不能用作interop的函数返回值?

我有不止一次build议人们使用WideStringtypes的返回值来进行互操作。 访问Delphi DLL抛出ocasionalexception ASP.NET Web应用程序调用IIS Web服务器上的Delphi DLL,在返回PCharstring时locking 为什么Delphi DLL在不使用ShareMem的情况下使用WideString? 这个想法是WideString和BSTR是一样的。 因为BSTR被分配在共享的COM堆上,所以在一个模块中分配并且在不同的模块中释放是没有问题的。 这是因为各方都同意使用相同的堆,COM堆。 但是,似乎WideString不能用作interop的函数返回值。 考虑下面的Delphi DLL。 library WideStringTest; uses ActiveX; function TestWideString: WideString; stdcall; begin Result := 'TestWideString'; end; function TestBSTR: TBstr; stdcall; begin Result := SysAllocString('TestBSTR'); end; procedure TestWideStringOutParam(out str: WideString); stdcall; begin str := 'TestWideStringOutParam'; end; exports TestWideString, TestBSTR, TestWideStringOutParam; begin end. 和下面的C ++代码: […]