怎样使处于Running状态的可视控件转变为Designing状态?(100分)

W

white83

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
  最近遇到一个问题,在运行窗体时,怎样才能使窗体下处于Running中的
可视控件转变为Designing状态?以前记得在哪个网站可以下载相关的控件,
请帮助!!!
 
修改控件的内部属性 DesignInfo
 
To jsxjd:
TForm.DesignInfo 取值多少?
感觉上觉得是把TComponent中处于protected的SetDesigning方法改为public
 
use dream designer
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TA = Class(TComponent)
public
procedure a;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TA }

procedure TA.a;
begin
Self.SetDesigning(true);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TA(Self).a;
end;

end.
 
Delphi元件除错技巧
蔡志诚

元件除错环境实作范例

许多以Delphi为工具的程序开发者,时常需要开发自定的元件类别以符合所需。在元件的开发过程中,由於无法直接由Delphi的集成除错环境中对元件进行除错,必须辗转透过其它方式逐步除错,既麻烦又费时。在本篇中笔者提供一个简易的除错环境,直接利用Delphi的集成除错器为您的元件除错,加速开发元件的时间。

Delphi提供了一个强而有力的元件结构VCL,建立了一个FrameWork的标准。程序开发者可於此基础上自由的运用以及继承,藉此开发自定的元件类别。在元件开发的过程中,除错一直是元件开发者常遭遇的问题。完整元件的测试工作包括元件行为测试,属性编辑器(Proeprty Editor)测试以及元件编辑器(Component Editor)测试。有关元件行为测试的部份,虽然可以藉由动态建立对象的方式直接应用Delphi集成除错器来除错,但是对於属性编辑器及元件编辑器部份,便只能靠原始的ShowMessage来模拟Delphi集成除错器的BreakPoint了。

由於错误可能发生在程序中的任何地方,因此这样做不仅费时,亦不容易找出真正的问题点。难道就没有其它解决的方法了吗?事实上Delphi提供了一个Designer的机制,Delphi的集成开发环境便是依此而来。由於这个部份Borland公司并未提供充足的相关信息,因此一般人也较难以应用。利用这个机制,我们可以轻易的实作一个环境以供除错,但在实作之前,您有必要对此机制做一概括性的认识。本篇中笔者以一自定的MessageBox元件为例,介绍如何应用自定的除错环境来对元件除错。

认识Designer

从字面意义上来看,Designer似乎与设计有关,事实上Designer掌控了元件与Form的沟通管道。藉由Designer,Delphi得以区分Design-Time与Run-Time的不同。Designer中有一个Form的属性,用来记录目前设计中的Form。除此之外,在设计的Form中也有一个Designer属性,记录了这个Form的Designer。当进入设计模式时,Designer会拦截所有来自鼠标以及键盘的信息,并将此信息传给设计的Form,并由Form来处理这些信息,忽略元件对信息的处理(如图一)。利用此机制,我们可以防止元件於设计时期中发生执行时期的行为,并在设计时期定义相关的元件处理机制,诸如处理对元件的拖放(Drag and Drop)、改变尺寸(Resize)、移动(Move)、复制(Copy)、删除(Cut)等等行为,以及一些如对齐(Aligment)、群组选取(Group Select)等附属的功能。Delphi并没有公开这些实作内容的原始程序码,但提供了Designer类别的介面宣告。你可以在Forms及DsgnIntf这两个单元中,找到Tdesigner及TFormDesigner两个Designer的抽象类别(见表一),虽然这些类别中有许多的方法介面,但我们并不需要实作所有的方法。仅针对需要实作的部份加以实作即可。

设计模式的进入点

在VCL的结构中,凡是由Tcomponent衍生的元件类别都有一个SetDesigning方法,用以设定元件的状态,不过此方法宣告在Protected区段,您无法直接使用,因此必须另外定义一个继承自Tcomponent的类别,并将此方法开放出来。透过SetDesigning方法,可以设定元件为设计模式(True)或是执行模式(False),要分辨某一元件所处的状态,你可藉由ComponentState属性来得知,此属性为一集合(Set)型态属性,因此你可以以(csDesigning in ComponentState)来判别元件所处的状态。

事实上在执行时期设定元件型态为csDesigning时,你并不会发现有任何的改变,主要是因为没有可以处理此状态的Designer

 
顶部