我试图修改我的Delphi 2010代码以在XE7中编译(并希望保留在2010年编译它的能力).因此,在我的mainform的单元中,我添加了条件指令.以下工作在2010年正常
uses
{$IF CompilerVersion >= 24}System.Actions, {$ELSE}Actnlist,{$IFEND}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
Run Code Online (Sandbox Code Playgroud)
但是XE7会自动System.Actions在最后添加一个用于创建一个uses子句,该子句现在已经声明了两次System.Actions(见下文),并给出了一条错误消息[dcc32 Error] MyForm.pas(10): E2004 Identifier redeclared: 'System.Actions'.为什么XE7不接受条件指令中的单位?
uses
{$IF CompilerVersion >= 24}System.Actions, {$ELSE}Actnlist,{$IFEND}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
System.Actions; // <- automatically added
Run Code Online (Sandbox Code Playgroud) 我正在绘制带边框的自定义背景(从TGraphicControl派生).在DrawBorderRect函数中绘制边框后,我返回"客户端"区域,并希望将来的绘制限制在这个新区域.如果我不使用ClipRgn,一切正常.
工作守则:
var
R : TRect;
begin;
R := GetClientRect; //(R -> 0, 0, 300, 200)
R := DrawBorderRect(R); //(R -> 20, 20, 280, 180)
Canvas.StretchDraw(R, FBitmap); //FBitmap is a 3 pixel x 3 pixel square
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我这个:
但是,我想使用ClipRgn,我尝试了以下内容.这次没有显示模式(但是,如果我单击该区域上的鼠标按钮,则模式显示.所以它正在工作,但由于某种原因会被覆盖?).
有问题的代码:
var
R : TRect;
ClientRegion: HRGN;
begin;
R := GetClientRect; //(R -> 0, 0, 300, 200)
R := DrawBorderRect(R); //(R -> 20, 20, 280, 180)
ClientRegion := CreateRectRgn(R.Left, R.top, R.Right, R.Bottom);
SelectClipRgn(Canvas.Handle, ClientRegion);
try
Canvas.StretchDraw(R, FBitmap); //FBitmap is a 3 …Run Code Online (Sandbox Code Playgroud) 我想要一个从具有自定义构造函数的BaseForm派生的MainForm.由于这是Mainform,因此它是通过调用*.dpr文件中的Application.CreateForm(TMyMainForm,MyMainForm)创建的.但是,在表单创建期间不会调用我的自定义构造函数.
显然,如果我调用MyMainForm:= TMyMainForm.Create(AOwner),它工作正常.我可以不使用自定义构造函数的表单作为主要表单吗?
TBaseForm = class(TForm)
constructor Create(AOwner:TComponent; AName:string);reintroduce;
end;
TMyMainForm = class(TBaseForm)
constructor Create(AOwner:TComponent);reintroduce;
end;
constructor TBaseForm.Create(AOwner:TComponent);
begin;
inherited Create(AOwner);
end;
constructor TMyMainForm.Create(AOwner:TComponent);
begin;
inherited Create(AOwner, 'Custom Constructor Parameter');
end;
Run Code Online (Sandbox Code Playgroud) 我被这个奇怪的问题困扰了.我将一个Memo.Lines作为TStrings传递给一个过程并用AddObject填充它.但是对象没有被添加(由a L := TURLLinkObject(AStrings.Objects [AStrings.Count -1]).立即检查.(编辑:AddObject返回0,这是根据Delphi的帮助添加项目的索引)
这是我的程序:
type
TURLLinkObject = class(TObject)
url,
attr,
name : string;
end;
procedure getLinks(XMLNode: TNode; AStrings: TStrings; Match:string='');
var L : TURLLinkObject;
i : integer;
S : string;
begin;
if XMLNode = nil then exit;
if (XmlNode.NodeName = 'a') and (XmlNode As TElement).hasAttribute('href') then
begin;
L := TURLLinkObject.Create;
L.url := (XmlNode AS TElement).getAttribute('href');
L.attr := GetAttributesText(XmlNode);
L.Name := 'Some Name';
if (Match = '') or (pos(Match, L.url) <> 0) then
begin;
s …Run Code Online (Sandbox Code Playgroud) delphi ×4
bitmap ×1
clipping ×1
constructor ×1
delphi-2010 ×1
delphi-xe7 ×1
paint ×1
string ×1
tform ×1