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

Вниз

Как правильно прервать создание компонента   Найти похожие ветки 

 
anbezr   (2003-04-15 10:54) [0]

Привет!
имею компонент, который может быть дочерним лишь у одного класса. во время разработки приложения, если пользователь положит этот критичный компонент не туда, он должен быть удалён. я перекрыл метод SetParent и могу определить, куда пользователь пытается кинуть критичный компонент. но каким обзам сообщить дельфе, что надо прервать создание компонента, или удалить уже созданный.


 
pasha_golub ©   (2003-04-15 10:57) [1]

В constructor обрабатывай. Если Parent = TCritical then Free или Exit, точно не помню, но я так делал;


 
anbezr   (2003-04-15 11:07) [2]

не получилось. в конструкторе Parent = nil всегда, а AOwner = Form1 :(


 
Skier ©   (2003-04-15 11:11) [3]

в SetParent(...)
begin
if AParent = ... then begin
Free;
Exit;
end; //if
end;


 
pasha_golub ©   (2003-04-15 11:12) [4]

А если в SetParent вызвать Free?


 
anbezr   (2003-04-15 11:21) [5]

if AParent <> nil then
begin
if UpperCase(AParent.ClassName) = "TMYCLASS" then
begin
inherited SetParent(AParent);
fParentDC := GetDC(AParent.Handle);
end else
begin
Free;
end;
end else
inherited SetParent(AParent);
при попытке поместить не туда возникает "Invalid pointer operation"


 
anbezr   (2003-04-15 11:28) [6]

понятно почему. по Free программа должна освободить память и т.д. получается, что она пытается удалить кусок памяти, который в настоящее время исполняется.


 
Skier ©   (2003-04-15 11:31) [7]


if AParent is TMYCLASS then
begin
inherited SetParent(AParent);
fParentDC := GetDC(AParent.Handle);
end else
begin
Release;
end;


 
Skier ©   (2003-04-15 11:32) [8]

Release только у формы...Извиняюсь...


 
Юрий Зотов ©   (2003-04-15 16:55) [9]

Как много слов...

> Как правильно прервать создание компонента

Возбудить любое исключение в его конструкторе. И все. Остальное будет сделано автоматически. Обратите также внимание на метод ValidateContainer - обычно достаточно перекрыть только его.



Страницы: 1 вся ветка

Текущий архив: 2003.04.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
1-91365
Picco
2003-04-15 11:09
2003.04.28
ошибка при вызове Word а


7-91566
Demon
2003-03-11 18:11
2003.04.28
Указатель на 16-разрядный процесс


4-91601
LeReve
2003-03-01 21:30
2003.04.28
как изменить цвет ToolBar a на АПИ?


1-91332
Woland.hexed
2003-04-14 23:18
2003.04.28
Построение отчетов в стиле 1С (Excel)


14-91448
newtech
2003-04-09 11:28
2003.04.28
Русификация ресурсов