Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Одна форма, - два модуля ??? [D6, Win95/98]


Ganss ©   (2005-03-10 14:38:00) 

У меня очень простой вопрос.
Хочу разбить листинг программы на 2 логические части.
Для этого создал 2 модуля. Форма одна, - модулей два.
Связал модули между собой ссылкой uses в разделе implementation.
Для проверки создал кнопку и закрепил за ней процедуру Close:

procedure TForm1.Button1Click(Sender: TObject);
begin
 Form1.Close;
end;

Откомпилировал.
Потом попытался перетащить эту процедуру в Unit 2,
но чтобы она по прежнему обслуживала кнопку формы Form1
(Unit 2 формы не имеет).
Однако, компилятор стал ругаться.
Никак не могу понять, что надо изменить в коде, чтобы процедура одинаково
хорошо работала в любом модуле (хоть в "родном", хоть в "чужом") ???


Юрий Зотов   (2005-03-10 15:35:00) [1]

> Ganss

Если уж так сильно хочется, то спасет не uses, а директива $I.

Но ненадолго. Потому что очень скоро Вы сами увидите, как неудобно стало работать с программой и откажетесь от своей идеи.


markers   (2005-03-10 15:30:00) [2]

Хотя если че5стно делать десять юнитов на каждую пусть даже большую процедуру ИМХО тупо.
Лучше использовать оновную форму для вызова разных процедур и функций которые находятся в юните, иначе ты просто потом начнёш в файлах запутываться...


markers   (2005-03-10 15:26:00) [3]

ИМХО проще не парить себе мозги и сделать три юнита (Если ты так хочешь) Seach.pas, Sort.pas в них пропеши соответствующие процедуры/функции а в главной форме
procedure TForm1.SearchBtOnClick(Sender:Tobject);
begin
 Search(SearchText.text);
end;


Digitman   (2005-03-10 15:11:00) [4]


> Ganss   (10.03.05 15:01) [7]


никто не заставляет тебя в новом юните описывать именно класс новой формы

ты волен описать/реализовать в нем один или более иных собственных классов

но если ты ("ручками" !!) описываешь в новом юните класс-наследник TForm, то он там должен быть единственным таковым наследником, ВНЕ зависимости от того, описываешь/реализуешь ли ты в том же модуле прочие классы, не являющиеся наследниками TForm

такое требование тесно связано с особенностями компилятора ресурсов, который в ходе работы ищет файл дифолт-ресурсов формы (*.res) по тому же имени, которое имеет имя файла юнита


Плохиш   (2005-03-10 15:07:00) [5]


>Ganss   (10.03.05 15:01) [7]

>Но тогда зачем существует такая фишка, как добавление нового модуля (без формы)?

Это ещё не для тебя.


Чапаев   (2005-03-10 15:06:00) [6]

> Да смысл-то в том, что программа большая, искать фрагменты неудобно.
Смотри в сторону файлов *.INC и директивы {$I ...}


Ganss   (2005-03-10 15:01:00) [7]

Но тогда зачем существует такая фишка, как добавление нового модуля (без формы)?


Digitman   (2005-03-10 14:56:00) [8]


> Как дать понять Делфи, что все процедуры в этих модулях
> связаны только с этой формой?


никак.

В Делфи изначально подразумевается, что форма как некий спецкласс от начала и до конца (декларация и реализация) описывается в одном и том же юните


markers   (2005-03-10 14:47:00) [9]

В таком случае можешь сделать так в юните завести процедуру GoButtonClick а в основном модуле в обработчике события онклик сделай вызов GoButtonClick.


Ganss   (2005-03-10 14:46:00) [10]

Да смысл-то в том, что программа большая, искать фрагменты неудобно. Хочется, чтобы, например, поиск был в одном модуле прописан, сортировка в другом ... А форма одна-единственная. Как дать понять Делфи, что все процедуры в этих модулях связаны только с этой формой?


MacroDenS   (2005-03-10 14:42:00) [11]

подключи вторую форму в первой секции uses первой формы, а дальше посмотри в инспекторе объектов нужную функцию для кнопки


Digitman   (2005-03-10 14:42:00) [12]


> Никак не могу понять


необходимо понять разницу между регулярной процедурой и процедурным методом класса

необходимо так же понять, что реализация процедурного метода класса обязана присутствовать в том же юните, где декларирован сам класс


Reindeer Moss Eater   (2005-03-10 14:41:00) [13]

И в чем прикол, в чем смысл?


Наверх

Титульная страница Поиск, карта сайта Написать письмо