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

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

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

Начав с Делфи-2 двадцать пять лет назад, я прошел все версии, испробовал массу технологий, включая работу с БД, с графикой DirectX, связью с серверами и интернетом, разработку на Андроид и IOS, и многое, многое другое.
________________________________________ ________________________________________ ____
P.S. все, о чем здесь написано, всего лишь измышления из головы.
совпадения с реальными людьми и фактами случайны.
Старый
Создание Single Page Application на фреймах
Запись от krapotkin размещена 16.11.2025 в 20:20
Показов 11947 Комментарии 3
Метки delphi, spa

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

В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну главную форму, на которой меняем "начинку".
Разница с "классическим"...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 1.
Реализуем вызовы HTTP API
Запись от krapotkin размещена 01.10.2023 в 12:54
Показов 3684 Комментарии 0
Метки delphi, http, rest api, web api

Мотивация

В настоящее время на смену родному для делфи клиент-серверному приложению, подключенному намертво к базе данных,
пришли те, что получают данные через HTTP запросы к какому-то API.
В современных версиях делфи есть библиотека REST API, но к ней иногда возникают вопросики...
Аватар для krapotkin
Старый
How To Store Cross Platform App Settings In JSON
Запись от krapotkin размещена 19.12.2022 в 11:33
Показов 1761 Комментарии 0
Метки delphi, json

написал вот статейку
https://blogs.embarcadero.com/... gs-in-json
Аватар для krapotkin
Старый
Про "таски"
Запись от krapotkin размещена 03.03.2021 в 08:37
Показов 4561 Комментарии 0
Метки delphi

Про TThread стало понятнее. Давайте про TTask поговорим.

Обычно все начинают с чтения этого блога. Там все написано хорошо, но иногда остаются вопросы.

Про таски надо размышлять так:
видали в полицейских боевиках брифинг перед операцией?
вот это то же самое
мы проводим брифинг, раздаем каждому...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 1.
Учет ТМЦ
Запись от krapotkin размещена 13.06.2019 в 09:44
Показов 4818 Комментарии 4
Метки delphi

Очень часто встречаются темы "как перенести товары из одной таблицы в другую", "как при продаже обновить остатки", "как перед продажей проверить количество на складе"
И все эти темы относятся к классическому XYZ.
Не нужно так делать.

Золотой пули конечно нет, но общий подход при любой работе с ценностями - товарами, деньгами, информацией - таков:
ничего не стоит редактировать и удалять, нужно вести регистрацию событий.
...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 2.
Резюмешечка)
Запись от krapotkin размещена 16.04.2019 в 10:07
Показов 3749 Комментарии 7
Метки delphi

Что я успел за эти годы поделать на Делфи?
Каждый раз, глядя в свое резюме, перебираю в памяти эти программки.

Первая моя работа - на делфи 2 - я писал распознавание диаграммных лент.
В то время, да и сейчас, работа со сканером - это нифига не общий момент. Пришлось...
Аватар для krapotkin
Старый
Рейтинг: 4.00. Голосов: 1.
Что не так с Form1.Caption
Запись от krapotkin размещена 18.09.2018 в 22:19
Показов 5088 Комментарии 3
Метки delphi

Очень распространенная ошибка новичков это обращение в методах класса к переменным этого же класса
Почему это распространено - да потому что Delphi с доисторических времен при создании формы создает не только класс, ее описывающий, но и переменную этого класса, и даже автоматически создает объект и хранит его в этой переменной
Delphi
1
2
3
4
5
6
TForm1=class(TForm)
...
end;
 
var
  Form1: TForm1;
и новичкам кажется что это такое специальное...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 1.
Delphi Community Edition
Запись от krapotkin размещена 29.07.2018 в 16:48
Показов 17028 Комментарии 12
Метки delphi

Свершилось чудо.
Июль 2018 !
Делфи получила бесплатную версию. Community Edition
Про Starter не напоминайте. Она урезана по самое не хочу.

Это практически полная версия Delphi Professional. Не забываем, что недавно в Professional поместили еще и Mobile Pack!!!
Можно писать для Win32, Win64, Andriod....
Аватар для krapotkin
Старый
Индикатор загрузки
Запись от krapotkin размещена 24.06.2018 в 09:08
Показов 4944 Комментарии 4
Метки delphi

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

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

Общая идея
1. Стартовать индикатор...
Аватар для krapotkin
Старый
Использование Firebird вместо ADO
Запись от krapotkin размещена 12.06.2018 в 09:16
Показов 3716 Комментарии 3
Метки db, delphi, firebird

Итак, после статьи Что не так с ADO нужно предложить альтернативу страдающим школьникам на древней как фекалии мамонта D7.

Начиная с Delphi 7 есть прекрасный альтернативный вариант - бесплатная (а не пиратский Access !) БД Firebird и компоненты IBX
с чудной документацией https://www.ibase.ru/ibx/
Для управления этой БД так же лицензионно-халявно идет IBExpert - прекрасное средство управления БД Firebird/Interbase
http://www.ibexpert.com/rus/ibe_sfx.exe
...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 1.
Что не так с ADO
Запись от krapotkin размещена 12.06.2018 в 08:54
Показов 3789 Комментарии 5
Метки db, delphi

Технология и компоненты ADO в силу некоторых причин на этом форуме пользуется абсолютно незаслуженной популярностью.
На самом же деле, ОСОБЕННО если вы новичок, то вы получаете не более простое, а наоборот, наиболее сложное решение ваших задач по работе с БД.

Как правильно подключаться к БД
Ваша программа и БД только во время разработки будет лежать в определенном вами месте. Как только...
Аватар для krapotkin
Старый
Пишем тест. Уровень Beginner. Урок 1
Запись от krapotkin размещена 19.05.2018 в 18:28
Показов 5464 Комментарии 20
Метки delphi

Давайте еще раз. Напишем очередной тест

Раз пошла такая пьянка, делаем полный разбор, начиная с проектирования
Что нам нужно знать о программе
Хранение данных.
Первое что надо обдумать. Сейчас думать не будем вообще, потому что уровень Beginner.
Пусть у нас есть текстовый файл, который содержит две строки в начале
первая...
Аватар для krapotkin
Старый
Что нужно знать о датасетах и DB-компонентах
Запись от krapotkin размещена 16.05.2018 в 09:10
Показов 6586 Комментарии 18
Метки db, delphi

Ахтунг! Аттеншн! Внимание!
1. Все DB-компоненты ОТОБРАЖАЮТ текущую запись и поле датасета, к которому они подключены. НЕ ХРАНЯТ!!!
Они являются элементами ИНТЕРФЕЙСА - т.е. штуками для работы пользователя! Не программиста!!!
Нет смысла брать текст из DBEdit, его надо брать из поля датасета, к которому этот DBEdit подключен.
И наоборот, писать туда значение - такая же...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 2.
SQL запросы и параметры
Запись от krapotkin размещена 11.05.2018 в 10:37
Показов 27037 Комментарии 0

ВВЕДЕНИЕ. ЛИКБЕЗ
Как всегда, в тот момент, когда несколько подзадолбало отвечать на одни и те же вопросы, садишься и пишешь статью, чтобы потом не разжевывать самые азы, а эффектно пулять ссылкой)

Итак. Работа с БД - это то, из-за чего Делфи, как минимум, на десятилетие, стала...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 2.
ProcessMessages
Запись от krapotkin размещена 30.08.2017 в 06:54
Показов 13354 Комментарии 9
Метки delphi

Как только я вижу в чьем-то коде Application.ProcessMessages, я сразу вспоминаю -
несчастные случаи на стройке

Поясню:
Вся программа на делфи выглядит примерно так
Delphi
1
2
3
Application.Initialize;
Application.CreateForm(Form1,TForm1);
Application.Run;
вот если посмотреть код в Application.Run, мы увидим (весьма примерно)
Delphi
1
2
while not Application.Terminated do
  Application.ProcessMessages;
итого. пока приложению...
Аватар для krapotkin
Старый
Рейтинг: 5.00. Голосов: 2.
Процесс инициализации программы, с настройками и подключением к БД
Запись от krapotkin размещена 20.08.2017 в 20:01
Показов 8310 Комментарии 2
Метки db, delphi

Пока не началось
Все шаги по разбору на старте приложения я стараюсь выполнять в переопределенном конструкторе главной формы.
Это не догма, просто так удобнее.
Мы можем делать это и в событии OnCreate, но тогда если мы решили выйти из приложения, то сначала все равно создастся и криво покажется форма и после этого сразу мигнет и пойдет на выход.
Чтобы исключить эти спецэффекты пишем в классе формы переопределение конструктора
Delphi
1
2
TMainForm=class(TForm)
...
...
Аватар для krapotkin
Старый
Программа и ее настройки
Запись от krapotkin размещена 20.08.2017 в 17:55
Показов 9285 Комментарии 5
Метки delphi

Сразу после создания своей самой лучшей программы, встает вопрос, а нельзя ли например запоминать, к какой БД я подключался, каково состояние Form18.CheckBox1.Checked было при выходе из программы, и много других крайне нужных вещей.

Ответ очевиден. Думать об этом стоит ДО создания самой лучшей программы.

Итак, для хранения настроек программы нам понадобятся
1. Класс
Delphi
1
TMySettings = class ... end;
2. Класс или запись
Delphi
1
2
TDBSettings = record
  server:string;
...
Аватар для krapotkin
Старый
Рейтинг: 3.67. Голосов: 6.
Про потоки
Запись от krapotkin размещена 13.08.2017 в 10:03
Показов 32391 Комментарии 59
Метки delphi

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

Сама концепция потоков проста. Вы можете мыслить их как корабль, отправляющийся...
Аватар для krapotkin
Старый
Рейтинг: 1.00. Голосов: 1.
Как правильно сделать форму логина
Запись от krapotkin размещена 13.08.2017 в 08:46
Показов 14860 Комментарии 30
Метки delphi

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

Итак, сначала должен быть сценарий. Вот он.
Стартует...
Аватар для krapotkin
Старый
Рейтинг: 3.67. Голосов: 3.
Создание и использование форм
Запись от krapotkin размещена 13.08.2017 в 08:09
Показов 14826 Комментарии 23
Метки delphi

Формы это то что придумано для взаимодействия вашей модели данных с пользователем.
Совсем НЕ для хранения глобальных переменных, настроек и прочей требухи.
Они должны создаваться в тот момент, когда понадобились, и уничтожаться после использования.
Поэтому первое,...
Аватар для krapotkin
Старый
Рейтинг: 2.83. Голосов: 6.
Как писать игры
Запись от krapotkin размещена 07.06.2017 в 12:27
Показов 7045 Комментарии 2
Метки delphi

Без сомнения, первое, что нужно делать при разработке новой игры - это, конечно, рисовать заставку.
Но второе - вы, вероятно, удивитесь, но это проектирование, а не попытка накидать компонентов на форму и бегом на форум писать вопрос "У меня не работает, что делать".

Вы должны создать МОДЕЛЬ ДАННЫХ - придумать все объекты, которые будут принимать участие в вашей игре, и перечислить, хотя бы...
Аватар для krapotkin
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru