Последние записи
- Windows 10 сменить администратора
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
25th
Июн
Отрисовка текста на Canvas с перекрытием букв друг друга
Имеется задача отрисовывать текст по выбранному шрифту на Image в определенном формате. При этом текст сразу отрисовываться сразу одной строкой не может, т.к. элементы строки содержат разный цвет, поэтому отрисовка текста происходит в цикле со смещением вправо.
Проблема возникает в том, что на выходе текст обрезается, т.к. по каким-то причинам некорректно рассчитывается его ширина. Особенно это проглядывается при выборе курсива — там вообще ширина получается идентичной, что и без курсива почему-то. Но и без курсива проблема имеется.
Упрощенный пример задачи:
procedure TForm2.Button1Click(Sender: TObject);
var
i, WidthShift: Integer;
str, delim: string;
Font: TFont;
Colors: TArray<TColor>;
begin
Font := TFont.Create;
Colors := TArray<TColor>.Create(clRed, clBlack, clGreen);
WidthShift := 10;
if FontDialog1.Execute then
begin
Font.Assign(FontDialog1.Font);
end;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
Image1.Canvas.Font.Assign(Font);
delim := '/';
for i := 0 to 2 do
begin
str := '0';
if i <> 0 then
str := delim + str;
Image1.Canvas.Font.Color := Colors;
Image1.Canvas.TextOut(WidthShift, 100, str);
WidthShift := WidthShift + Image1.Canvas.TextWidth(str);
end;
Font.Free;
end;
В первом случае текст обычный и все равно обрезается. А во втором курсив — там вообще все плохо.
В качестве решения можно было бы рассчитывать какой-то промежуточный запас (относительно высоты шрифта или еще по какой-то зависимости) и добавлять его на каждой итерации, однако по условиям задачи пробелов быть не должно.
Подскажите, пожалуйста, как можно побороть данную проблему?
18th
Июн
Свойство MaxLength у TEdit и кодировка UTF8
Вот какая возникла проблема. Нужно ограничить количество символов, которые может ввести пользователь в TEdit. Для этого предназначено свойство MaxLength, но оно не понимает кодировку UTF8, а именно с ней и работает Lazarus (странно, да, работает с этой кодировкой, но свойства ее не понимают).
В итоге если, скажем, прописать MaxLength := 30, то длина строки будет ограничена лишь 15 символами для русского текста.
Применил костыльное решение:
1. Установил MaxLength := 60, то есть в два раза больше, чем надо (но так оно пропустит более 30 нерусских символов).
2. На обработчик события KeyPress прописал следующее:
if (Key >= ' ') and (UTF8Length(TEdit(Sender).Text) >= 30) then Key := #0;
Оно, конечно, как-то работает, но, во-первых, это реальный костыль, а, во-вторых, работает только если вводить прямо с клавиатуры, а если скопировать длинный текст из буфера, то ограничение не сработает.
Можно, конечно, еще дополнительно проверять длину текста и обрезать его, если окажется длиннее, но это уже двойной костыль будет.
Есть ли нормальное решение проблемы?
15th
Июн
Проблемы с кодировкой в запросе через THTTPSend
Подскажите, есть скрипт на моем веб сервере. Через get запрос принимает фразу и переводит на англ.
С веб браузера скрипт отображает текст нормально, кирилица + латиница.
А с делфи (THTTPSend) ни как не могу получить ответ без кракозябр..
const
URL = 'https://.com/translate/translate.php?source=ru&target=en&text=привет';
var
HTTPs: THTTPSend;
res: TStringList;
JS:ISuperObject;
begin
HTTPs := THTTPSend.Create;
res := TStringList.Create;
HTTPs.Headers.Clear;
if not HTTPs.HTTPMethod('GET', URL) then
showmessage('internet connection: error') else
begin
res.LoadFromStream(HTTPs.Document);
JS:=SO(res.text);
Clipboard.AsText :=Utf8ToAnsi(RawByteString(res.Text));
ShowMessage(res.text);
end;
end;
Utf8ToAnsi(RawByteString( — это уже от безисходности начал варианты с интернета перебирать…
Может есть у кого совет ?
25th
Май
PostgreSQL — чтение файла
есть csv файл, в функции pgplsql прочитать этот файл и создать на его основе таблицу (заголовок csv файла), и затем заполнить эту таблицу данными из этого csv файла.
Как это сделать средствами plpgsql ? Если нельзя то какими средствами можно это реализовать в PostgreSQL ?
20th
Май
Обязательное прикрепление изображений
Как лучше сделать, чтобы при отправке формы требовалось загрузить фото?
12th
Май
Игра «Крестики-Нолики» на чистом HTML (без скриптов)
Не смотря на то, что игра не содержит ни строчки программного кода, компьютер обладает феноменальным интеллектом, обыграть его невозможно!
Всем приятной игры и стремления к победе (бесполезно)…
8th
Май
Динамическое создание массива TScrollBar
Как динамически создать массив TScrollBar, чтобы не возникло проблем?
30th
Апр
Как разместить форму в панель задач?
Хочу разместить форму в панель задач. Как мне это сделать, например, вместо часов?
25th
Апр
CMD скрипт, запустить из memo
Можно ли запустить CMD скрипт с самой программы, например с компонента memo? Как если бы запустили его посредством запуска файла .cmd ???
Нужно чтобы весь скрипт считывался с компоненты.
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)