Форум: "Основная";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
ВнизНе получаеться совсем. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c