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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 05:32   #1
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию Расчет количества пикселей для отображения записи

Здравствуйте.
Как можно рассчитать количество пикселей необходимое для отображения строчки текста с учетом того что размер шрифта = 10 и известен сам шрифт
Lokos вне форума Ответить с цитированием
Старый 05.04.2011, 08:01   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

canvas.textheight для высоты, canvas.textwidth для ширины, канвас сам посчитает эти параметры с учетом своего текущего canvas.font

также можно использовать canvas.textextent, но он просто объединяет 2 вышеназванных

а если делается без канваса ,то можно создать его в памяти, на имейдже/битмапе, задать фонт, и проверить этими функциями то, что надо
phomm вне форума Ответить с цитированием
Старый 06.04.2011, 03:25   #3
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
canvas.textheight для высоты, canvas.textwidth для ширины, канвас сам посчитает эти параметры с учетом своего текущего canvas.font

также можно использовать canvas.textextent, но он просто объединяет 2 вышеназванных

а если делается без канваса ,то можно создать его в памяти, на имейдже/битмапе, задать фонт, и проверить этими функциями то, что надо
Хм ну у меня задача несколько другая мне надо длину мемо подогнать точно под длину текста длина мемо указывается в пикселях (почему даже и не спрашивайте) Отсюда вопрос как это можно вычислить?
Lokos вне форума Ответить с цитированием
Старый 06.04.2011, 04:06   #4
Asinkrit
Пользователь
 
Аватар для Asinkrit
 
Регистрация: 02.04.2011
Сообщений: 48
По умолчанию

Можно к примеру так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,w,w2:integer;
  aFont:TFont;
begin
  if Memo1.Lines.Count > 0 then
    begin
    aFont:=TFont.Create;
    aFont.Assign(Canvas.Font);
    Canvas.Font.Assign(Memo1.Font);
    w:=0;
    for i:=0 to Memo1.Lines.Count-1 do
      begin
      w2:=Canvas.TextWidth(Memo1.Lines.Strings[i]);
      if w2 > w then w:=w2;
      end;
    Canvas.Font.Assign(aFont);
    Memo1.Width:=w+6;
    end;
end;
Asinkrit вне форума Ответить с цитированием
Старый 06.04.2011, 04:30   #5
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

canvas вообще не применим.
Я программно рисую мемо в отчете FastReport. Все что знаю это количество символов которое будет записано в мемо и шрифт по умолчанию.
Lokos вне форума Ответить с цитированием
Старый 06.04.2011, 10:01   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
а если делается без канваса ,то можно создать его в памяти, на имейдже/битмапе, задать фонт, и проверить этими функциями то, что надо
ну и сделай без реального канваса (какого-либо компонента), создай его в памяти, рассчитай и выкинь
phomm вне форума Ответить с цитированием
Старый 06.04.2011, 10:13   #7
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
canvas вообще не применим
Ну конечно)
Сначала сами себе создаем вымышленные трудности, потом их героически преодолеваем)

Цитата:
Я программно рисую
А что, можно иначе рисовать ?
Или ты валишь графику прямиком в видеобуфер, шарахаясь от WinAPI как черт от ладана ?)

Открою тебе Америку : TCanvas - не более чем удобная оболочка для группы WinAPI-ф-ций

И все что делают методы TCanvas.TextWidth/Height - вызывают WinAPI-ф-цию GetTextExtentPoint32
mss вне форума Ответить с цитированием
Старый 06.04.2011, 10:20   #8
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Ну конечно)
Сначала сами себе создаем вымышленные трудности, потом их героически преодолеваем)


А что, можно иначе рисовать ?
Или ты валишь графику прямиком в видеобуфер, шарахаясь от WinAPI как черт от ладана ?)

Открою тебе Америку : TCanvas - не более чем удобная оболочка для группы WinAPI-ф-ций

И все что делают методы TCanvas.TextWidth/Height - вызывают WinAPI-ф-цию GetTextExtentPoint32
Да можно иначе при помощи редактора...

Делаю так

Код:
   DataBand:=TfrxMasterData.Create(Page);
   DataBand.CreateUniqueName;
   DataBand.Top:=40;
   DataBand.Height:=20;
   DataBand.Visible:=True;
   DataBand.DataSet:=DM1.rpDataset;
   FioAgD := TfrxMemoView.Create(DataBand);
   FioAgD.CreateUniqueName;
   FioAgD.Height := 20;
   FioAgD.DataSet := DM1.rpDataset;
   FioAgD.DataField := 'ФИО';
   FioAgD.SetBounds(0, 0, 200, 20);//здесь указывается размерность в пикселях
   FioAgD.Frame.Typ:=[ftLeft,ftRight,ftTop,ftBottom];
Может я конечно и ошибаюсь но при просмотре классов FastRepor я там не видел TCanvas(((
Lokos вне форума Ответить с цитированием
Старый 06.04.2011, 12:40   #9
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Тоесть этот код вы пихаете в скриптовый движок и он не понимает что такое TCanvas? А расширять возможности движка собственным кодом можно? Обычно такая возможность всегда присутствует.
eduard93 вне форума Ответить с цитированием
Старый 06.04.2011, 13:00   #10
Asinkrit
Пользователь
 
Аватар для Asinkrit
 
Регистрация: 02.04.2011
Сообщений: 48
По умолчанию

В FastReport-е у компонента TMemo есть свойство AutoWidth, чем оно для вас непригодно?
Asinkrit вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент для отображения смайлов SERG1980 Компоненты Delphi 7 29.01.2012 02:54
Недостаточно памяти для отображения Lukker Microsoft Office Word 4 11.04.2010 08:07
Firebird. Расчет количества. artemavd БД в Delphi 40 24.11.2009 06:05
Расчет количества в БД Excell, использование сводных таблиц? ITM Microsoft Office Excel 10 12.01.2009 14:41