标签: delphi-2010

使用shell执行以管理员身份运行cmd

我需要在按钮单击上运行cmd作为管理员.有用.但我需要以管理员身份运行它.这是怎么做到的?

 ShellExecute(Handle, 'open', 'c:\Windows\system32\cmd.exe', nil, nil, SW_SHOWNORMAL)
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

20
推荐指数
3
解决办法
5万
查看次数

Delphi新RTTI的实际用法 - 属性,值

在Delphi中找到了关于新RTTI的一个很好的解释,但我不明白我读过的所有重要内容 - 我在哪里可以使用它?

它应该取代什么?

delphi attributes rtti delphi-2010

19
推荐指数
2
解决办法
2945
查看次数

Delphi 2010:如何将整个记录保存到文件中?

我已经定义了一个记录,其中包含许多不同类型的字段(整数,实数,字符串,...以及"数组..."的动态数组).我想将它作为一个整体保存到文件中,然后能够将其加载回我的程序.我不想单独保存每个字段的值.文件类型(二进制或ascii或...)并不重要,因为Delphi可以将其读回记录.

你有什么建议吗?

delphi file-io delphi-2010

19
推荐指数
2
解决办法
2万
查看次数

二进制到Base64(Delphi)

如何获取exe文件的内容并将其转换为Base64编码?

编辑

我用D2010,我想知道它究竟是怎么可能的?

  • open an exe file
  • convert its content into base64

delphi base64 encoding delphi-2010

19
推荐指数
2
解决办法
6万
查看次数

Delphi 2010的编译器版本是什么?

在Delphi 2010中,如果我想这样做:

{$IFDEF VER999}
//some delphi 2010-specific code here
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

我需要使用什么版本代替"999"?

delphi delphi-2010

18
推荐指数
4
解决办法
2万
查看次数

是否有一个Boyer-Moore字符串搜索和快速搜索和替换功能以及Delphi 2010 String(UnicodeString)的快速字符串计数?

我需要三个快速大字符串函数:快速搜索,快速搜索和替换,以及字符串中子字符串的快速计数.

我在C++和Python中遇到过Boyer-Moore字符串搜索,但是用于实现快速搜索和替换的唯一Delphi Boyer-Moore算法是由Peter Morris(前身为DroopyEyes软件)及其网站的FastStrings的一部分.和电子邮件不再有效.

我已经将FastStrings移植到Delphi 2009/2010的AnsiStrings中,其中一个字节等于一个AnsiChar,但是使它们也可以在Delphi 2010中使用String(UnicodeString)显得非常重要.

使用这个Boyer-Moore算法,应该可以轻松地进行不区分大小写的搜索,以及不区分大小写的搜索和替换,没有任何临时字符串(使用StrUpper等),并且不调用比Boyer更慢的Pos()需要在重复搜索同一文本时进行摩尔搜索.

(编辑:我有一个部分解决方案,写作这个问题的答案,几乎100%完成,它甚至有一个快速的字符串替换功能.我相信它必须有bug,特别是认为,因为它假装是Unicode由于未实现的Unicode承诺,它必须存在故障.)

(编辑2:有趣和意外的结果;堆栈上的unicode代码点表的大堆栈大小 - 下面的代码中的SkipTable严重阻碍了你可以在unicode字符串boyer中完成的双赢优化量 - 摩尔字符串搜索.感谢Florent Ouchet指出我应该立即注意到的内容.)

delphi algorithm replace delphi-2010 boyer-moore

18
推荐指数
1
解决办法
5620
查看次数

如何从Graphics单元获取所有支持的文件格式?

当任何TGraphic后代使用类过程TPicture.RegisterFileFormat()注册其自己的图形文件格式时,它们都存储在Graphics.FileFormats全局变量中.

太糟糕了,FileFormats变量不在"Graphics.pas"的"interface"部分,所以我无法访问它.我需要读取此变量来为我的文件列表控件实现一个特殊的过滤器.

如果不手动修复Graphics.pas的源代码,我可以获得该列表吗?

delphi graphics file delphi-2010 formats

18
推荐指数
3
解决办法
2355
查看次数

当一个类实现一个后代接口时,为什么它不会自动计为实现基接口?

这不会编译的原因是什么?

type
  IInterfaceA = interface ['{44F93616-0161-4912-9D63-3E8AA140CA0D}']
    procedure DoA;
  end;

  IInterfaceB = interface(IInterfaceA) ['{80CB6D35-E12F-462A-AAA9-E7C0F6FE0982}']
    procedure DoB;
  end;

  TImplementsAB = class(TSingletonImplementation, IInterfaceB)
    procedure DoA;
    procedure DoB;
  end;

var
  ImplementsAB: TImplementsAB;
  InterfaceA: IInterfaceA;
  InterfaceB: IInterfaceB;
begin
  ImplementsAB := TImplementsAB.Create;
  InterfaceA := ImplementsAB; >> incompatible types
  ...
end
Run Code Online (Sandbox Code Playgroud)

相比之下,这就是我的工作方式:

InterfaceA := ImplementsAB as InterfaceB;
Run Code Online (Sandbox Code Playgroud)

要么

InterfaceA := InterfaceB;
Run Code Online (Sandbox Code Playgroud)

我的意思是,如果IInterfaceB继承自IInterfaceA且TImplementsAB实现了IInterfaceB,那么实现IInterfaceA并且类型兼容也是不合逻辑的?

delphi interface delphi-2010

18
推荐指数
2
解决办法
566
查看次数

接口,匿名方法和内存泄漏

这是一个构造的例子.我不想在这里发布原始代码.我尝试提取相关部分.

我有一个管理监听器列表的界面.

TListenerProc = reference to procedure (SomeInt : ISomeInterface);

ISomeInterface = interface
   procedure AddListener (Proc : TListenerProc);   
end;
Run Code Online (Sandbox Code Playgroud)

现在我注册一个监听器:

SomeObj.AddListener (MyListener);

procedure MyListener (SomeInt : ISomeInterface);
begin
  ExecuteSynchronized (procedure
                       begin
                       DoSomething (SomeInt);
                       end);
end;
Run Code Online (Sandbox Code Playgroud)

我确实得到了内存泄漏.永远不会释放匿名方法和接口.我怀疑这是由于某种循环引用.匿名方法保持界面生效,界面保持匿名方法生效.

两个问题:

  1. 你支持这个解释吗?或者我在这里错过了其他什么?
  2. 我能做些什么吗?

提前致谢!


编辑:在一个小到足以在此发布的应用程序中重现这一点并不容易.我现在能做的最好的事情如下.匿名方法不会在这里发布:

program TestMemLeak;

{$APPTYPE CONSOLE}

uses
  Generics.Collections, SysUtils;

type
  ISomeInterface = interface;
  TListenerProc  = reference to procedure (SomeInt : ISomeInterface);

  ISomeInterface = interface
  ['{DB5A336B-3F79-4059-8933-27699203D1B6}']
    procedure AddListener (Proc : TListenerProc);
    procedure NotifyListeners;
    procedure Test;
  end;

  TSomeInterface = class (TInterfacedObject, ISomeInterface) …
Run Code Online (Sandbox Code Playgroud)

delphi memory-management interface anonymous-methods delphi-2010

17
推荐指数
1
解决办法
1057
查看次数

Delphi 2010中记录与类的类方法

我刚刚开始使用Delphi 2010中的新单元IOUtils.pas,我发现它们将所有方法都放在Records(TFile, TPath, TDirectory)类函数和过程中.

在记录而不是类中执行此操作有什么好处吗?在这两种情况下都不需要任何变量或实例,但我不确定在内存消耗或性能改进方面是否有任何实际好处.

delphi delphi-2010

17
推荐指数
3
解决办法
4836
查看次数