как разбить TPageControl на отдельные классы?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

как разбить TPageControl на отдельные классы?

Сообщение midisa » 18.06.2013 21:11:33

Еще раз доброго времени суток уважаемые господа программисты.

Прошу меня простить, что часто задаю вопросы, но без вашей помощи мне никак нельзя (хотябы первое время).
Вопрос возможно простой, но чего то не могу сообразить как это реализовать ...

Нужно таб контрол разбить на отдельные классы. Каждая вкладка контрола должна быть в отдельном классе. Как это реализовать?

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

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

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

Подскажите пожалуйста, как это правильно реализовать?
Последний раз редактировалось midisa 20.06.2013 15:51:51, всего редактировалось 1 раз.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

Re: как разбить таб контрол на отдельные классы?

Сообщение VirtUX » 18.06.2013 21:56:17

Не понял сути вопроса :oops: Может Вы объясните задачу?.. Возможно имеется ввиду работа с табами, как с отдельными формами?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: как разбить таб контрол на отдельные классы?

Сообщение midisa » 19.06.2013 17:53:49

Простите, еще не превык к паскалевскому сленгу.
Да возможно вы правы.
Мне нужно чтобы чтобы каждая вкладка (элементы на этой вкладе) описывались каждая в своем *.pas файле.
Буду признателен за вашу помощь.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

Re: как разбить таб контрол на отдельные классы?

Сообщение Лекс Айрин » 19.06.2013 18:29:33

midisa, а смысл? Если уж хочется разбить файл, то для этого есть *.inc файлы, в которые можно вынести какой-то законченный кусок, а потом его подключить:

Код: Выделить всё
function AllocateHWnd(Method: TWndMethod): HWND;
procedure DeallocateHWnd(Wnd: HWND);

{$i classesh.inc}

implementation

uses
  sysconst;


пойми, любая форма это один сложный объект... соответственно и описываться она должна как единое целое.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: как разбить таб контрол на отдельные классы?

Сообщение midisa » 19.06.2013 19:06:24

Рад бы все в одном файле хранить ....
У меня программа очень большая (очень большая) на сях примерно 200 метров исходного кода. Нужно эту программу перевести под линукс, при том что нельзя менять интерфейс, чтобы пользователи не видели разницы и чтобы не обрезать функциональные возможности (в новой версии). У меня там все на табах закручено. Каждый таб в отдельном классе, клас примерно по 5000 строк кода (на сях).

В общем если я не разделю программу по отдельным формам будет очень трудно делать серфинг по коду (с этим в лазарусе тоскливо).
Ранее (примерно в 2000 году) я писал несколько приложений на языке высокого уровня (разновидность паскаля), когда проект достиг большого размера (там тоже хранилось все в одном файле), компилятор собирал программу, но программа выдавала ошибки совершенно в разных местах т.к. ей видимо не хватало памяти.
С тех пор я не косался языков высого уровня.
Сейчас приперло и заманчиво то, что многоплотформенность поддерживается.
В случае успешного написания, можно будет для виндовс собрать.

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

Спасибо всем за участие в обсуждени ... если никто не хочет по теме добавить, то тема закрыта.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

Re: как разбить таб контрол на отдельные классы?

Сообщение Padre_Mortius » 19.06.2013 19:11:42

midisa, используйте фреймы
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: как разбить таб контрол на отдельные классы?

Сообщение resident » 19.06.2013 19:30:33

midisa писал(а):У меня там все на табах закручено. Каждый таб в отдельном классе

А что такое таб?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: как разбить таб контрол на отдельные классы?

Сообщение midisa » 19.06.2013 19:41:09

а как фреймы использовать? Поставил фрейм на форму, но он не создал мне новый *.pas файл ....
Какие манипуляции с ним сделать, чтобы он создал отдельный класс?

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

Добавлено спустя 2 минуты:
resident писал(а): midisa писал(а):У меня там все на табах закручено. Каждый таб в отдельном классе
А что такое таб?


Простите за мой сленг, языком программистов паскаля этот элемент называется TPageControl.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

Re: как разбить таб контрол на отдельные классы?

Сообщение resident » 19.06.2013 20:16:57

midisa писал(а):Простите за мой сленг, языком программистов паскаля этот элемент называется TPageControl.

Тогда Вы можете создать много форм и назначить каждой родителем вкладку, а вкладку включить в ваш TPageControl.
Последний раз редактировалось resident 24.06.2013 21:52:53, всего редактировалось 2 раз(а).
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: как разбить таб контрол на отдельные классы?

Сообщение Лекс Айрин » 19.06.2013 20:20:43

midisa писал(а):Ранее (примерно в 2000 году) я писал несколько приложений на языке высокого уровня (разновидность паскаля), когда проект достиг большого размера (там тоже хранилось все в одном файле), компилятор собирал программу, но программа выдавала ошибки совершенно в разных местах т.к. ей видимо не хватало памяти.


Ну, сейчас не 2000 год, а 2013... вполне допустимо, что теперь эта проблема исчезла.

midisa писал(а):но мне пока не понятно где заканчивается граница визуального программирования в паскале ...


Лучше сказать, проектирования. Без написания логики вручную, толку от форм мало.

midisa писал(а):Ну если нельзя раскидать проект по разным файлам, то буду использовать лазарус для других маленьких проектов.


Можно часть логики программы, если удастся, раскидать по отдельным юнитам. Но это может потребовать рефакторинга программы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: как разбить таб контрол на отдельные классы?

Сообщение resident » 19.06.2013 20:22:32

midisa писал(а):а как фреймы использовать?

На других форумах встречал примеры, сейчас уж и не помню где. У кого-то там сотня форм использовалась или типа того :)

Добавлено спустя 5 минут 59 секунд:
Лекс Айрин писал(а):Можно часть логики программы, если удастся, раскидать по отдельным юнитам. Но это может потребовать рефакторинга программы.

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

Добавлено спустя 19 минут 15 секунд:
Методом тыка и чересстрочного чтения следующей статьи испробовал фрем. Похоже тоже самое что и формы. В чем отличие не пойму, кроме того что фрейм сразу включается в форму и родителя задать ему не нужно :) Ага! Еще рамка сама пропадает и фрейм добавляется в uses..
http://delphi-faq.ru/palitra-komponento ... entov.html
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: как разбить таб контрол на отдельные классы?

Сообщение midisa » 19.06.2013 21:05:44

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

Еще раз всем спасибо за помощь и особое спасибо за Ваше понимание.
midisa
новенький
 
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk

Re: как разбить таб контрол на отдельные классы?

Сообщение resident » 19.06.2013 21:24:41

midisa писал(а):Тему можно считать закрытой ...

Кхе, что-то у меня не совсем правильно работает.
Для примера создал два фрейма с кнопками и положил их на вкладки PageControl.
Создал обработчики нажатий кнопок с обычным сообщением ShowMessage('This is Frame');
А они обработчики не срабатывают. Хорошо, изменяю Caption кнопок, в фрейме меняются - на форме нет! :?
Удаляю один фрейм с формы и добавляю заново - все работает.
Это что ж получается после каждого изменения удалять и вставлять фрейм? Тогда уж лучше формы, правда я их пока здесь не пробовал.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: как разбить таб контрол на отдельные классы?

Сообщение Padre_Mortius » 19.06.2013 21:27:47

Удаляю один фрейм с формы и добавляю заново - все работает.

Это есть такая баго-фича
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: как разбить таб контрол на отдельные классы?

Сообщение resident » 19.06.2013 21:44:29

Padre_Mortius писал(а):Это есть такая баго-фича

Нда, а я уж обрадовался :)
Попробовал форму вставить во вкладку как писал ранее, так если ставить
Код: Выделить всё
Form1.Align := alClient;
, то выскакивает окно с ошибкой!
Изображение
Но далее форма работает нормально, обработчики срабатывают. Но вот это окно с ошибкой с разворачиванием. Может что-то можно сделать? Фреймы глючат, формы вообще вызывают ошибку.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 257

Рейтинг@Mail.ru
cron