Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обращение к методам и полям формы из только что созданного объекта / 20 сообщений из 20, страница 1 из 1
21.06.2019, 12:43
    #39829157
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
У меня есть динамически создаваемая форма, пусть будет
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Unit2

...

type
  TFrm2 = class(TForm)
public
  SomeProc;

...

procedure OpenFrm2;
var
  Frm2: TFrm2;
begin
  Frm2:= TFrm2.Create(Application);
  try
    Frm2.Showmodal;
  finally
    Frm2.Free;
  end;
end;


Вызываю ее из 1-й формы простым OpenFrm2 (все лишнее убрал, код максимально упростил)
В этом же юните, где определена TFrm2 (или в другом, не важно), определен класс
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  TMyclass = class
  private
    FSomeField: string;
  public
    constructor Create(AOwner: TObject);
    Destructor Destroy; override;
  end;


Создаю объект этого из юнита, где определен TFrm2:
Код: pascal
1.
2.
3.
4.
5.
var
  Myclass: TMyclass;
begin
  Myclass:= TMyclass.Create(Self); // т.е. передаю в качестве владельца форму Frm2, правильно?
end; 


Так вот вопрос, как из созданного объекта обратиться к методам (процедурам) TFrm2?
(Self as TFrm2).SomeProc - вообще не то, но мысль, думаю, довел.
Направьте, плз, где смотреть, куда читать или если не сложно - лучше пример.
Спасибо!
...
Рейтинг: 0 / 0
21.06.2019, 12:49
    #39829159
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
ЯНХНП
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.06.2019, 12:53
    #39829161
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
Код: pascal
1.
(Owner as TFrm2).SomeProc
...
Рейтинг: 0 / 0
21.06.2019, 13:20
    #39829177
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
zinpub, автор(Owner as TFrm2).SomeProc не работает, подчеркивает и говорит "Undeclared identifier 'Owner')
...
Рейтинг: 0 / 0
21.06.2019, 13:26
    #39829185
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
Owner — свойство TComponent, так что нужно либо TMyclass наследовать от TComponent, либо сохранять аргумент конструктора (AOwner) как поле объекта.
...
Рейтинг: 0 / 0
21.06.2019, 13:30
    #39829190
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
RWolfлибо сохранять аргумент конструктора (AOwner) как поле объекта.
Только что так и сделал. Спасибо за разъяснения!
...
Рейтинг: 0 / 0
21.06.2019, 13:35
    #39829192
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
afordТолько что так и сделалА почему бы не сделать так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  TMyclass = class
  private
    FSomeField: string;
  public
    constructor Create(AOwner: TFrm2);
    Destructor Destroy; override;
  end;
...
Рейтинг: 0 / 0
21.06.2019, 14:00
    #39829207
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
_Vasilisk_, можно и так, не принципиально, напрямую или через TObject как у меня, разве что придется присваивать потом в OnCreate
Код: pascal
1.
FOwner:= (AOwner as TFrm2)


Я вообще все это затеял, чтобы написатть юнит с объектом для программы с формой и для службы. Только надо чтобы он еще и лог выводил, и тому и тому. Вот сижу думаю как лучше сделать
...
Рейтинг: 0 / 0
21.06.2019, 14:09
    #39829213
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
лучше всё таки наследоваться от TComponent, как уже сказали выше,
а не создавать объект с нуля.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.06.2019, 14:53
    #39829242
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
Мимопроходящий, точно, тогда поле FOwner не надо создавать.
А потом так
Код: pascal
1.
2.
3.
4.
5.
procedure TMyClass.AddLog(pPriority: Boolean; pStr: String);
begin
  if Owner is TFrm1 then // лог в программу
    (Owner as TFrm1).AddLog(pPriority, pStr)
end;


Только как сделать запись лога в службу, там же Owner другой будет. Можно конечно и так

Код: pascal
1.
2.
  if Owner is TSrv1 then 
    (Owner as TSrv1).AddLog(pPriority, pStr)



Но тогда придется в uses прописывать и тот модуль и тот, что как-то нелогично, может объявить какой-то перехватчик сообщений объекта в программе и службе, или .. ну это уже другой вопрос. Всем спасибо!
...
Рейтинг: 0 / 0
21.06.2019, 15:15
    #39829259
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
унаследуй TFrm1 и TSrv1 от общего предка, в котором создай виртуальный метод AddLog().
а в TFrm1 и TSrv1 перекрой этот метод конкретными реализациями.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.06.2019, 15:26
    #39829273
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
afordТолько как сделать запись лога в службу, там же Owner другой будет.Вот здесь нужны интерфейсы в чистом виде. И тогда не нужно Никаких приведений типов и никаких форм

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
ILogger = interface
  ['{ ...... ]']
  procedure AddLog(APriority: Boolean; const AMsg: string);
end;

TFrm2 = class(TForm, ILogger)
  ..........
  procedure AddLog(APriority: Boolean; const AMsg: string);
end;

TMyService = class(TService, ILogger)
  ..........
  procedure AddLog(APriority: Boolean; const AMsg: string);
end;

TMyclass = class
private
  FLogger: ILogger;
public
  constructor Create(const ALogger: ILogger);
end;

procedure TMyClass.AddLog(pPriority: Boolean; pStr: String);
begin
  FLogger.AddLog(pPriority, pStr);
end;

Myclass:= TMyclass.Create(Self);
...
Рейтинг: 0 / 0
21.06.2019, 15:39
    #39829276
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TMyclass = class
  private
    FOwner: TFrm2;
    FSomeField: string;
  public
    constructor Create(AOwner: TFrm2);
    Destructor Destroy; override;
  end;

constructor TMyclass.Create(AOwner: TFrm2);
begin
  inherited;
  FOwner := AOwner;
end;
...
Рейтинг: 0 / 0
21.06.2019, 16:52
    #39829306
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
Формы - это представления. Зачем одному представлению вызывать методы другого представления, да еще и к свойствам обращаться?
Они ничего не должны знать друг о друге. Вы нарушаете DIP.
...
Рейтинг: 0 / 0
21.06.2019, 22:46
    #39829372
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
X-CiteФормы - это представления.
Формы - это формы. Ваши представления о том, что формы - это представления, не более чем один из многих возможных вариантов.

X-CiteОни ничего не должны знать друг о друге. Вы нарушаете DIP.
Во-первых, знания форм друг о друге не имеют отношения к DIP. А во-вторых, нужен ли в приложении автора DIP - мягко говоря, бабушка надвое сказала. По вопросу видно, что у него каша в голове и пока что не выработано базовое понимание многих вещей.... и если он ещё DIP попробует впихнуть куда не надо и как осилит... Ко всему надо приходить в своё время. В том числе к использованию DIP. А потом и к пониманию, что использовать его надо далеко не всегда.
...
Рейтинг: 0 / 0
22.06.2019, 01:09
    #39829383
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
Если в приложении всего две дельфийские формы, и одна из них обращается к членам другой, на первый взгляд ничего страшного.
Но со временем приложение обязательно разрастется до сотен форм, и понадобится веб - реализация. Вот тогда-то и станет ясно, что логику надо было держать отдельно от представления. Но поздно будет. Поэтому надо сразу строить монстроидов в соответствии со светлым учением о MVC.
...
Рейтинг: 0 / 0
22.06.2019, 01:30
    #39829389
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
ёёёёёНо со временем приложение обязательно разрастется до сотен форм
Ложь
...
Рейтинг: 0 / 0
22.06.2019, 01:34
    #39829390
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
DimaBr,

истина, вот те крест.
...
Рейтинг: 0 / 0
22.06.2019, 09:34
    #39829418
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
ёёёёёистина, вот те крест.
Такая же ложь, как и крест.
...
Рейтинг: 0 / 0
24.06.2019, 08:56
    #39829701
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к методам и полям формы из только что созданного объекта
Я пока не знаю что такое DIP, все сделал через интерфейсы, мне всего лишь надо было сделать отедльный юнит для формы и службы, чтобы не переписывать его 2-й раз отдельно для службы) Насчет каши в голове - не отрицаю))
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обращение к методам и полям формы из только что созданного объекта / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]