使用Delphi(或者通常是任何工具,如果存在的话),是否可以减小exe文件的大小,删除所有未使用但存在的代码?
(例如,存在但从不调用的函数或过程).
我记得使用Pascal,使用unit(没有对象),编译器只包含真正使用的过程和函数,并将从最终的exe中删除单元中未使用的例程.  
使用Object-pascal,我记得在Delphi 1中,一个对象的所有成员都包含在exe中; 
有什么变化,直到Delphi-XE2?
我希望在列表中加载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循环一个用于计数器和一个用于组计数,但所以有点难,我想知道是否有一些解决方案更简单和快速,也使用运算符布尔或其他东西.谁可以给我一些建议呢?非常感谢.
我想问一下是否有一些算法准备就绪,这让我做到了这一点:我有一个矩阵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) 关于获取文件的大小,我有这两个功能:
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)
在实践中,它有什么区别?当然,两者都返回相同的结果,但更加可信,更快,更安全?或者更好,什么是可取的用途?第一还是第二?非常感谢.
我需要在我的表单中使用透明tpanel.谁可以建议我一个好的组件,可能是免费的?如果不是很长可以发布代码或一些关于它的链接?非常感谢.马塞罗.
我在 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) 使用泛型TList集合:是否有一些函数可以检测重复记录,或者是否需要对所有记录进行搜索并检查单个字段是否重复?
我有一个关于使用运算符重载转换类型的问题,这里我有一个完整的示例代码:
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) 关于通用的一切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在这个列表中我有所有日期和日期所有轮子与该日期.我想搜索是否存在日期.如果不存在,我TExtractList从TEstr信息中添加Extract的子列表.当我从TExtrListDelphi 搜索关于TEstr类型的问题时.我只需要搜索Date.那么如何在通用中搜索单个字段TList?
PS:我删除了上一篇文章,因为在这里我试图更好地解释.
我有这种情况:
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)