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

Delphi *

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

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

Рынок 5D. Проекционные системы

Время на прочтение14 мин
Количество просмотров3.9K
На рынке 5D платформ мы уже более 5 лет. За это время у меня накопился солидный багаж знаний, которыми решил поделиться. В первой части я хочу рассказать о проекционных системах, применяемых в этой отрасли, а так же об адаптации нашего ПО под них. Какие решения мы применяли и почему. Я сознательно не зазываю товарный знак, чтобы не сочли, что пост – это просто реклама очередной программы.
Итак. 5D – это прежде всего кинотеатр со стерео контентом. Ведь звуковые или тактильные ощущения для большинства людей не так важны, как видеоряд.
Читать дальше →
Всего голосов 18: ↑12 и ↓6+6
Комментарии24

Готовим Physically Based Rendering + Image-based Lighting. Теория+практика. Шаг за шагом

Время на прочтение24 мин
Количество просмотров36K
Хей, привет. 2017 год на дворе. Даже простенькие мобильные и браузерные приложения начинают потихоньку рисовать физически корректное освещение. Интернет пестрит кучей статей и готовых шейдеров. И кажется, что это должно быть так просто тоже обмазаться PBR… Или нет?

В действительности же честный PBR сделать достаточно сложно, потому что легко достичь похожего результата, но сложно правильного. И в интернете полно статей, которые делают именно похожий результат, вместо правильного. Отделить мух от котлет в этом хаосе становится сложно.
Поэтому цель статьи не только разобраться, что же такое PBR и как он работает, но и научиться писать его. Как отлаживать, куда смотреть, и какие ошибки типично можно допустить.
Статья рассчитана на людей, которые в достаточной мере уже знают hlsl и неплохо знакомы с линейной алгеброй, и можете написать свой простейший неPBR Phong свет. В общем я постараюсь как можно проще объяснить, но рассчитываю на то, что некоторый опыт работы с шейдерами вы уже имеете.
Читать дальше →
Всего голосов 46: ↑46 и ↓0+46
Комментарии11

Автоматизированная генерация схемных компонентов из PDF файлов для Altium Designer

Время на прочтение4 мин
Количество просмотров17K


Несмотря на то, что Altium Designer поставляется с огромными библиотеками компонентов по-прежнему остается необходимость создания в нем своих схемных компонентов. Особенно это актуально для крупных микросхем с большим количеством выводов и атрибутов выводов. Это могут быть FPGA, микроконтроллеры, процессоры, чипы памяти и т.д. Здесь я представлю свою технологию генерации схемных компонентов экстрагируя информацию из PDF файлов.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии3

Перегрузка операторов в freepascal на примере обыкновенных дробей

Время на прочтение5 мин
Количество просмотров7.7K
image

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

И вот, понадобилось как-то раз реализовать пару функций в корпоративном приложении для оперирования обыкновенными дробями. Современная реализация паскаля, будь то delphi или freepascal, предлагает удобные средства для этого.
Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии12

Истории

Использование code blocks из Objective-C в Delphi на macOS: как мы навели мосты

Время на прочтение15 мин
Количество просмотров4.5K

image


Многие, наверное, слышали о замечательном способе решения программистских задач под названием метод утенка (rubber duck debugging). Суть метода в том, что надо сесть в ванную, расслабиться, посадить на воду игрушечного утенка, и объяснить ему суть той проблемы, решение которой вы не можете найти. И, чудесным образом, после такой беседы решение находится.


В своей прошлой статье на Хабре, где я рассказывал о разработке программы для инспектирования Wi-Fi сетей для macOS, в роли утенка оказался сам Хабр: я пожаловался на то, что нам никак не удается придумать способ реализации code blocks из Objective-C в Delphi. И это помогло! Пришло просветление, и всё получилось. О ходе мыслей и о конечном результате я и хочу рассказать.

Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Комментарии6

Безболезненная прививка объектного мышления

Время на прочтение13 мин
Количество просмотров17K

Или как можно проще об основных принципах ООП в Lazarus и FreePascal


Часть I


Изучать ООП (объектно-ориентированное программирование) можно двумя способами: или прочитать сотню книжек, в которых дается голая теория об устройстве классов и принципах наследования, полиморфизма, инкапсуляции, но так ничему и не научиться, или перестать беспокоиться и попытаться на практике освоить новые приемы, переработав, к примеру, готовые коды, а лучше с нуля изготовив что-то простое, но красивое.


Во всех книгах, посвященных паскалю, delphi и lazarus (я нашел аж целых две о последнем), очень схожая часть, посвященная ООП. По этим книгам можно много узнать о том, насколько круче ООП устаревшего структурного подхода, но так и не получить достаточных навыков применения этого на практике. Конечно, любой программист, использующий визуальные IDE, уже по умолчанию использует ООП, так как все компоненты и структурные элементы визуального приложения представляют собой объекты, однако свои собственные структуры и абстракции перенести в парадигму ООП бывает очень сложно. Чтобы понять всю прелесть и оценить открывающиеся перспективы, я решил сделать небольшое приложение, которое в конечном итоге превратилось в простенький screensaver. Заодно вспомнил о существовании тригонометрии.

Приложение будет рисовать на экране в случайных местах пятьдесят полярных роз с разными характеристиками: размер, цвет, количество лепестков. Потом их же затирать и рисовать новые, и т.д. Используя принципы структурного программирования, можно, конечно, сделать обычный многомерный массив объемом на 50 и в нем сохранять все уникальные характеристики. Однако стоит вспомнить, что паскаль подразумевает строгую типизацию данных, а, следовательно, массив не может состоять их элементов с разными типами. Можно сделать массив из записей (record), но чего уж мелочиться, от записи до класса — один шаг. Вот его мы и сделаем.

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

JNI Получение и Подключение к JVM в Delphi

Время на прочтение3 мин
Количество просмотров2.7K
Всем доброго времени суток! Сегодня разберем пример как получить загруженную JVM и подключиться к ней. Нужно нам это для того, чтобы выполнить внутри JVM некий код.Итак, приступим:

Создаем новый проект DLL. Добавим Process Attach:

procedure DllMain(dwReason: LongWord);
begin
  case dwReason of
  DLL_PROCESS_ATTACH:
    begin
       //**************************
    end;
  DLL_PROCESS_DETACH:
    begin
      //***************************
    end;
  end;
end;

begin
  DllProc := @DllMain;
  DllProc(DLL_PROCESS_ATTACH);
end.  

Отлично, добавили. Далее нас потребуется в Uses добавить компонент JNI:
Читать дальше →
Всего голосов 8: ↑5 и ↓3+2
Комментарии2

JNI и Delphi. Примеры

Время на прочтение3 мин
Количество просмотров3K
Использование JNI в Delphi

Приветствую всех. Эта статья рассчитана для Новичков, которые только приступили к изучению JNI для работы с ним в среде Delphi. И так в этой статье мы поговорим как именно использовать JNI в Delphi. И так давайте же приступим.

Для начала вам потребуется компонент JNI. Вы можете его скачать ТУТ. Теперь мы готовы приступить к практической части. Я все буду делать на RAD Studio 10.1 Berlin
Читать дальше →
Всего голосов 7: ↑5 и ↓2+3
Комментарии5

Blast-off. От идеи до релиза

Время на прочтение6 мин
Количество просмотров7.8K
Всем привет! Я хочу рассказать историю разработки игры на Delphi от идеи до релиза.
Статья больше носит характер истории, без вникания в подробности реализации. Честно говоря, очень хочется написать про то, как мы строим картинку в игре, или локализуем её, как мы делали GUI, но это я выделю в отдельную статью, больше техническую, с кодом. Иначе эта окажется слишком большой. Кода тут не будет, но детали под катом. Прошу!



Application.Initialize;


Итак. Игра наша придумана была давно для конкурса разработки игр (джема) IGDC №77 — джампер Это было начало 2012 года. Игру мы делали в состоянии перманентного кранча аж две недели. Код вышел ужасным. Расширять было невозможно, порой возникали необъяснимые глюки, но в целом игра работала и некоторые товарищи умудрялись проводить в ней дни, недели. Пара человек залипали в течение месяца. Стало понятно, что реиграбельность у неё хорошая и надо бы её доделывать. Но, как я сказал выше, код был ужасен из-за скомканных сроков, так что доделок было сделано не очень много и всё благополучно забыто.
Всего голосов 28: ↑27 и ↓1+26
Комментарии24

Исследование защиты ArtMoney. Часть первая

Время на прочтение8 мин
Количество просмотров34K
Приветствую! Сам ArtMoney был закейгенен мной давным-давно. Я не первый раз уже пробую начать писать статью о том, как происходил кейгенинг этой программы, но, всегда где-то стопорился. На этот раз, я решил доделать все до конца! Плюс, эту статью можно считать продолжением цикла статей о крякинге для новичков.

Итак, в этой статье вы узнаете, как я писал кейген к ArtMoney (здесь будет описана версия 7.45.1).
Читать дальше →
Всего голосов 73: ↑70 и ↓3+67
Комментарии7

Delphi со вкусом Cocoa

Время на прочтение13 мин
Количество просмотров17K
Delphi со вкусом Cocoa

В жизни каждого мужчины наступает момент, когда, окинув взглядом свежую мировую статистику по использованию операционных систем, он понимает, что пришло время больших перемен. Дом, работу и жену при этом менять вовсе не обязательно, а вот попробовать охватить аудиторию, которая заметно выросла за последний десяток лет, все же стоит. Речь пойдет о разработке на Delphi для macOS (в девичестве OS X) и о том, как мы в компании TamoSoft выбирали инструменты, осваивали новое, учились, подрывались на минах и получали удовольствие от процесса.
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии25

VCL, избавляемся от мерцания, раз и навсегда

Время на прочтение34 мин
Количество просмотров44K

Delphi и C++Builder разработчики, использующие VCL не по наслышке знают о вездесущей проблеме мерцания контролов. Мерцание происходит при перерисовке, вследствие того, что сначала отрисовывается фон компонента, и только потом сам компонент.


И если в случае с наследниками от TWinControl частичным решением проблемы является установка свойства DoubleBuffered в True, что заставляет контрол отрисовываться в буфере (однако DoubleBuffered работает тоже не идеально, к прим.: контрол перестает быть прозрачным), то в случае с TGraphicControl решение с DoubleBuffered просто невозможно, из-за отсутствия у TGraphicControl окна, установка же DoubleBuffered в True у родителя не помогает, из-за того что отрисовка вложенных TGraphicControl-ов происходит уже после прорисовки родителя в буфере.


Обычно остается только одно — смириться с мерцанием, и максимально упростить отрисовку для минимизации эффекта, или использовать по возможности исключительно TWinControl-ы, что не всегда возможно и удобно.


Однажды намучившись с мерцанием, я не выдержал и решил решить эту проблему, раз и навсегда!


Как мне удалось решить проблему?

Читать дальше →
Всего голосов 55: ↑51 и ↓4+47
Комментарии181

Аналог .Net Entity Framework в Delphi посредством RTTI. Часть первая, вступительная

Время на прочтение7 мин
Количество просмотров8.2K
После того, как в Embarcadero оживили Delhi, я вернулся с разработки на C# к более привычному инструменту. Серьезно порадовало, что большинство синтаксических возможностей, классов и различных «рюшечек» волшебным образом переехало из шарпа. К сожалению, такая приятная возможность, как отображение выборки из базы данных на коллекции классов осталась за скобками.

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

Раскинув мозгом и оценив возможности RTTI, трудозатраты и наличный запас бубнов, у нас получился список «хотелок» для работы с БД, которых не хватает в нашей скучной жизни:

  1. Автоматическая генерация классов по структуре таблиц разрабатываемой БД.
  2. Заполнение списков классов данными из таблиц.
  3. Для реализации создания классов будет не лишним считывать структуру таблиц БД.
  4. Имея на руках структуру БД можно автоматизировать:

  • Сравнение структуры существующей БД с эталонной для предупреждения ошибок при обновлении разрабатываемого ПО у конечного пользователя;
  • Формирование «контракта БД», содержащего в себе константы названий таблиц, полей, хранимых процедур и функций;
  • Создание классов из пп. 1. с учетом связей между таблицами.
  • Создание «оберток» для вызова хранимых процедур и функций.

И при правильной реализации и аккуратной работе вдалеке начинает маячить возможность кроссплатформенной работы между различными типами SQL серверов.
Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии30

Ближайшие события

Fire-Monkey help and tips

Время на прочтение6 мин
Количество просмотров6K


За годы существования фреймворк Fire-Monkey(FMX) претерпел множество изменений, и если с самого начала он был очень сырым и ненадежным, то сейчас это намного более стабильная и надежная платформа.

Данная заметка представляет из себя сборник из нескольких полезных советов для разработчиков использующих данный фреймворк.
Читать дальше →
Всего голосов 11: ↑7 и ↓4+3
Комментарии5

МСУИИ AmigaVirtual — универсальный ИИ для каждого

Время на прочтение14 мин
Количество просмотров5.6K
Логотип Привет всем любителям и исследователям искусственного интеллекта! В данной статье я хотел бы рассказать об интересном проекте: модульной системе универсального искусственного интеллекта (МСУИИ) «Amiga Virtual» (AV, «Виртуальная Подружка»). Я расскажу об основных принципах её работы и опишу некоторые детали реализации, а самые любопытные смогут исследовать все исходные коды. Разработка ведётся на Delphi, но модули теоретически могут быть написаны на любом ЯП. Данная система будет интересна как конечным пользователям чат-ботов и связанных с ними систем, так и разработчикам ИИ — ведь на её основе можно разработать практически любой тип ИИ.
Читать дальше →
Всего голосов 19: ↑13 и ↓6+7
Комментарии7

История языков программирования: Delphi — больше, чем просто язык

Время на прочтение8 мин
Количество просмотров80K
image

С Delphi обычно ассоциируется среда разработки приложений на основе языка Object Pascal, разработанного фирмой Borland. Этот язык является наследником Turbo Pascal с объектно-ориентированными расширениями, который в свою очередь ведет свою историю от «чистого» Pascal, созданного Никлаусом Виртом в 1970 году.

Впоследствии, в 2002 году, разработчики из компании Borland официально поставили знак равенства между языками Delphi и Object Pascal.
Читать дальше →
Всего голосов 72: ↑66 и ↓6+60
Комментарии157

Работа с разными единицами измерения одинакового типа и их конвертация

Время на прочтение3 мин
Количество просмотров3.1K
Доброго времени суток. Столкнулся с интересной задачей в большом проекте, где много расчетов разных расстояний. При том, что даные собираются с разных источников, они могут быть в разных единицах — там метры, там миллиметры. Уследить за всем этим трудно, когда вычисления разбросаны повсюду. А если обьявлена переменная, то зачастую только автору досконально известно, в каких она единицах, так как комментариев в коде почти нет. А автор уволился/забыл/ушёл в запой.
Читать дальше →
Всего голосов 11: ↑8 и ↓3+5
Комментарии10

Применяем дженерики в RAD Studio Delphi. Создаем библиотеку сортировки списков однотипных объектов

Время на прочтение6 мин
Количество просмотров16K
Сегодня будем создавать в RAD Studio Delphi библиотеку классов, реализующих сортировку списков однотипных объектов.

Цель задачи


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

  • оперировать с объектами списка;
  • применять различные правила сравнения объектов;
  • применять различные алгоритмы сортировки объектов.

На выходе должна получиться библиотека классов, которая позволяет:

  • прикладному разработчику сортировать любой из 100 объектов любым из 100 методов сортировки;
  • дорабатывать и поддерживать новые алгоритмы или новые типы объектов в течении одного дня силами одного специалиста.
Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии4

Интеграция внешней объектной системы в Delphi на примере IBM SOM

Время на прочтение11 мин
Количество просмотров3.7K
SOM Technology: Making the Pieces Fit4 года назад вышла моя статья про IBM SOM, где я констатировал крайне плачевную ситуацию, когда утерян значимый инструментарий, и чем дальше, тем меньше шансов восстановить. За прошедшее время много, чего случилось, нашлись и SOM 3.0 для Windows, и SOM 2.1, и открытый клон somFree, и рабочий компилятор DirectToSOM C++ для Windows, и мост в OLE Automation.

Один из моих проектов реализует поддержку SOM в Delphi. Разработка начиналась на Delphi, пришлось часть привязок делать вручную и не так красиво, в процедурном стиле, без проверки типов. Используя эти привязки, был написан генератор привязок в объектном стиле, а затем и сам генератор был переписан на новые привязки, став подтверждением их работоспособности. Ради красоты пришлось хакнуть объектную систему Delphi, и, может быть, вам будет интересно, как это вообще можно делать.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии2

Выбор СУБД для мобильного Delphi-приложения

Время на прочтение7 мин
Количество просмотров20K
Данная статья написана по мотивам – мотивам разработки мобильного приложения, недавно вышедшего на платформах iOS и Android. Это событие можно было бы назвать заурядным и мало кому интересным, если бы не одно большое и несколько незначительных «но»: вся разработка (включая сервер) велась на Delphi, а в качестве СУБД, как ни странно, задействована совсем не SQLite. Автор, безусловно, понимает, что на текущий момент уже существуют мобильные Delphi-приложения, включая доступные в официальных магазинах, однако не наблюдает обилия русскоязычных публикаций, призванных, как минимум, предостеречь читателей от ошибок, сделанных разработчиком таких проектов. Написанное же здесь преследует цель помочь тем, кто сейчас выбирает СУБД для своего творения, либо уже остановился на каком-то варианте, но желает убедиться в правильности своего решения.

Прежде чем начать, необходимо дать краткое представление о разработанном приложении – это список покупок, имеющий в своём запасе некоторый уникальный функционал. Если кто-то сам уже пользуется (или пользовался) одним из многочисленных аналогов, то сейчас мог скептически хмыкнуть – мол зачем ещё один, и так есть из чего выбрать, на что можно лишь посоветовать продолжить чтение, чтобы ознакомиться с его принципиальной особенностью.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии21