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

Вниз

Не получаеться совсем.   Найти похожие ветки 

 
UserL   (2002-04-12 13:39) [0]

Здраствуйте...
Создал фрейм, который потом динамически создаю на главной форме. (И таких фреймов может быть сколько угодно). А на этом фрейме создаю, тоже динамически попарно одинаковые объекты. И у одного объекта есть событие Удалит, которое появляется при нажатии на нем правой кнопки мыши и удаляет объект.
Как оповестить фрейм, чтоб можно было удалить второй (парный) объект их фрейма,
И как оповестить главную форму, чтоб из нее запретить обращение к удаленным объектам?
Пробовал Notification и FreeNotification.
Не работает...


 
Игорь Шевченко ©   (2002-04-12 14:54) [1]

День добрый,

Когда вы удаляете объект, то он вызывает Notification своего хозяина с Operation=opRemove. Хозяин при этом может выполнять любые действия, в том числе и удалять "парный" объект.

Может быть, приведете свой код, в которым не получается ?

С уважением,


 
UserL   (2002-04-15 06:28) [2]

Вот создаю фрэйм:

GrafikFrame := TGrafikFrame.Create(Self);
GrafikFrame.Parent:=Self;
GrafikFrame.Name:="Grafik"+IntToStr(List.Count);
GrafikFrame.D_D.DragDropControl:=GrafikFrame.Chart1;
List.Add(GrafikFrame);
FormResize(Self);

где:
GrafikFrame - потомок от TFrame + на нем расположены
кое какие компаненты

А в этом фрейме создаю уже компаненты попарно, и если удалив один нужно удалить и второй тоже

NamesColor:=TNameColor.Create(ScrollBox1);
ListColor.Add(NamesColor);
GrafNew:=TLineSeries.Create(Chart1);
ListSeries.Add(GrafNew);
ColorNew:=SetColor(ListColor.Count); //Выбор цвета
With GrafNew Do
Begin
Title:="График";
LinePen.Width:=2;
Stairs:=True;
InvertedStairs:=True;
ShowInLegend := False;
SeriesColor := ColorNew;
ColorEachPoint:=False;
Chart1.AddSeries(GrafNew);
XValues.DateTime := False; //*************
AddXY(0,0);
End;
With NamesColor Do
Begin
Name:="NamesColor"+FloatToStr(ListColor.Count*Random(2000));
Parent:=ScrollBox1;
Height:=19;
Left:=0;
Top:=Height*(ListColor.Count-1);
ColorSet:=SetColor(ListColor.Count);;
NameSet:=NameTi;
//NameSet:=" "+IntToStr(NumTi)+NameTi;



А вот сама процедура Notification

procedure Notification(AComponent: TComponent; Operation: TOperation); override;

А вот ее тело (пока просто для визуального наблюдения)

procedure TGrafikFrame.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
If (AComponent Is TNameColor)And(Operation=opRemove) Then
ShowErrors(Handle, 5);
end;


А в собственном компоненте TNameColor в конструкторе дописал:
FreeNotification(AOwner.Owner);
А то без этой строчки TGrafikFrame.Notification не обрабатывался.


 
UserL   (2002-04-15 06:32) [3]

А щас еще лжна проблемка возникла.
Если Notification родителя оставлять, то при закрытии программы вылетает постоянно ошибка в модуле rtl60.bpl (кажеться) и программа не закрываеться совсем.


 
Игорь Шевченко ©   (2002-04-15 09:55) [4]

День добрый,

В вашем коде, TNameColor имеет Owner"ом ScrollBox1. Кто является
Owner"м ScrollBox1 из кода не видно.

Может, стоит попробовать так:

NamesColor:=TNameColor.Create(Self);
NamesColor.FreeNotification (Self);

С уважением,


 
UserL   (2002-04-15 10:13) [5]

Да, эту ошибку я заметил и уже исправил как и у Вас в коде.
Но всеравно ошибка появляется сноваи снова.
Но если обработчик FreeNotofication написать в главной форме, а
NamesColor.FreeNotification (Self.Owner), то все работает как надо.
Вот почему так? Разобраться никак не могу.
Большое спасибо


 
Игорь Шевченко ©   (2002-04-15 10:37) [6]

День добрый,
Вот сделан простой пример:

type
TFrame2 = class(TFrame)
Edit1: TEdit;
Edit2: TEdit;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
procedure Notification(AComponent : TComponent; Operation : TOperation); override;
constructor Create(AOwner : TComponent); override;
{ Public declarations }
end;

implementation

{$R *.DFM}

constructor TFrame2.Create(AOwner: TComponent);
begin
inherited;
Edit1.FreeNotification (Self);
end;

procedure TFrame2.N1Click(Sender: TObject);
begin
Edit1.Free();
end;

procedure TFrame2.Notification(AComponent: TComponent;
Operation: TOperation);
begin
if (AComponent = Edit1) AND (Operation = opRemove) then
Edit2.Free();
inherited;
end;

На форму положены два Frame. В меню один пункт "Удалить". При вызове этого пункта меню удаляются оба Edita. Без ошибок :-)

С уважением,



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

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

Наверх




Память: 0.48 MB
Время: 0.008 c
1-80955
Aleksandr
2002-04-11 11:25
2002.04.25
Люди! Это что же творится! Куда дели KeyPressed и ReadKey?!


3-80817
Zak
2002-04-05 08:38
2002.04.25
Печать МЕМО записей в Qreport


4-81104
Romul
2002-02-18 12:29
2002.04.25
Как воостановить подключение к сетевому диску?


1-80978
ded_di
2002-04-12 12:11
2002.04.25
разбор строки


6-81011
knyaz17
2002-02-11 12:41
2002.04.25
Несколько вопросов по TWebBrowser.