Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Перенос кода из основной формы в модуль


Pcrepair ©   (05.11.18 18:12

Добрый день.
частенько код обработки (нажать на батон к примеру) занимает несколько сот строк, приходится переность код в отдельный модуль.
при этом нужно добавлять кучу ссылок на основную форму (типа: uMainForm.Memo1.Text) что несколько утомляет.

Вопрос : нет ли способа в РАД ХЕ10 как то это дело ускорить, типа автоматизировать.


Sha ©   (06.11.18 00:50[1]

Пример бы не помешал, что конкретно не устраивает.

На мой взгляд, все правильно получается:
- код переносишь,
- uMainForm.Memo1.Text не переносишь.

Тут не ускорять надо, а думать,
чтобы отделить работу с данными от визуальной части программы.


han_malign ©   (07.11.18 12:56[2]


> типа автоматизировать

- мечта работодателя - программирует сразу дизайнер, а непонятно чем занимающийся отдел - на вольные хлеба...

type
  TButton1Input = record
     ...
  end;
  TButton1Output = record
     ...
  end;
...
function button1process(const input: TButton1Input; out output: TButton1Output): boolean;
{
function buttonXprocess(const input: TButton2Input): TButton2Output; overload;
function buttonXprocess(const input: TButton3Input): TButton3Output; overload;
}
procedure TMainForm.Button1Click(Sender: TObject);
  function stamp(): TButton1Input;
  begin
     Result.textBefore:= Memo1.Text;
     ...
  end;
  procedure apply(const res:TButton1Output);
  begin
     Memo1.Text:= res.textAfter;
     ...
  end;
var output: TButton1Output
begin
  if( button1process(stamp(), output) )then
     apply(output);
end;
{
procedure TMainForm.Button2Click(Sender: TObject);
  function stamp(): TButton2Input;
  begin
     ...
  end;
  procedure apply(const res:TButton2Output);
  begin
     ...
  end;
begin
  apply(buttonXprocess(stamp()));
end;
}

- var-семантика и тест-кейс - домашнее задание...


Styx ©   (09.11.18 19:53[3]

Можно обернуть код в
With uMainForm do begin
end;

Но стоит ли так делать - решать Вам.


Германн ©   (10.11.18 02:20[4]

Ну в общем случае ссылка на главную форму Дельфи-приложения
это Application.MainForm, но что имел в виду автор вопроса не понятно.


Лори   (12.11.18 08:35[5]

Описывать как функции и передавать параметром нужные объекты.
Ссылок на формы в идеале вообще не должно быть в проекте.


KSergey ©   (12.11.18 08:37[6]

> Pcrepair ©   (05.11.18 18:12) 
> частенько код обработки (нажать на батон к примеру) занимает
> несколько сот строк, приходится переность код в отдельный модуль.

Почему приходится?
Я не переношу.


Павиа   (13.11.18 13:22[7]

Вопрос хороший. А вот хороших ответов я пока что не видел.

Вот есть у меня форма, на ней есть кнопки для вызова калькулятора.  Каждый калькулятор он специфичный, для примера расчёт азимута.  На модальной форме с калькулятором имеет 3 кнопки, отмена, приметь, посчитать плюс крестик.
В форму надо передать 2 параметра забрать 1. В зависимости от modalResult главная форма либо принимает результат, либо отвергнуть.  

1. Идея первая перенести всё во вторую форму.  Сделать ссылки на элементы основной формы. Для тех кто работает долго с проектами понятно что это неудобно. Там переделать тут поправь, а там ссылки закольцивались. Да тестировать.

Первое это слишком тесно связанный код.
Надо разделить отображение и представление модель - MVC.

2. MVC очень неудобно, да и конвертирование из текст в данные и обратно съедает точность. Но этот объект надо задекларировать, сформировать, создать.  Так ещё надо и результирующий объект получить. А после объекты надо разрушить.

Тут уже предложили структуры.  Но хрен редьки неслащи. Выиграете вы 2 строчки а толку?

3. Инвертировать управление.  Предлагается вынести проверку modalResult  в модальную форму. После вызова форма должна возвращать корректное значение результирующего объекта.  
Так как сигнал-слот в  Delphi отсутствует, то их можно заменить событиями.

А так что можно сказать.  У Delphi очень хилый редактор в плане рефакторинга куча ненужных элементов и нет нужных.


Германн ©   (14.11.18 02:23[8]


> Павиа   (13.11.18 13:22) [7]
>
> Вопрос хороший. А вот хороших ответов я пока что не видел.
>
>

Вопрос ТС малограмотный и непонятный из-за этого. Ваш вопрос тоже непонятный. Только гораздо более непонятный.


Плохиш ©   (14.11.18 14:55[9]


> Павиа   (13.11.18 13:22) [7]

Может стоит, в конце концов, основы ооп почитать?


Павиа   (14.11.18 15:40[10]


> > Павиа   (13.11.18 13:22) [7]
>
> Может стоит, в конце концов, основы ооп почитать?

А может кому-то стоит по пробовать по применять эти основы. Вот начитаются википедии и думают, что знают как надо. А у самих в голове не бум-бум и практики 0.

Я основы прекрасно знаю. В отличии от некоторых. Более того знаю чем они отличаются для разных языков. Более того прекрасно знаю и продвинутый уровень ООП. Осведомлён о наличие в интернете кучи готового кода и провёл сравнительный анализ.
Но избыточность и сложность ООП никак не упрощает труд программист который ежедневно должен делать вот такие вот перестановки в коде.

Почему в рефакторинге есть средства для выноса функции в объект, но нет средств для переменных в объект? Как по мне это гораздо более нужная вещь.


Германн ©   (15.11.18 02:40[11]


> Павиа   (14.11.18 15:40) [10]
>
>
> > > Павиа   (13.11.18 13:22) [7]
> >
> > Может стоит, в конце концов, основы ооп почитать?
>
> А может кому-то стоит по пробовать по применять эти основы.
>  Вот начитаются википедии и думают, что знают как надо.
> А у самих в голове не бум-бум и практики 0.
>
> Я основы прекрасно знаю.

Извините, сомневаюсь. Сомневаюсь что вы внимательно прочитали вопрос ТС.


ухты ©   (17.11.18 01:45[12]


> MVC очень неудобно, да и конвертирование из текст в данные
> и обратно съедает точность
а что по вашему есть данные?


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо