Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
4-1108073150
GanibalLector
2005-02-11 01:05
2005.03.27
WM_KILLFOCUS


1-1110886209
DEM_s
2005-03-15 14:30
2005.03.27
Версия exe шника


3-1109307125
alex_pv2
2005-02-25 07:52
2005.03.27
ADO+MSSQL


14-1110098306
Dann
2005-03-06 11:38
2005.03.27
Прокладка кабельных коробов


6-1102678932
aus
2004-12-10 14:42
2005.03.27
RasDial





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский