![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возможен ли обработчик в другом модуле?
oleg1963lora © (2010-01-29 09:01:00)Здравствуйте уважаемые Мастера! Главный модуль программы, связанный с главной формой вырос как на дрожжах и продолжает расти дальше. Хочу навести порядок в программе. Нельзя ли определенные обработчики разнести по разным модулям? Например процедуру
вынести в модуль SetParameter.
TForm1.Button4Click(Sender: TObject);
begin
LevelTemperature3:=LevelTemperature3+5;
end;
DVM (2010-01-29 15:36:00) [1]
> oleg1963lora (29.01.10 09:01)
> Здравствуйте уважаемые Мастера! Главный модуль программы,
> связанный с главной формой вырос как на дрожжах и продолжает
> расти дальше. Хочу навести порядок в программе. Нельзя ли
> определенные обработчики разнести по разным модулям?
Ты лучше подумай, как бы отделить функционал программы (скажем так ее движок) от интерфейса. Реализовывать функционал программы в классе самой формы, хоть и допустимая (до определенных пределов), но все же не лучшая практика. Форма она и есть форма - она должна предоставлять интерфейс, а если программа делает что-то еще кроме того что имеет интерфейс, то вот это все жедательно и вынести в отдельный класс или классы. Сильно может упростить жизнь в ряде случаев, да и аккуратнее так.
Anatoly Podgoretsky (2010-01-29 14:30:00) [2]> oleg1963lora (29.01.2010 10:15:05) [5]
Писать я умею, мне бы еще и алфавит изучить.
oleg1963lora (2010-01-29 11:13:00) [3]
> если же в обработчике повторяется некий полезный код не
> привязанный к свойствам и методам контролов, то этот код
> следует организовать как функцию и уже ее вынести в модуль,
> а не весь обработчик
Простите, проглядел ваше сообщение. Хорошая мысль. Буду ее думать :)
12 (2010-01-29 11:11:00) [4]LevelTemperature3:=LevelTemperature3+5;
т.е.
i:=i+5;
и предлагается жто вынести в модуль?
ну не знаааююю... :))
Ну напиши так
unit Unit2;
interface
function SumOfTwoNumber(a,b:integer):integer;
implementation
function SumOfTwoNumber(a,b:integer):integer;
begin
result:= a+b;
end;
end.
В своем uses Unit2 и
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=SumOfTwoNumber(i,5);
oleg1963lora (2010-01-29 11:10:00) [5]Додумался до следующего. В головной программе имею
Для эксперимента в модуль 'SetDevice.pas' перенес ButtonCloseFormClick, объявил ее в интерфейсе и подгрузил туда форму
program Project1;
uses
Forms,
Main in 'Main.pas' {Form1},
MainGen in 'MainGen.Pas' {Главный генератор},
Init in 'Init.pas',
SetDevice in 'SetDevice.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
{$R main.dfm}, компилируется и выдает сообщение, что ненайдена процедура для обработки нажатия кнопки.
Свойство OnClick не видит обработчик в модуле, отличном от главного.
Как это поправить? Вроде как на правильном пути я...
Медвежонок Пятачок (2010-01-29 10:52:00) [6]в чем смысл выноса целого обработчика в другой модуль?
в том что бы отуда дергать контролы основного модуля?
тогда получаем "чернила для седьмого класса". то есть модуль, повторное использование которого затруднено (обработчик заточен на имена контролов основного модуля)
если же в обработчике повторяется некий полезный код не привязанный к свойствам и методам контролов, то этот код следует организовать как функцию и уже ее вынести в модуль, а не весь обработчик
Медвежонок Пятачок (2010-01-29 10:20:00) [7]свои классы писать умею, а вот как их разнести по модулям...
мда. классы писать он умеет, а разнести их по модулям не умеет.
кто бы мог подумать.......
oleg1963lora (2010-01-29 10:15:00) [8]
> Разносить по модулям нужно не обработчики, а классы.
Что такое ООП я знаю, свои классы писать умею, а вот как их разнести по модулям...
Может посоветуете какую-нибудь литературу(хотя бы название) или ссылку.
А то я раполагаю только Архангельским :(
Jeer (2010-01-29 10:04:00) [9]Олег, а примеры чего Вы хотите увидеть ?
ООП ?
Так это, извините, в книжки.
В одной форме действительно мало кто сосредотачивает все - пишутся отдельные модули ( визуальные/невизуальные ), где и сосредотачивается вспомогательный функционал.
А главная форма является коллектором главного же функционала для пользователя.
oleg1963lora (2010-01-29 09:56:00) [10]
>
> Ну, или регулярные процедуры.
> Т.е., целиться надо в повторное использование кода.
А поподробнее можно? И не на языке кафедры :) Ну или простейший пример.
Leonid Troyanovsky (2010-01-29 09:24:00) [11]
> oleg1963lora (29.01.10 09:01)
> расти дальше. Хочу навести порядок в программе. Нельзя ли
> определенные обработчики разнести по разным модулям?
Плохой порядок. Разносить по модулям нужно не обработчики, а классы.
Ну, или регулярные процедуры.
Т.е., целиться надо в повторное использование кода.
--
Regards, LVT.
oldman (2010-01-29 09:04:00) [12]
> Возможен ли обработчик в другом модуле?
Возможен.