Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 04:03   #11
xabik
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
XMLDocument ничего не знающий по MyImage, но могущий с ним общаться путем процедур Event_X_XML
Код:
TMyXMLDocumet =class;

TXMLLink =class(TObject)
private
  FXML: TMyXMLDocument;
public
  property XML: TMyXMLdocument;
protected
// процедуры и функции посредством который XMLdocument 
 может сообщить/узнать необходимую информацию
  procedyre Event_1_XML(); virtual;
  function Event_2_XML: TDate; virtual;
end;

TMyXMLdocument =class(TXMLDocumnt)
private
  FXMLLink: TXMLLink;
public
  property XMLLink: TXMLLink;
end;
теперь MyImage
Код:
TImageXMLLink =class;

TMyImage =class(TImage)
private
  FXMLLink: TImageXMLLink;
  procedure SetXML(val: TMyXMLDocument);
  function GetXML: TXMLdocument;
public
  XML: TXMLDocument read GetXML write SetXML;
end;

наследник класса общения, который раньше знал только по MyXMLDocument теперь знает и проMyImage
TImageXMLLink =class(TXMLLink)
private
  FImage: TMyImage;
proyected
  property MyImage: TMyImage;
// переписываем процедуры  общения
  procedyre Event_1_XML(); override;
  function Event_2_XML: TDate; override;
end;

procedure TMyImage.SetXML(val: TMyXMLdocumant);
begin
  fxMLLink.XML:=val;
end;

function TMyImage.GetXML: TMyXMLDocument;
begin
  result:=FxmlLink.XML;
end;
Код:
/////////////////////////////
// конечно же где-то ОДИН РАЗ должно быть (лучше в конструкторе)
  fXMLLink:=TImageXMLLink.Create;
  fXMLLink.MyImage:=self;

// и где-то (дестррукторе)
  FXMLLink.Free;
///////////////////////////////////////////
как проходит общение
Код:
procedure TMyXMLdocument.Active;
begin
  ........
  XMLLink.Event_1_XML; // "сообщаем" о событии
end;
Вот с этого момента не понятно. Блин целый день сидел не въехал! Объект
XMLLink ещё же не существует в MyXMLdocument как мы можем выполнять процедуры из него? Каким образом процедура из объекта XMLLink способна сообщить что то объекту MyImage?
В несколько иных выражениях подобное сообщает мне среда, когда я пытаюсь сделать активным документ. Теперь вообще ни черта не работает...
xabik вне форума Ответить с цитированием
Старый 09.05.2012, 14:55   #12
xabik
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 22
По умолчанию

Эххх... Вообщем то что здесь было написано не работает. Сделал по своему Просто сделал свойство не у TMyImage а у TMyXMLDocument типа TMyImage и при активации документа менял это объект который записан в это поле. Всё оказалось гораздо проще, а перекрестная инициализация объектов так и не удалась.

Хотя решение данной проблемы возможно если компоненты будут в одном модуле, но это противоречит правильному написанию программного кода в соответствии с которым, каждому компоненту отдельный модуль.
xabik вне форума Ответить с цитированием
Старый 10.05.2012, 10:44   #13
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
XMLLink ещё же не существует в MyXMLdocument как мы можем выполнять процедуры из него?
пока не существует, то да не можем. Но как только его заполнить

Код:
procedure TMyImage.SetXML(val: TMyXMLdocumant);
begin
  fxMLLink.XML:=val;
end;
Код:
TXMLLink =class(TObject)
private
  FXML: TMyXMLDocument;
  procedure SetXML(xml: TMyXMLDocument);
public
  property XML: TMyXMLdocument write SetXML;
protected
...
Код:
procedure TXMLLink.SetXML(xml: TMyXMLdocumant)
begin
  self.Fxml:=xml;
  xml.xmlLink:=self; // теперь XMLDocument  "знает" о своей связи
end;
и мы можем ею пользоваться.
Код:
if xmlllink<>nil then  // вдруг связи нет.
   xmlLink.event1();
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TImage определения типа изображения Anubys C++ Builder 2 06.04.2012 23:02
Движение компонента TImage. Averon C++ Builder 4 04.11.2011 20:57
Движение компонента TImage. Averon C++ Builder 0 04.11.2011 19:35
Синхронизация визуального компонента (label) поверх TImage с возможностью прокрутки/маштабир. последнего Hmmmm Мультимедиа в Delphi 1 20.05.2011 15:34
Почему у компонента TImage не работает метод Perform? devi409 Win Api 7 22.12.2008 17:51