Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Проблема с окном наследником 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
6-31377
LOX
2003-05-04 08:42
2003.07.10
У IE есть журнал а как это замутить в TWebBrowser?


8-31364
slex
2003-03-23 21:21
2003.07.10
TJPEGImage


3-31153
ligor
2003-06-18 18:14
2003.07.10
SQL


3-31109
Parusstepu
2003-06-17 12:51
2003.07.10
Генерация отчета


1-31291
Antonyan
2003-06-26 15:06
2003.07.10
Индустриальные VCL