Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Одна форма, - два модуля ???   Найти похожие ветки 

 
Ganss   (2005-03-10 14:38) [0]

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

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

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


 
Reindeer Moss Eater ©   (2005-03-10 14:41) [1]

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


 
MacroDenS ©   (2005-03-10 14:42) [2]

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


 
Digitman ©   (2005-03-10 14:42) [3]


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


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

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


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

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


 
markers ©   (2005-03-10 14:47) [5]

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


 
Digitman ©   (2005-03-10 14:56) [6]


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


никак.

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


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

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


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

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


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


>Ganss   (10.03.05 15:01) [7]

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

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


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


> Ganss   (10.03.05 15:01) [7]


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

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

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

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


 
markers ©   (2005-03-10 15:26) [11]

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


 
markers ©   (2005-03-10 15:30) [12]

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


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

> Ganss

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.058 c
3-1109317888
Bless
2005-02-25 10:51
2005.03.27
Как узнать номер версии ADO?


14-1109872360
Verg
2005-03-03 20:52
2005.03.27
Адреса protected полей класса


6-1106840265
Alex870
2005-01-27 18:37
2005.03.27
Динамический IP-адрес


1-1111053708
Ega23
2005-03-17 13:01
2005.03.27
Максимальное кол-во записей в TMemo


6-1106403411
Mistic
2005-01-22 17:16
2005.03.27
ICS или Indy? Какой набор компонентов лучше?