![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Одна форма, - два модуля ??? [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]И в чем прикол, в чем смысл?