Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
3-80814
Бульбаш
2002-04-05 13:15
2002.04.25
Блокировки в ODAC


3-80751
kirill2000
2002-04-03 23:35
2002.04.25
Сохранение в файл


3-80762
Reticent
2002-04-04 11:25
2002.04.25
ошибка ODBC ?!


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


7-81094
Lord BDV
2002-01-28 20:37
2002.04.25
Работа со шрифтами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский