Форум программистов, компьютерный форум, киберфорум
krapotkin
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Блог. Двадцать пять лет Делфи-практики

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

Все, что здесь написано, не является истиной в последней инстанции, скорее, это результат моих размышлений над архитектурой проектов, маленьких и больших, которых я сделал на Делфи более дюжины.

Начав с Делфи-2 двадцать пять лет назад, я прошел все версии, испробовал массу технологий, включая работу с БД, с графикой DirectX, связью с серверами и интернетом, разработку на Андроид и IOS, и многое, многое другое.
________________________________________ ________________________________________ ____
P.S. все, о чем здесь написано, всего лишь измышления из головы.
совпадения с реальными людьми и фактами случайны.

Создание Single Page Application на фреймах

Запись от krapotkin размещена 16.11.2025 в 20:20
Показов 6183 Комментарии 3
Метки delphi, spa

Статья исключительно для начинающих. Подходы оригинальностью не блещут.

В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну главную форму, на которой меняем "начинку".
Разница с "классическим" подходом - каждая страница это не форма, а фрейм, который создается и вставляется в главную форму.
С т.з. программирования фрейм мало чем от формы отличается.
Отдельные формы в приложении будут, в основном, всевозможные диалоги.

Приступим.

1. Пусть в главной форме есть разные панели, меню и всякая другая фигня, типа дерева слева, как в делфи.
Заведем какую-нибудь панель для наших фреймов, пусть pnlMain.

2. Создадим новый пустой фрейм, назовем его BaseFrame (тогда класс автоматически назовется TBaseFrame) и создадим тип TBaseFrameClass. Сохраним в файле UBaseFrame.pas
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
type
TBaseFrame = class(TFrame)
public
  procedure Init;  virtual;
...
end;
TBaseFrameClass = class of TBaseFrame;
...
implementation
procedure TBaseFrame.Init();
begin
  // в базовом фрейме - ничего, а в наследниках скорее всего пригодится
end;

3. В классе формы заводим поле и процедуру
(по-хорошему, надо бы поле вынести отдельной глобальной переменной в отдельный файл, но в целом и так сойдет)
и и метод для смены фреймов
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses ....
UBaseFrame;
TForm1 = class(TForm)
public
  CurrentFrame : TBaseFrame;
  procedure CreateFrame(AClass: TBaseFrameClass)
end;
...
implementation 
procedure TFrom1.CreateFrame(AClass: TBaseFrameClass);
begin
  if Assigned(CurrentFrame) then
    CurrentFrame.Free;
 
  CurrentFrame := AClass.Create(Self);
  CurrentFrame.Parent := pnlMain;
  CurrentFrame.Align := alClient;
  CurrentFrame.Init();
end;
4. Теперь о том, как мы будем создавать новые фреймы
File -> New -> Other -> Inheritable Items -> найти класс BaseFrame
Появится новый фрейм, называйте его как угодно - TMyFrame1
Но на нем будет все то, что вы разместите в базовом фрейме.
Ну и всем им нужно будет при старте что-то загружать и настраивать.
Для этого мы придумали метод Init

Delphi
1
2
3
4
5
6
7
8
9
10
TMyFrame1 = class(TBaseFrame)
public
  aaa: integer;
  procedure Init; override;
end;
 
procedure TMyFrame1.Init; 
begin
   aaa := 5;  
end;

5. В программе при необходимости перехода на новую страницу нашего приложения
Delphi
1
2
3
CreateFrame(TFrame1);
...
CreateFrame(TFrame5);
для любого фрейма, которые вы насоздаете.
Метки delphi, spa
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Здравствуйте.
    А код (заполнения списков, sql запросы, нажатия кнопок и т.д.) в этом случае пишется во Frame или с основной форме?
    Запись от Ru_Di размещена 16.11.2025 в 21:37 Ru_Di вне форума
  2. Старый комментарий
    Аватар для krapotkin
    - код как и раньше пишется в том модуле, к которому относится
    - в главной форме должно быть только управление фреймами, логины и прочее, что нужно главной форме
    - в каждом фрейме - то, что происходит именно в этом фрейме
    - работа с базой - либо во фрейме, либо, если общая часть - в датамодуль ее
    - если есть код и данные , которые используются в нескольких фреймах, сразу выносим их в отдельный файл и используем в модулях через uses
    Запись от krapotkin размещена 17.11.2025 в 09:26 krapotkin вне форума
  3. Старый комментарий
    Аватар для Usaga
    Мы делаем одну главную форму, на которой меняем "начинку".
    Разница с "классическим" подходом - каждая страница это не форма, а фрейм, который создается и вставляется в главную форму.
    А какую задачу ты так решаешь? Вообще, это один из подходов организации "микрофонтендов", и не самый удачный, но явно не озвучено это. И будто приложение при этом остаётся одно. Т.е. ни вашим, ни нашим.
    Запись от Usaga размещена 18.11.2025 в 06:49 Usaga вне форума
 
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru