小编Mar*_*ato的帖子

减少exe文件

使用Delphi(或者通常是任何工具,如果存在的话),是否可以减小exe文件的大小,删除所有未使用但存在的代码?
(例如,存在但从不调用的函数或过程).
我记得使用Pascal,使用unit(没有对象),编译器只包含真正使用的过程和函数,并将从最终的exe中删除单元中未使用的例程.

使用Object-pascal,我记得在Delphi 1中,一个对象的所有成员都包含在exe中;
有什么变化,直到Delphi-XE2?

delphi exe file delphi-xe2

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

组合而不重复N元素而不使用for..to..do

我希望在列表中加载N个数字的组合而不重复,给予输入元素和组.例如,有4个元素[1,2,3,4],我有:

Group 1: [1][2][3][4]; 
Group 2: [1,2][1,3][1,4][2,3][2,4][3,4];
Group 3: [1,2,3][1,2,4][1,3,4][2,3,4]
Group 4: [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

现在,我已经使用嵌套循环解决了它,例如对于组2,我写道:

  for x1 := 1 to 3 do
    for x2 := Succ(x1) to 4 do
      begin
        // x1, x2 // 
      end
Run Code Online (Sandbox Code Playgroud)

或者对于第3组,我写道:

  for x1 := 1 to 2 do
    for x2 := Succ(x1) to 3 do
      for x3 := Succ(x2) to 4 do
      begin
        // x1, x2, x3 // 
      end
Run Code Online (Sandbox Code Playgroud)

等其他团体.一般来说,如果我想为N组做,我可以这样做,而不用嵌套循环编写N程序?我已经想到了一个双重while..do循环一个用于计数器和一个用于组计数,但所以有点难,我想知道是否有一些解决方案更简单和快速,也使用运算符布尔或其他东西.谁可以给我一些建议呢?非常感谢.

delphi algorithm combinatorics delphi-xe2

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

矩阵和算法"螺旋"

我想问一下是否有一些算法准备就绪,这让我做到了这一点:我有一个矩阵m(col)xn(行)和mxn元素.我希望从中心开始给这个元素定位并旋转为螺旋,例如,对于矩阵3x3我有9个元素如此定义:

 5  6  7
 4  9  8
 3  2  1 
Run Code Online (Sandbox Code Playgroud)

或者对于una矩阵4 x 3我有12个元素,定义如下:

  8   9  10  1
  7  12  11  2
  6   5   4  3
Run Code Online (Sandbox Code Playgroud)

或者,矩阵5x2我有10个如此定义的元素:

    3  4
    7  8
   10  9
    6  5 
    2  1
Run Code Online (Sandbox Code Playgroud)

我已经解决了基本上定义mxn元素的整数数组并手动加载值的问题,但是对我来说就像那个自动生成算法的矩阵一样.感谢谁能帮我找到一些东西,非常感谢.

UPDATE

这个代码,我想做的事情,但不是在delphi中; 只是我需要从1开始而不是从0开始.重要的是它对任何matrics mx n都有效.谁帮我在delphi中翻译呢?

(defun spiral (rows columns)  
  (do ((N (* rows columns))       
    (spiral (make-array (list rows columns) :initial-element nil))      
    (dx 1) (dy 0) (x 0) (y 0)    
   (i 0 (1+ i)))     
 ((= i N) spiral)   
 (setf (aref spiral y x) i) …
Run Code Online (Sandbox Code Playgroud)

delphi algorithm matrix spiral delphi-xe2

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

FileSize,与这个程序有什么区别,哪个更好用?

关于获取文件的大小,我有这两个功能:

function GetFileSize1(const FileName: TFileName): Int64;
var
 iTmp: Int64;
 SearchRec: TSearchRec;
begin
  iTmp := -1;
  if FindFirst(FileName, faAnyFile, SearchRec) = 0 then
  begin
    iTmp := SearchRec.Size;
    System.SysUtils.FindClose(SearchRec);
  end;
  Result := iTmp;
end;
Run Code Online (Sandbox Code Playgroud)

和:

function GetFileSize2(const FileName: TFileName): Int64;
var
 FileStream: TFileStream;
begin
  FileStream := TFileStream.Create(FileName, fmOpenRead);
  try
    Result := FileStream.Size; 
  finally  
    FileStream.Free;
  end; 
end;
Run Code Online (Sandbox Code Playgroud)

在实践中,它有什么区别?当然,两者都返回相同的结果,但更加可信,更快,更安全?或者更好,什么是可取的用途?第一还是第二?非常感谢.

delphi delphi-xe2

7
推荐指数
2
解决办法
1068
查看次数

TPanel透明

我需要在我的表单中使用透明tpanel.谁可以建议我一个好的组件,可能是免费的?如果不是很长可以发布代码或一些关于它的链接?非常感谢.马塞罗.

delphi delphi-xe2

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

Delphi中的线程问题

我在 Delphi 中遇到线程问题。当使用 TIdHashMessageDigest5 从大文件中获取 MD5 时,我注意到它花费了太多时间,最终导致应用程序冻结。

我正在考虑使用单独的线程。因此,我制作了一个小表单,在其中插入一条简单的消息、一个按钮和一个 pbstMarquee 样式的进度条。我在此表单的 show 事件上启动了一个线程。

我的问题是:我想在 HashStreamAsHex 成功完成读取后关闭此表单,但我该怎么做?我尝试在同步时调用 Close 方法,但随后窗体关闭而不等待该线程完成。我也尝试过使用waitfor方法,没有成功。

有人可以帮我解决这个问题,给我一些例子,或链接或类似的东西?

非常感谢和抱歉我的英语不好。

About form:
-----------
procedure TFormProgress.FormProgressOnShow(Sender: TObject);
begin
  ProgressThread := TProgressThread.Create(True);
  ProgressThread.Form := FormProgress;
  ProgressThread.FileSrc := uFileSrc;
  ProgressThread.Start;
end;

About thread:
-------------
procedure TProgressThread.Execute;
begin
  FreeOnTerminate := True;
  uFileMD5 := GetFileMd5 (uFileSrc)  // function is definited in other unit.
  Self.WaitFor;
  Synchronize(DoSync);
end;

procedure TProgressThread.DoSync;
begin
  oForm.Close;
end;

GetFileMd5 è so defined:

function GetFileMD5(const Src: TFileName): UnicodeString;
var
  Md5: TIdHashMessageDigest5;
  FileSrc: TFileStream;
  StrMd5: …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading md5

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

通用列表和重复记录

使用泛型TList集合:是否有一些函数可以检测重复记录,或者是否需要对所有记录进行搜索并检查单个字段是否重复?

delphi delphi-xe2

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

过载运算符和转换类型

我有一个关于使用运算符重载转换类型的问题,这里我有一个完整的示例代码:

program OVerloads;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TMyRange = record
  private type
    TMyRangeEnum = 1 .. 90;
  var
    FMyRangeEnum: TMyRangeEnum;
  public
    class operator Implicit(const Value: Integer): TMyRange;
    class operator Implicit(const Value: TMyRange): Integer;
    class operator Explicit(const Value: Integer): TMyRange;
    class operator Explicit(const Value: TMyRange): Integer;
  end;

class operator TMyRange.Implicit(const Value: Integer): TMyRange;
begin
    Result.FMyRangeEnum := Value;
end;

class operator TMyRange.Implicit(const Value: TMyRange): Integer;
begin
  Result := Value.FMyRangeEnum;
end;

class operator TMyRange.Explicit(const Value: Integer): TMyRange;
begin
  Result.FMyRangeEnum := …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

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

如何在通用TList中搜索具有特定字段值的记录?

关于通用的一切TList.我有这个结构:

Type
  TExtract = record
    Wheel: string;
    Extract: array [1..5] of Byte;
  end;

  TExtractList = TList<TExtract>

  TEstr = record
    Date: TDate;
    Extract: TExtractList;
  end;

  TEstrList = TList<TEstr>;
Run Code Online (Sandbox Code Playgroud)

主要列表是TExtrList在这个列表中我有所有日期和日期所有轮子与该日期.我想搜索是否存在日期.如果不存在,我TExtractListTEstr信息中添加Extract的子列表.当我从TExtrListDelphi 搜索关于TEstr类型的问题时.我只需要搜索Date.那么如何在通用中搜索单个字段TList

PS:我删除了上一篇文章,因为在这里我试图更好地解释.

delphi generics search

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

运算符不适用于此操作数类型

我有这种情况:

type
  TWheel = record
  private type
    TWheelEnum = (whBA, whCA, whFI, whGE, whMI, whNA, whPA, whRM, whRN,
      whTO, whVE);
  var
    FWheelEnum: TWheelEnum;
  public
    class operator Implicit(const Value: string): TWheel;
    class operator Implicit(const Value: TWheel): string;
  end;
Run Code Online (Sandbox Code Playgroud)

有:

var
 awheel, bwheel: twheel;
begin
  try
    awheel := 'PA';
    bwheel := 'PA';
    if awheel = bwheel then writeln ('pippo');
end.
Run Code Online (Sandbox Code Playgroud)

当我运行它时转向我这个错误:

E2015 Operator not applicable to this operand type
Run Code Online (Sandbox Code Playgroud)

我已经解决了写作:

if awheel = string(bwheel) then writeln ('pippo');
Run Code Online (Sandbox Code Playgroud)

但是可以在没有添加字符串(...)的情况下解决它吗?在第一时刻,我认为是:

class operator Implicit(const Value: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

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