Как стать автором
Обновить
0

Delphi *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга

Одним из серьёзных вызовов для Delphi-разработчиков сегодня является модернизация давно работающих проектов и переход на свежую версию языка и среды разработки Delphi. Габриэль Морару – опытный программист, евангелист Delphi, автор книг и блогер – обратился ко всем желающим с предложением бесплатно обновить их проект до современных стандартов в программировании, обеспечив совместимость с Delphi 11.3 и 64-битными ОС.

Что он может сделать для вас:

  • Перейти от ANSI-строк к Unicode.

  • Устранить указатели (Pointer, ^, @), применив безопасные альтернативы.

  • Заменить избыточные TStringList более эффективными структурами данных.

  • Удалить операторы goto и реструктуризовать циклы.

  • Избавиться от ненужных таймеров.

  • Избежать злоупотребления Application.ProcessMessages.

  • Сократить использование глобальных переменных.

  • Обеспечить 64-битную совместимость.

  • Добавить менеджер памяти FastMM для обнаружения утечек памяти.

  • Реализовать проверки на переполнение буфера, переполнение целочисленных значений и перезапись памяти.

  • Выделить в коде повторно используемые процедуры.

  • Разделить проект на библиотеки.

  • Сделать код читабельнее и лёгким в сопровождении.

Если в процессе многолетних доработок ваш код стал запутанным, он даже может сделать ПОЛНУЮ переделку!

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

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

Теги:
0
Комментарии1
IDE
IDE

12 сентября 2024 года, вышло Update 2 для Delphi 12 Athens - Delphi 12.2.

Из основных особенностей:

  • Появился 64-х битный компилятор Delphi. (Сам компилятор, а не создаваемый им код, поддержка компиляции x64 программ есть с 2011 года). На данный момент это поддержка только для компиляторов командной строки. Поддержка x64 компиляторов позволяет упростить компиляцию действительно больших проектов, избавляясь от Out Of Memory в компиляторе.

  • Delphi LSP также также получил поддержку x64.

  • WebStencils Template Library - поддержка HTMX шаблонов.

  • Smart CodeInsight - поддержка AI плагинов в IDE.

  • Focus Mode - полноэкранный режим редактора в IDE, созданный для написания кода без отвлекающих факторов.

  • Улучшение полосы прокрутки редактора IDE, теперь она отображает предупреждения, ошибки, и т.д.

  • Множество улучшений в RTL, VCL, FMX.

Полный список изменений - https://docwiki.embarcadero.com/RADStudio/Athens/en/12_Athens_-_Release_2

Теги:
Всего голосов 13: ↑11 и ↓2+13
Комментарии0

Бесплатная редакция Delphi Community Edition обновлена до актуальной версии 12.1.

  • Комплексная среда разработки с мощным редактором кода, инструментами отладки и встроенным доступом к популярным локальным базам данных.

  • Создание приложений для разных платформ из единой кодовой базы Delphi. Поддерживаются 32/64-разрядные Windows, iOS, свежие выпуски Android, macOS.

  • Включены популярные визуальные фреймворки и компоненты RAD Studio для создания стилизованных пользовательских интерфейсов для ваших приложений.

Качать здесь: https://www.embarcadero.com/products/delphi/starter

Поздравляю всех школьников, студентов и любителей Паскаля! ;)

Теги:
Всего голосов 9: ↑9 и ↓0+11
Комментарии2

Состоялся релиз интегрированной среды разработки Lazarus 3.0, основанной на компиляторе FreePascal и выполняющей задачи, сходные с Delphi. Среда рассчитана на работу с выпуском компилятора FreePascal 3.2.2.

Готовые установочные пакеты с Lazarus подготовлены для Linux, macOS и Windows.

Среди изменений в Lazarus 3.0:

  • набор виджетов на базе Qt6, построенный с использованием С-привязок из Qt6 6.2.0;

  • улучшен набор виджетов на базе Qt5, в котором задействован родной для Qt цикл обработки событий;

  • для всех версий Qt реализованы компоненты TCheckBox.Alignment, TRadioButton.Alignment, TCustomComboBox.AdjustDropDown и TCustomComboBox.ItemWidth;

  • Полностью переработаны привязки на базе GTK3, для которых теперь требуется наличие как минимум версий GTK 3.24.24 и Glib 2.66;

  • в наборе виджетов Cocoa, используемых в приложениях для macOS, добавлена поддержка многомониториных конфигураций и возможность использования IME (Input Method Editor), например, для ввода Emoji;

  • расширены возможности или изменено поведение компонентов TCustomImageList, TTaskDialog, TSpeedButton, TLabel, TPanel, TCalendar, TCheckbox, TRadioButton, TShellTreeView, TShellListView, TTreeView;

  • переделан интерфейс карты символов, который теперь оформлен в виде отдельного пакета и поддерживает изменение размера символов;

  • в редакторе обеспечена подсветка PasDoc;

  • в окне Assembler реализована история навигации.

Источник: OpenNET.

Теги:
Всего голосов 10: ↑10 и ↓0+10
Комментарии0

Добавил в клиент ChatGPT возможность создавать и использовать внешние функции:

Для примера сделал две команды: "Узнать погоду" и "Выполнить команду через cmd"

Функции чата GPT - это механизм их API, который позволяет GPT вызывать по необходимости функции, которые вы регистрируете (отправляете в запросе как доступные) и работать с результатом их выполнения.

Подробнее

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

Функции можно подключать в качестве динамической библиотеки, которая экспортирует функцию gptfunctions, которая в свою очередь возвращает массив объектов, которые представляют функции - объекты типа IChatFunctionExternal.

function gptfunctions: TArray<IChatFunctionExternal>;
begin
  Result := [TChatFunctionCMD.Create];
end;
  IChatFunctionExternal = interface
    ['{B2DACD74-B773-44C2-838D-43BF99CB5405}']
    function GetDescription: WideString;                  //Example: 'Get the current weather in a given location'
    function GetName: WideString;                         //Example: 'get_current_weather'
    function GetParameters: WideString;                   //JSON Scheme
    function Execute(const Args: WideString): WideString; //Args - json with params, result - json with info
  end;

GPT без проблем может вывести список файлов и даже показать содержимое (с кириллицей я пока не разобрался).

Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Исследовал тут проблему завершения программы при завершении сессии винды в FMX.
При таком сценарии происходит утечка памяти, т.к. Application не освобождается при завершении программы.
Проблема это не большая и ни на что не влияет. Но, помимо этого тут затронут момент сохранения пользовательских данных при завершении программы.
Как вы могли заметить, если программа убивается, например, Андроидом, когда он решил, что она давно не используется, то событий закрытия или уничтожения формы не происходит.

Я нашёл интересное событие у формы, но в первую очередь, я увидел, что в FMX, в отличии от VCL, по умолчанию обрабатывается событие WM_ENDSESSION и WM_QUERYENDSESSION, которые мы обычно в VCL обрабатывали вручную у формы через message. Так вот, WM_QUERYENDSESSION по-умолчанию разрешает завершение программы, а вот WM_ENDSESSION, который происходит после этого события генерирует событие у формы под названием OnSaveState.

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

Модуль FMX.Platform.Win.pas
Модуль FMX.Platform.Win.pas

О самой проблеме с утечкой. Её я тоже решил. Косяк в том, что при WM_ENDSESSION происходит завершение программы изнутри процедуры обработки сообщений, что в свою очередь приводит к задержанию в памяти Application.
Всему виной строка Halt (3-я снизу).

Решается это просто, если взять на себя модуль FMX.Platform.Win.pas и изменить немного этот код. Нужно Halt вызвать через очередь сообщений.

Application.Terminate;
TThread.ForceQueue(nil,
procedure
begin
Halt;
end);

Всего голосов 9: ↑9 и ↓0+9
Комментарии1

Модифицировал штатный Memo (FMX) для добавления возможности форматирования текста. А также, ускорил его работу в разных аспектах (прокрутка, выделение, вставка строк и т.д.) Актуально для Delphi 11.3 (на более ранних, скорее всего, работать не будет, т.к. внесены изменения в штатный модуль FMX.Memo.Style.pas, который может быть несовместим между версиями. Модуль находится рядом с проектом).

Пример с работой в 40к+ строк
Пример с работой в 40к+ строк

https://github.com/HemulGM/FMXRichMemo

Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Подборка интересных Delphi/Lazarus компонентов. #1 - Редакторы

TATSynEdit
TATSynEdit

TATSynEdit (Lazarus)

Редактор кода, множество возможностей кастомизации, множество файлов подсветки синтаксиса.

Данный контрол используется в редакторе CudaText.

https://github.com/Alexey-T/ATSynEdit

TTextEditor (Delphi)

Созданный автором TBCEditor редактор кода(по сути дальнейшее развитие TBCEditor под новым именем), множество возможностей кастомизации, множество файлов подсветки синтаксиса.

Данный контрол используется в редакторе Text Editor Pro.

https://github.com/TextEditorPro/TTextEditor

KControls (Delphi/Lazarus)

Набор компонентов, в том числе:

  • Написанный с нуля RTF редактор текста (KMemo)

  • Редактор таблиц (KGrid)

  • HEX редатор (TKHexEditor)

https://github.com/kryslt/KControls/

TRichMemo (Lazarus)

Редактор текста основанный на нативной реализации виджет-сета ОС.

https://github.com/skalogryz/richmemo/

TSynEdit (Delphi/Lazarus)

Классический редактор кода для Delphi/Lazarus.
Крайне стабильный редактор с большой историей.
Из минусов - множество форков, сложно выбрать нужный.
Уже встроен в Lazarus

https://github.com/SynEdit/SynEdit

Всего голосов 17: ↑17 и ↓0+17
Комментарии0