Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизОдна форма, - два модуля ??? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c