Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 22.10.2019, 13:51   #1
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 445
Счастье [РЕШЕНО] Длина строки в пикселях

Здравствуйте!
Подскажите, пожалуйста, как получить длину строки в пикселях?
Женя32 вне форума Ответить с цитированием
Старый 22.10.2019, 14:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от Женя32 Посмотреть сообщение
Подскажите, пожалуйста, как получить длину строки в пикселях?
строки, выведенной на экран? с учётом текущих настроек браузера и отображения?
Наверное, можно это получить из свойств DOM. попробуйте через JS взять width у нужного элемента.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2019, 17:34   #3
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 445
По умолчанию

Ой, я прощу прощение, но, я не в том разделе создал тему... Что делать? Delphi нужно...
Женя32 вне форума Ответить с цитированием
Старый 22.10.2019, 17:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

тю. сейчас перенесу из "Общие вопросы Web" в "Общие вопросы Delphi".
а я ещё подумал, вроде бы тут - https://programmersforum.ru/showthread.php?t=331447 уже всё обсудили, зачем опять? Неужели, думаю, на Web технологии перейти решили..
а оно вот как, оказывается...

а длина строки в пикселях:
https://programmersforum.ru/showpost...47&postcount=2

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ww := Canvas.TextWidth("Тут Ваш текст");
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2019, 18:37   #5
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 445
По умолчанию

ww := Canvas.TextWidth("Тут Ваш текст");
Как то не точно показывает.

Хотел попробовать воспользоваться этой функцией:
Код:
 
      h_DC := Self.Canvas.Handle;
      S:=Edit1.Text;
  Windows.GetTextExtentPoint32(h_DC, PChar(S), Length(S), ts);
Но, выходит ошибка:
[dcc32 Error] Unit1.pas(1023): E2003 Undeclared identifier: 'Windows'
Женя32 вне форума Ответить с цитированием
Старый 22.10.2019, 18:53   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

а зачем Вы написали Windows?
достаточно в uses написать
Код:
uses ... ,Windows, ...
и так пробовали?
Код:
var
  ts : TSize;
  S  : String;
begin
    S := Edit1.Text;
    GetTextExtentPoint32(Canvas.Handle,PChar(S),Length(S), ts);
А у Вас, кстати, точно приложение 32-битное?

p.s. я это просто нагуглил. сам я во внутренностях Windows и тонкостях вывода текста в WinAPI вообще не силён.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2019, 21:31   #7
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 445
По умолчанию

А как получить результат?
Код:
      h_DC := Self.Canvas.Handle;
      S:=RecPaOwnershipW.Text;
     GetTextExtentPoint32(h_DC, PChar(S), Length(S), ts);
Женя32 вне форума Ответить с цитированием
Старый 22.10.2019, 22:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от Женя32 Посмотреть сообщение
А как получить результат?
так это и есть получение результата.
размер возвращается в переменной ts
TSize — это record с полями
Код:
    cx: Longint;
    cy: Longint;
причем сама GetTextExtentPoint32 типа BOOL:
Цитата:
Если функция завершается успешно, возвращаемое значение не нуль.

Если функция завершается с ошибкой, величина возвращаемого значения - ноль.

Windows NT/2000/XP: Чтобы получить дополнительную информацию об ошибке, вызовите функцию GetLastError.
читать - ТЫЦ

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

Последний раз редактировалось Serge_Bliznykov; 22.10.2019 в 22:50.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2019, 22:54   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Canvas.TextExtent то же самое делает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.10.2019, 23:22   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Canvas.TextExtent то же самое делает
Код:
function TCanvas.TextExtent(const Text: string): TSize;
begin
  RequiredState([csHandleValid, csFontValid]);
  Result.cX := 0;
  Result.cY := 0;
  Windows.GetTextExtentPoint32(FHandle, PChar(Text), Length(Text), Result);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длина строки AlexDn Общие вопросы Delphi 3 13.08.2018 03:06
Ширина первой строки Мемо в пикселях Utkin Общие вопросы Delphi 6 16.01.2014 10:11
Подбор размера шрифта строки на опр. область в пикселях chertovich Общие вопросы Delphi 1 12.02.2012 17:04
Assembler длина строки Vitalii Помощь студентам 6 22.11.2011 23:14
Длина строки С++ ArniLand Общие вопросы C/C++ 7 25.03.2010 11:59