是否可以在一个{$ IFDEF}指令中定义多个条件?
我想有这样的语法:
{$IFDEF Condition1 OR Condition2} DoSomething; {$ENDIF}
{$IFDEF Condition1 AND Condition2} DoSomethingElse; {$ENDIF}
Run Code Online (Sandbox Code Playgroud)
谢谢
有一种方法或简单方法如何将一个TDictionary内容复制到另一个中?假设我有以下声明
type
TItemKey = record
ItemID: Integer;
ItemType: Integer;
end;
TItemData = record
Name: string;
Surname: string;
end;
TItems = TDictionary<TItemKey, TItemData>;
var
// the Source and Target have the same types
Source, Target: TItems;
begin
// I can't find the way how to copy source to target
end;
Run Code Online (Sandbox Code Playgroud)
我想将源1:1复制到目标.有这样的方法吗?
谢谢!
我想知道以下代码是否可能因访问冲突而失败或是否安全.具有AND运算符的语句的第一个成员是否始终作为第一个检查,或者可能(通过某些编译器优化或其他东西)检查第二个作为第一个?
var
Item: TSomething;
procedure DoSomething;
begin
if Assigned(Item) and (Item.SomeProperty) then
DoSomethingElse;
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码绝对安全吗?
谢谢!
我想知道以下(伪)代码是否可以安全使用.我知道Terminated标志但我需要在主线程的递归搜索操作中设置某种取消标志并保持工作线程运行.我将在那里检查Terminated属性,这个伪代码中缺少什么.
type
TMyThread = class(TThread)
private
FCancel: Boolean;
procedure RecursiveSearch(const ItemID: Integer);
protected
procedure Execute; override;
public
procedure Cancel;
end;
procedure TMyThread.Cancel;
begin
FCancel := True;
end;
procedure TMyThread.Execute;
begin
RecursiveSearch(0);
end;
procedure TMyThread.RecursiveSearch(const ItemID: Integer);
begin
if not FCancel then
RecursiveSearch(ItemID);
end;
procedure TMainForm.ButtonCancelClick(Sender: TObject);
begin
MyThread.Cancel;
end;
Run Code Online (Sandbox Code Playgroud)
以这种方式在线程内部设置布尔属性FCancel是否安全?当按下主窗体(主线程)中的按钮时,这不会与RecursiveSearch过程中读取此标志相冲突吗?或者我是否必须添加例如关键部分来读取和写入此值?
非常感谢
是否可以Build Configuration
根据目标平台设置(理想情况下从GUI)自动添加后缀到输出文件?
我的意思是,我将为例如库项目命名Project
,我想得到
Project.dll - when I build the project for 32-bit platform
Project64.dll - when I build the project for 64-bit platform
Run Code Online (Sandbox Code Playgroud)
谢谢
我想从命令行进行构建,我想知道如何使用选定的构建配置执行命令行编译器?
我知道有选项--no-config,它不会加载默认的dcc32.cfg文件,但我想设置我在项目中准备的构建配置.
我想运行类似的东西
dcc32.exe --some-option RELEASE Win32 PLATFORM
Run Code Online (Sandbox Code Playgroud)
是否有一些选择构建配置的选项?
谢谢
我想检测表单何时最大化以保存某些设置(与大小和位置无关)并稍微修改大小和位置.有通用的方法吗?我试图像本文中那样捕获WM_SYSCOMMAND消息.通过最大化按钮,它可以很好地从菜单中最大化,但是当我按下WIN + UP按键时它不会被触发.有没有人知道如何捕捉最大化事件的通用方法,包括WIN + UP击键的情况?
谢谢
我发现在Controls.pas(以及其他单位)中声明了这个指令,我很高兴知道这是什么意思.
{$C PRELOAD}
Run Code Online (Sandbox Code Playgroud)
据我所知,$ C表示断言控制,但PRELOAD关键字是什么?这是"在预加载时断言我"吗?
我在Delphi 2009中发现了这一点
谢谢
我正在寻找如何使用GDI(而不是GDI +)将32位位图转换为灰度的简单解决方案.是否有可能通过更改位图的托盘或其他东西?
当然Delphi中有很多像这样的例子,但是我正在寻找一个WinAPI函数,它可以在没有迭代的情况下完成这个.
我正在使用此代码获取shell图标(Windows资源管理器中显示的图标).
有没有人有更快获取这些图标的经验?这SHGetFileInfo
似乎很慢.
procedure TForm2.Button1Click(Sender: TObject);
var
FileInfo: TSHFileInfo;
begin
FillChar(FileInfo, SizeOf(FileInfo), 0);
if SHGetFileInfo(PChar('c:\windows\'), 0, FileInfo, SizeOf(FileInfo),
SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX) <> 0 then
DrawIconEx(Canvas.Handle, 10, 10, FileInfo.hIcon, 0, 16, 16, 0, DI_IMAGE or
DI_MASK);
end;
Run Code Online (Sandbox Code Playgroud)
谢谢!