![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
3 простых вопроса
Kostafey © (2007-04-20 16:29:00)По одному вопросы задавать уже мало буду сразу по 3.
Все примеры работают, я только хотел уточнить их корректность.
1) Если необходимо выполнить ряд действий по работе с компонентами формы
только 1 раз при создании, то корректно ли будет писать:
procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
//необходимые операции
2) Если необходимо, чтобы модальная форма возвращала строку, то можно ли писать как:
//Вызов из другой формы:
TextString:=Form2.ShowWithParams;
//Метод Form2:
function TForm2.ShowWithParams:string;
begin
ShowModal;
if ModalResult = mrOk then
Result := 'Some string'
else
Result := 'Other string';
end;
3) Работа с компонентами формы из другого Unit:
procedure SetSubjectFields(SenderForm: TForm; SenderDataSource: TDataSource);
begin
with DataModule1 do begin
(SenderForm.FindComponent('DBEditLookTipSubject') as TDBEdit).DataSource :=
SenderDataSource;
...
Kostafey (2007-04-23 14:16:00) [1]> А для компонента с другим названием что делать? Ещё одну
> библиотеку писать?
У меня как раз такая ситуация, что компоненты называются одинаокво.
> А чего там ещё обрабатывать у TDBEdit-а. В конце концов
> ничто не мешает использовать метод-обработчик одной формы
> в качестве обработчика в другой или вызвать в обработчике
> нужный обработчик как метод.
Да, Вы правы. Что-то я и забыл про такую возможность.
ЮЮ (2007-04-23 05:10:00) [2]>
Суть в чем. Я хотел все немного унифицировать.
DBEditLookTipSubject и ряд ему подобных компонентов имеются
> в несольких формах.
> НАзвания компоненотов абсолютно одинаковы, различны только
> DataSource.
> Вот я и решил в процедурку выделить их обработку.
> А процедурку - в Unit-библиотеку.
А для компонента с другим названием что делать? Ещё одну библиотеку писать? Похоже не от того ты плясать пошел, имя компонента - ничто, свойства и методы - всё.
А чего там ещё обрабатывать у TDBEdit-а. В конце концов ничто не мешает использовать метод-обработчик одной формы в качестве обработчика в другой или вызвать в обработчике нужный обработчик как метод.
Kostafey (2007-04-21 13:42:00) [3]> И что это за unit?
Суть в чем. Я хотел все немного унифицировать.
DBEditLookTipSubject и ряд ему подобных компонентов имеются в несольких формах.
НАзвания компоненотов абсолютно одинаковы, различны только DataSource.
Вот я и решил в процедурку выделить их обработку.
А процедурку - в Unit-библиотеку.
Kostafey (2007-04-21 13:39:00) [4]> Непонятен смыл выполнения этого кода в этом unite. И что
> это за unit? Почему нельзя сразу в методе SenderForm написать
> DBEditLookTipSubject.DataSource := <нужный DataSource>
UnitLib.pas(37): Undeclared identifier: 'DBEditLookTipSubject'
ЮЮ (2007-04-21 04:24:00) [5]3) Работа с компонентами формы из другого Unit:
procedure SetSubjectFields(SenderForm: TForm; SenderDataSource: TDataSource);
begin
with DataModule1 do begin
(SenderForm.FindComponent('DBEditLookTipSubject') as TDBEdit).DataSource :=
SenderDataSource;
Непонятен смыл выполнения этого кода в этом unite. И что это за unit? Почему нельзя сразу в методе SenderForm написать
DBEditLookTipSubject.DataSource := <нужный DataSource>
Плохиш (2007-04-20 17:53:00) [6]
> {RASkov} (20.04.07 16:59) [14]
> > [10] Kostafey © (20.04.07 16:55)
> > Или нет ?
>
> Немного не так.... Я ведь могу OnCreate обозвать MySozdanieFormy,
> а ты вызываешь inherited; Т.е. в предке будет искаться
> MySozdanieFormy.
И в чём проблема, не найдёт и не вставит в проект, это вообще директива для компилятора.
Kostafey (2007-04-20 17:47:00) [7]> Разницу меду методом и конструктором ощущаешь?
Понял, не дурак, дурак бы не понял :)
{RASkov} (2007-04-20 17:19:00) [8]> Разницу меду методом и конструктором ощущаешь?
Собственно разницы, в контесте вопроса об inherited, нет, я специально уклон на имя метода сделал, ибо без параметров inherited; вызывает одноименный метод родителя с теми же параметрами... И вообще все события Control'ов - это свойства :) Вот.
Ega23 (2007-04-20 17:05:00) [9]
> Все. Понял. Спасибо.
Не понял. См. [11], [13].
Разницу меду методом и конструктором ощущаешь?
Kostafey (2007-04-20 17:02:00) [10]> Обработчик события OnCreate это не конструктор.
> Немного не так.... Я ведь могу OnCreate обозвать MySozdanieFormy,
> а ты вызываешь inherited; Т.е. в предке будет искаться
> MySozdanieFormy.
Все. Понял. Спасибо.
{RASkov} (2007-04-20 16:59:00) [11]> [10] Kostafey © (20.04.07 16:55)
> Или нет ?
Немного не так.... Я ведь могу OnCreate обозвать MySozdanieFormy, а ты вызываешь inherited; Т.е. в предке будет искаться MySozdanieFormy.
McSimm_ (2007-04-20 16:58:00) [12]
> А как иначе работать с компонентами формы если они еще не
> созданы?
> Или на момент создания формы они уже созданы ?
На момент вызова обработчика.
Обработчик события OnCreate это не конструктор.
Kostafey (2007-04-20 16:58:00) [13]> Нет. найди 10 отличий между названиями методовCreate и
> FormCreate
Боюсь их только 4 :)
Игорь Шевченко (2007-04-20 16:56:00) [14]
> Поправьте меня в чем не прав.
> inherited - вызывает метод родительского класса. Для TForm1
> это TForm.
> Значит
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> inherited;
> вызовет TForm.Create;
>
> Или нет ?
Нет. найди 10 отличий между названиями методов Create и FormCreate
Kostafey (2007-04-20 16:55:00) [15]> Неправильно понимаешь.
Возможно.
Поправьте меня в чем не прав.
inherited - вызывает метод родительского класса. Для TForm1 это TForm.
Значит
procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
вызовет TForm.Create;
Или нет ?
Ega23 (2007-04-20 16:50:00) [16]
> В данном примере, на сколько я понимаю, вызовется TForm.
> Create
>
Неправильно понимаешь.
Kostafey (2007-04-20 16:48:00) [17]Вот так да ! А я думал так не заработает !
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='Hellow World';
end;
Невероятно! И это случилось в наши дни, в XX веке!(С)
Игорь Шевченко (2007-04-20 16:46:00) [18]inherited не лишнее, если форма унаследована от другой формы, в которой на OnCreate есть свой обработчик, который надо выполнить. Иначе лишнее.
Kostafey (2007-04-20 16:44:00) [19]> Ну-ка ответь, что такое inherited
Вот так вот с ходу начинают по учебной программе гонять :)
В данном примере, на сколько я понимаю, вызовется TForm.Create
Хм... и правда, в TForm.Create компонентов еще нет...
ppcumax (2007-04-20 16:41:00) [20]
> А как иначе работать с компонентами формы если они еще не
> созданы?Или на момент создания формы они уже созданы ?
тоже интересует