Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизПроблема с окном наследником TDesignWindow Найти похожие ветки
← →
Igorek (2003-06-29 16:11) [0]Уважаемые программисты. Прошу помощи.
Напр. есть такой компонент (привожу все модули):
unit Reg;
interface
uses DesignIntf, Classes, Editor, SampleControl;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("", [TSampleControl]);
RegisterComponentEditor(TSampleControl, TSampleEditor);
end;
end.
unit SampleControl;
interface
uses
Graphics, Windows, Messages, SysUtils, Classes, Controls;
type
TSampleControl = class(TCustomControl)
public
constructor Create(AOwner: TComponent); override;
procedure Paint; override;
end;
implementation
constructor TSampleControl.Create(AOwner: TComponent);
begin
inherited;
Width := 100;
Height := 100;
end;
procedure TSampleControl.Paint;
begin
inherited;
Canvas.Brush.Color := clGreen;
Canvas.Rectangle(0,0,Width,Height);
end;
end.
unit Editor;
interface
uses DesignEditors, DesignWindows, EdWindow, SampleControl, ColnEdit, Forms;
type
TSampleEditor = class(TComponentEditor)
public
procedure Edit; override;
end;
implementation
procedure TSampleEditor.Edit;
var
E: TEdForm;
begin
E := TEdForm.Create(Application);
E.FEditedControl := TSampleControl(GetComponent);
E.Show;
end;
end.
unit EdWindow;
interface
uses
Windows
,Messages
,SysUtils
,Variants
,Classes
,Graphics
,Controls
,Dialogs
,DesignWindows
,Forms
,SampleControl
,DesignIntf
;
type
TEdForm = class(TDesignWindow)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
public
FEditedControl: TSampleControl;
procedure Activated; override;
procedure ItemDeleted(const ADesigner: IDesigner; Item: TPersistent); override;
procedure DesignerClosed(const ADesigner: IDesigner; AGoingDormant: Boolean); override;
end;
var
EdForm: TEdForm;
implementation
{$R *.dfm}
procedure TEdForm.Activated;
begin
if Designer <> nil then
Designer.Activate;
end;
procedure TEdForm.DesignerClosed(const ADesigner: IDesigner;
AGoingDormant: Boolean);
begin
if Designer = ADesigner then
Close;
end;
procedure TEdForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TEdForm.ItemDeleted(const ADesigner: IDesigner;
Item: TPersistent);
begin
if Item = FEditedControl then
Close;
end;
end.
Теперь делаем так:
- компилируем и инсталлируем пакет (я его не привел)
- закрываем в Дельфи все
- создаем пустое приложение
- открываем пакет (в группе проектов он должен быть активным)
- кладем компонент на форму приложения
- кликаем два раза (появляется окно)
- нажимаем Ctrl+F9 (перекомпилируем пакет)
И получаем такое:
---------------------------
Error
---------------------------
Access violation at address 40005974 in module "RTL60.BPL". Read of address 056E1FE8.
---------------------------
OK
---------------------------
Причем с VCL компонентами такой ошибки нет.
Уже просмотрел все исходники окон редакторов в VCL. Все делаю как у них - вес равно ошибка.
Подозреваю, что собака зарыта в коде самого редактора компонента. К сожалению Борланд не дает код редакторов своих компонент.
Кто может помочь?
← →
Ученик (2003-06-29 20:17) [1]В Delphi 7 ошибка не повторяется, но можно попробовать комментарить куски кода в EdWindow
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c