标签: delphi-10.2-tokyo

"ReportMemoryLeaksOnShutdown"在Delphi 10.2 Tokyo中不起作用?

似乎设置ReportMemoryLeaksOnShutdown := true对使用Delphi 10.2 Tokyo创建的程序没有任何影响(我在Windows和Linux程序中尝试过).即使有明显的内存泄漏,也没有任何报告.

有人能证实吗?还有一种方法可以检查Linux程序中的内存泄漏吗?在Windows上,我可以使用madExcept.

------------------编辑2 ------------------

在Delphi 10.2中,ReportMemoryLeaksOnShutdown := true似乎只适用于未标记为控制台应用程序的程序.一旦我注释掉该行,{$APPTYPE CONSOLE}我收到了所需的错误消息(当我在Windows上运行程序时).

------------------编辑1 ------------------

这是请求的示例:

program WeakRefTest;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

type
    TParent = class;

    TChild = class
      private
        {$IFDEF AUTOREFCOUNT} [Weak] {$ENDIF}
        Parent: TParent;
      public
        constructor Create (const Parent: TParent);
        destructor Destroy; override;
    end; { TChild }

    TParent = class
      private
        Child : TChild;
      public
        constructor Create;
        destructor Destroy; override;
    end; { TParent }

constructor TChild.Create(const Parent: TParent);
begin
    inherited …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-10.2-tokyo

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

如何用TSpeedButton替换TDBNavigator?

我做了:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  DataTable.qOrders.Next;
end;
Run Code Online (Sandbox Code Playgroud)

它的工作原理,但问题是当我点击按钮到达最后一条记录时,按钮没有被禁用,就像在a TDBNavigator.

我是如何进行TSpeedButton禁用并自动启用的TDBNavigator

delphi delphi-7 delphi-2010 delphi-xe2 delphi-10.2-tokyo

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

Delphi 10.2 Tokyo不再支持IMAGE_FILE_LARGE_ADDRESS_AWARE?

根据可能未更新的DocWiki,以下内容应该是.pas文件中的有效指令:

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}

但是它会导致此dcc32错误:

[dcc32 Error] Project1.dpr(13): E2003 Undeclared identifier: 'IMAGE_FILE_LARGE_ADDRESS_AWARE'

这种能力是否已经丢失,或者它现在一直在使用?

delphi delphi-10.2-tokyo

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

Delphi TThread处理错误

我正在阅读"德尔福高性能",并且有一些我缺少的东西.鉴于此代码作为测试:

type TTest = class(TThread)
  private
    amemo: TMemo;
  public
    constructor Create(ss: boolean; memo: TMemo);
  protected
    procedure Execute; override;
end;

constructor TTest.Create(ss: boolean; memo: TMemo);
begin
  inherited Create(ss);
  FreeOnTerminate := true;
  amemo := memo;
end;

procedure TTest.Execute;
var i: uint32;
begin
  inherited;
  i := 0;

  while not Terminated do
    begin
      Inc(i);
      Synchronize(procedure
                  begin amemo.Lines.Add(i.ToString) end);
      Sleep(1000);
    end;

end;
Run Code Online (Sandbox Code Playgroud)

很简单,这个线程在备忘录中打印一些数字.我启动线程暂停,所以我必须调用这段代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  thread := TTest.Create(true, Memo1);
  thread.Start;
end;
Run Code Online (Sandbox Code Playgroud)

我一直停止调用线程,thread.Terminate;但读完书后我看到Primoz停止这样的线程:

procedure TForm1.Button2Click(Sender: TObject);
begin
  thread.Terminate;
  thread.WaitFor; //he adds this …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-10.2-tokyo

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

Delphi无法通过shellexecute执行brcc32

我已经开始编写组件了,我想编写一个程序来为我生成DCR文件.组件的图片必须是24x24位图,因此我需要创建一个资源文件,然后用于brcc32创建DCR.

脚步:

  1. 创建一个24x24位图(Paint,old but gold)
  2. 创建RC文件
  3. 使用brcc32创建DCR

所以,我想编写一个程序来为我制作所有这些东西,这就是表格.在编辑字段中,我写了他们的Name属性.

图片

这是代码:

unit uBmp2rc;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.IOUtils,
  Vcl.ExtDlgs, Vcl.ExtCtrls, ShellApi;

type
  TBitmapConverter = class(TForm)
    Label1: TLabel;
    edtClassName: TEdit;
    Label2: TLabel;
    edtSource: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    edtDirectory: TEdit;
    OpenPicture: TOpenPictureDialog;
    Label5: TLabel;
    edtBitmap: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label6: TLabel;
    Preview: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    path: string;
  public …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-10.2-tokyo

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

CopyFile - 保存而不覆盖现有文件

我在做什么:

  • 用户单击一个按钮,一个FileUpload组件(对话框)将启动,他可以从他的PC浏览并加载文件.
  • 当他单击"确定"时,文件将保存到特定位置的磁盘中.
  • 在保存之前我正在重命名(或者更确切地说,使用特定名称保存)他的文件使用包含我之前从某些数据库字段中提取的数据的字符串.

因此,无论文件在用户加载时的名称如何,它都会以他的Firstname和来保存到磁盘中LastName,这是我从一些字符串变量中获得的.

UniMainModule.foldername =包含保存文件的文件夹的路径.

UniMainModule.FirstName =包含用户的FirstName

UniMainModule.LastName =包含用户的LastName

因此,文件将保存FirstName_LastName.pdf在磁盘上由foldername字符串提供的位置.

这是我正在使用的代码:

procedure TsomeForm.UniFileUpload1Completed(Sender: TObject; AStream: TFileStream);
var
  DestName : string;
  DestFolder : string;
begin
   DestFolder:=UniServerModule.StartPath+'files\'+UniMainModule.foldername+'\';
   DestName:=DestFolder+UniMainModule.FirstName+'_'+UniMainModule.LastName+'.pdf';
   CopyFile(PChar(AStream.FileName), PChar(DestName), False);
   ModalResult:= mrOk;
end;
Run Code Online (Sandbox Code Playgroud)

据我了解,阅读一些关于后CopyFilemsdn通过False,这意味着应该,将覆盖现有文件.

如果该文件在该位置尚未出现该名称,则可以保存.

但是,如果用户决定再次使用fileupload并上传新文件,则新文件将覆盖前一个文件.因为他们被保存为同名.

那么如何确保如果文件已经存在(位置中存在具有该确切名称的文件),它不会被覆盖,但是,我不知道,在名称或其他内容中被分配了(1),保留两个文件?

delphi file-copying delphi-10.2-tokyo

-1
推荐指数
2
解决办法
1351
查看次数

Winapi.ShlObj.SHGetFolderPath可重现的错误

使用此代码我得到一个AV:

uses
  Winapi.ShlObj;

function GetUserAppDataPath: string;
var
  ThisPath: PWideChar;
begin
  if Winapi.ShlObj.SHGetFolderPath(0, CSIDL_APPDATA, 0, SHGFP_TYPE_CURRENT, ThisPath) = S_OK then
    Result := string(ThisPath)
  else
    Result := '';
end;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在Delphi 10.2 Tokyo中,如果我两次调用此函数,第二次获得AV.

是什么导致这个错误?

我曾经PWideChar因为德尔福IDE的告诉我的: 在此输入图像描述

delphi winapi delphi-10.1-berlin delphi-10.2-tokyo

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