小编Rob*_*edy的帖子

一个数字分成多少次,剩下多少?

我需要Delphi中的算法来为指定的整数值生成分区.

示例:对于13,如果将5指定为分区的最大值,则它将给出5,5,3; 如果将4指定为最大分区值,则结果应为4,4,4,1,依此类推.

delphi algorithm integer

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

如何在不知道类型参数的情况下声明泛型类型的变量?

如何定义泛型TList类型,以便我可以声明该类型的变量,然后为其分配任何特化TList<>

我想声明这个变量:

var
  MyList:THowToDeclareThisListType<T>;
Run Code Online (Sandbox Code Playgroud)

然后像这样实例化它:

MyList:=THowToDeclareThisListType<integer>.Create;
Run Code Online (Sandbox Code Playgroud)

要么

MyList:=THowToDeclareThisListType<double>.Create;
Run Code Online (Sandbox Code Playgroud)

我必须在这里遗漏一些非常明显的东西.我不想要类,只是一个简单的类型定义.

delphi generics type-erasure

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

如何在没有焦点的情况下保持表格处理热键?

我们有一个Delphi XE2应用程序.Form1有热键Ctrl+ F,并且Form2,它是活动的,没有热键.用户按下Ctrl+ FForm2并且Form1处理该热键.这完全不正确,因为我们看到了非活动表单的活动.我如何解决它?

forms delphi hotkeys

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

线程ID的GetModuleFileNameEx?

我试图获取线程ID的文件路径.我希望这会有用......但事实并非如此

NtOpenThread(@hProc, THREAD_ALL_ACCESS, @ObjAttr, @ClientID) ;
        pBuf := AllocMem(MAX_PATH);
        GetModuleFileNameEx(hProc, 0, pBuf, MAX_PATH);
Run Code Online (Sandbox Code Playgroud)

知道怎么做吗?

delphi winapi delphi-7

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

为什么编译器让我调用pow和sqrt,即使我没有包含cmath?

我认为答案应该是否定的,但我今天编写了一些代码,完美编译并使用pow和sqrt显示正确的答案,即使一开始我忘了添加 #include<cmath> 我在这里缺少什么?

c++ cmath

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

如何阻止IDE在非Windows项目中引用特定于Windows的XML单元?

我想在Delphi XE5中创建一个Android程序来处理XML文件.我用TXMLDocument.

但是,我无法编译和运行它,因为Delphi Xml.Win.msxmldom在该uses部分中反复添加.发生以下错误:

[DCC致命错误] Unit1.pas(11):F1026找不到文件:'C:\ Users\HamiD\Documents\RAD Studio\Projects\Xml.Win.msxmldom.dcu'(单位范围"Xml.Win"表示Win32 ,仅限Win64)

如何避免在我的项目中使用该单元?

xml delphi android

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

如何根据特定规则对TStringList进行排序?

我有一个TStringList有很多字符串的字符串.

我现在要做的是TStringList根据它们所在的列来对某些值进行排序TStringList.

例如.

adsfoiadjfoaidjfoaidfjo BABABA asdfsd 0101010
skfjlgjljkglsdkgjasaasd BABABA dafdff 0419299
asdaksdjakbkj3409560295 BABABA kjfhan 0923858
dsdddsdasdadasdasdasdgg BABABA dafdff 0419299
45645654654654654654666 BABABA dafdff 0489421
dsdddsdasdadasdasdasdgg CACACA dafdff 0419299

正如您所看到的那样,第二行和第四行具有相同的值BABABA以及行尾的相同数字,第五行具有相同的BABABA但不是相同的数字.第六行具有相同的数字但不是相同的BABABA.

我想要对它们进行排序的正确方法是

adsfoiadjfoaidjfoaidfjo BABABA asdfsd 0101010
skfjlgjljkglsdkgjasaasd BABABA dafdff 0419299
dsdddsdasdadasdasdasdgg BABABA dafdff 0419299
45645654654654654654666 BABABA dafdff 0489421
asdaksdjakbkj3409560295 BABABA kjfhan 0923858
dsdddsdasdadasdasdasdgg CACACA dafdff 0419299

我想要的是最重要的是在BABABA(第25-30栏)之后排序,如果数字,数字也匹配.如果数字不匹配,它应该在BABABA之后排序,如果没有排序,它可以以任何方式排序.

delphi sorting tstringlist

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

如何从Delphi可执行文件中删除包含类型名称的字符串,并为项目全局禁用RTTI?

更新:尽管上面提到:问题已经有了答案,链接问题中的解决方案在Delphi XE6中不起作用

只是注意到使用Delphi生成的所有可执行文件(包括发行版)都包含该可执行文件使用的所有类型的名称以及它们所属的单元的名称.如果您不小心删除RTTI信息,那么它还包含类方法,字段和属性名称.

这些字符串用于什么(特别是在发布版本中)?

有没有办法防止类型和单位名称被写入可执行文件?

重现这一步的步骤:

  1. 创建一个新的Delphi项目.
  2. 定义一个类

    {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
    type TPerson = class
    private
      FName: string;
    public
      constructor Create(Name: string);
      destructor Destroy; override; 
    end;
    
    constructor TPerson.Create(Name: string);
    begin
      inherited Create;
      FName := Name;
    end;
    
    destructor TPerson.Destroy;
    begin
      inherited Destroy;
    end;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建该类的对象,以便引用/使用该类.

    var person: TPerson;
    begin
      person := TPerson.Create('John Doe');
      person.Free;
    end;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在发布模式下编译项目.

  5. 使用十六进制查看器并在可执行文件中搜索类的名称(TPerson).

如何防止类名写入可执行文件?

也:

如何在项目级别删除RTTI,这样就不需要手动遍历每个包含的单元并添加{$ RTTI EXPLICIT METHODS([])PROPERTIES([])FIELDS([])}子句?

我尝试在.dpr文件的顶部添加$ RTTI EXPLICIT METHODS([])PROPERTIES([])FIELDS([])}但这在Delphi XE6中不起作用.

delphi

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

与DateSeparator和LongTimeFormat相关的未声明的标识符错误

我有一个在Delphi 5中创建的程序,该程序在Win7和Win8上仍然运行得非常完美.

但是,当试图在XE6(试用版)中运行此代码时,我遇到两个错误,我无法修复.错误是'DateSeparator'和'LongTimeFormat',每个都有错误"未声明的标识符"

代码段如下:

function AccurateTimeStamp:String;
begin
  DateSeparator:='.';
  LongTimeFormat:='hhmmsszzz';
  result:=TimeToStr(Now);
end;
Run Code Online (Sandbox Code Playgroud)

我对Delphi很新,但我很确定"未声明的标识符"意味着该项目在代码之前未被识别.如果是这种情况,我不知道如何做到这一点.也许,自Delphi 5以来,错误与代码格式的变化有关.

delphi delphi-5 delphi-xe6

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

为什么LoadLibrary会成功或失败,具体取决于当前目录?

我遇到了LoadLibrary的问题,这在我之前从未发生过,这是我第一次看到这个,我正在尝试在"C:\ Program Files(x86)\ Mozilla中加载模块"nss3.dll" Firefox \"与LoadLibrary,为了从它导入一些功能,但它失败了0返回值,我试图从system32文件夹硬编码.dll它工作正常,任何想法发生了什么?

编辑:我忘了提及,克服这个问题的一种方法是调用SetCurrentDirectory然后导入模块而不指定.dll的路径,但事实并非如此,我想找出它为什么会发生在我身上.

编辑:这是一些片段(这是有效的):

var
  NSSModule: HModule;
begin
  SetCurrentDir('C:\Program Files (x86)\Mozilla Firefox');
  NSSModule := LoadLibrary('nss3.dll');
Run Code Online (Sandbox Code Playgroud)

这个,不起作用,不知道为什么......:

var
  NSSModule: HModule;
begin
  NSSModule := LoadLibrary('C:\Program Files (x86)\Mozilla Firefox\nss3.dll');
Run Code Online (Sandbox Code Playgroud)

delphi firefox loadlibrary delphi-xe2

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