小编ss2*_*006的帖子

Delphi条件编译中的uses子句

我试图修改我的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)

delphi conditional-compilation delphi-2010 delphi-xe7

11
推荐指数
2
解决办法
2093
查看次数

Delphi SelectClipRGN隐藏绘制的位图

我正在绘制带边框的自定义背景(从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的输出

但是,我想使用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)

delphi clipping paint bitmap

3
推荐指数
1
解决办法
877
查看次数

Delphi Form以自定义构造函数为主要形式?

我想要一个从具有自定义构造函数的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)

delphi constructor tform

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

Delphi AddObject - 不添加对象

我被这个奇怪的问题困扰了.我将一个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 string

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