Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возможен ли обработчик в другом модуле?


oleg1963lora ©   (2010-01-29 09:01:00) 

Здравствуйте уважаемые Мастера! Главный модуль программы, связанный с главной формой вырос как на дрожжах и продолжает расти дальше. Хочу навести порядок в программе. Нельзя ли определенные обработчики разнести по разным модулям? Например процедуру

TForm1.Button4Click(Sender: TObject);
begin
    LevelTemperature3:=LevelTemperature3+5;
end;
вынести в модуль SetParameter.


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]

Додумался до следующего. В головной программе имею

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.
Для эксперимента в модуль 'SetDevice.pas' перенес ButtonCloseFormClick, объявил ее в интерфейсе и подгрузил туда форму
{$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]


> Возможен ли обработчик в другом модуле?


Возможен.


Наверх

Титульная страница Поиск, карта сайта Написать письмо