Главная страница
    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.006 c
14-81044
Виктор Щербаков
2002-03-19 13:44
2002.04.25
Константные выражения


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


1-80865
inko
2002-04-13 19:00
2002.04.25
Как убрать приложение из автозапуска?


3-80823
Alexandr_
2002-04-05 15:00
2002.04.25
ODAC. Проблема с чтением из BLOB


7-81093
VS
2002-01-31 09:35
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский