Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2014, 08:43   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию Ширина первой строки Мемо в пикселях

Мне нужно программно определить, что ширина Мемо стала равна ширине текста (в приложении ширина Мемо меняется по определенным правилам). Цель - чтобы Мемо всегда отображал первую строку (то есть надо сравнивать её ширину с текущей шириной Мемо). Так вот как определить ширину первой строки?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 16.01.2014, 09:05   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
type 
  TMemoCanvas =class(TMemo) // чтобы получить доступ к protected Canvas
  end;

teststr:='узнать ширину этой строки';
w:=TMemoCanvas(Memo1).Canvas.TextWith(teststr);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.01.2014 в 09:08.
evg_m вне форума Ответить с цитированием
Старый 16.01.2014, 09:23   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Ого, интересные у вас методы. Так можно без создания класса TMemoCanvas?
Человек_Борща вне форума Ответить с цитированием
Старый 16.01.2014, 09:28   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
Так можно без создания класса TMemoCanvas?
В некоторых случаях для вызова методов можно и без инициализации. На практике уточню, подходит ли конкретно для данного случая.

--ДОБАВЛЕНО:----
Делфи жалуется что у Мемо1 нету канваса
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 16.01.2014 в 09:33.
Utkin вне форума Ответить с цитированием
Старый 16.01.2014, 09:39   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Можно и без TMemoCanvas, загнав фонт мемо в объект с доступным канвас. Но длиннее
Код:
var BitMap: TBitMap;
begin
  BitMap:=TBitMap.Create;
  BitMap.Canvas.Font.Assign(Memo1.Font);
  Label1.Caption:=IntToStr(BitMap.Canvas.TextWidth('Какая у меня ширина?'));
  BitMap.Free;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.01.2014, 09:42   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Короче я решил просто:
а) использовать моноширинный шрифт (ну где буквы одинаковой толщины)
б) тупо умножать размер шрифта+1 (1 это межбуквенное расстояние) на количество символов
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 16.01.2014, 10:11   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Так можно без создания класса TMemoCanvas?
Мы его и не создаем, мы только объявляем и "приводим" стандартный TMemo к его прямому наследнику TMemoCanvas, являющемуся точной копией, с целью использовать доступ к protected свойствам.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Подбор размера шрифта строки на опр. область в пикселях chertovich Общие вопросы Delphi 1 12.02.2012 17:04
Составить матрицу, элементы первой строки равны максимальному элементу; а второй строки - номеру (Делфи) Markss Помощь студентам 1 30.05.2011 23:15
Строки и ширина колонок в ListView. Заходим, отвечаем... .Phoenix Компоненты Delphi 0 24.03.2010 15:33
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27