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

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

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

midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

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

Сообщение midisa »

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

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

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

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

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

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

Подскажите пожалуйста, как это правильно реализовать?
Последний раз редактировалось midisa 20.06.2013 15:51:51, всего редактировалось 1 раз.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Не понял сути вопроса :oops: Может Вы объясните задачу?.. Возможно имеется ввиду работа с табами, как с отдельными формами?
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

Простите, еще не превык к паскалевскому сленгу.
Да возможно вы правы.
Мне нужно чтобы чтобы каждая вкладка (элементы на этой вкладе) описывались каждая в своем *.pas файле.
Буду признателен за вашу помощь.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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

Код: Выделить всё

function AllocateHWnd(Method: TWndMethod): HWND;
procedure DeallocateHWnd(Wnd: HWND);

{$i classesh.inc}

implementation

uses
  sysconst;


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

Сообщение midisa »

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

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

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

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

Сообщение Padre_Mortius »

midisa, используйте фреймы
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

А что такое таб?
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

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

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

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


Простите за мой сленг, языком программистов паскаля этот элемент называется TPageControl.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

Тогда Вы можете создать много форм и назначить каждой родителем вкладку, а вкладку включить в ваш TPageControl.
Последний раз редактировалось resident 24.06.2013 21:52:53, всего редактировалось 2 раза.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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


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

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


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

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


Можно часть логики программы, если удастся, раскидать по отдельным юнитам. Но это может потребовать рефакторинга программы.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

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

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

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

Добавлено спустя 19 минут 15 секунд:
Методом тыка и чересстрочного чтения следующей статьи испробовал фрем. Похоже тоже самое что и формы. В чем отличие не пойму, кроме того что фрейм сразу включается в форму и родителя задать ему не нужно :) Ага! Еще рамка сама пропадает и фрейм добавляется в uses..
http://delphi-faq.ru/palitra-komponento ... entov.html
midisa
новенький
Сообщения: 95
Зарегистрирован: 13.06.2013 18:27:53
Откуда: Omsk
Контактная информация:

Сообщение midisa »

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

Еще раз всем спасибо за помощь и особое спасибо за Ваше понимание.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

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

Сообщение Padre_Mortius »

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

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

Сообщение resident »

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

Нда, а я уж обрадовался :)
Попробовал форму вставить во вкладку как писал ранее, так если ставить

Код: Выделить всё

Form1.Align := alClient;
, то выскакивает окно с ошибкой!
Изображение
Но далее форма работает нормально, обработчики срабатывают. Но вот это окно с ошибкой с разворачиванием. Может что-то можно сделать? Фреймы глючат, формы вообще вызывают ошибку.
Ответить