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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2014, 01:18   #1
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию выравнивание текста в drawgrid по центру

как можно при отрисовки выравнить текст в drawgrid по центру.
Код:
procedure TForm1.DG1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
Var x, y:Integer;
begin
  With dg1 do begin
    canvas.FillRect(rect);
    x:=Round(32 / 2 - ((Length(IntToStr(ARow))*canvas.Font.Size)/2));
    y:=Round(32 / 2 - canvas.Font.Height) ;
    if (ACol <=0)and(ARow >= 1) then
      Canvas.TextOut(rect.Left+x, rect.Top, 'М: '+IntToStr(ARow))
    else if (ARow <= 0)and(ACol >=1) then
      Canvas.TextOut(rect.Left+x, rect.Top, 'ID: '+IntToStr(ACol-1));
  end;
end;
но текст почемуто не поцентру отрисовывается

Последний раз редактировалось Alexandr17; 08.08.2014 в 01:20.
Alexandr17 вне форума Ответить с цитированием
Старый 08.08.2014, 02:37   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

DrawText с параметром DT_CENTER не подойдёт как замена TCanvas.TextOut?
Ну а по приведенному коду могу сказать лишь, что TFont.Size - это относится к высоте шрифта, а отнюдь не к его ширине.
Для оценки ширины у TCanvas есть метод TextWidth

<offtop>
Что-то количество Александров с номером в последние дни зашкаливает. Причём на многих Дельфийских форумах
</offtop>
northener вне форума Ответить с цитированием
Старый 08.08.2014, 03:57   #3
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
DrawText с параметром DT_CENTER не подойдёт как замена TCanvas.TextOut?
Ну а по приведенному коду могу сказать лишь, что TFont.Size - это относится к высоте шрифта, а отнюдь не к его ширине.
Для оценки ширины у TCanvas есть метод TextWidth

<offtop>
Что-то количество Александров с номером в последние дни зашкаливает. Причём на многих Дельфийских форумах
</offtop>
нет не подойдет так как не имеет возможности отрисовки картинок
Alexandr17 вне форума Ответить с цитированием
Старый 08.08.2014, 05:26   #4
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Мне тоже отсыпь.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 08.08.2014, 07:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не подойдет так как не имеет возможности отрисовки картинок
А такую функцию самому придется писать используя к тому что было сказано функцию BitBLT() или StretchBLT();
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 07:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не подойдет так как не имеет возможности отрисовки картинок
А такую функцию самому придется писать используя к тому что было сказано функцию BitBLT() или StretchBLT();
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 13:51   #7
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Код:
if (ACol <=0)and(ARow >= 1) then begin
      x:=Round(32 / 2 - ((Length('М: '+IntToStr(ARow))*canvas.TextWidth('М: '+IntToStr(ARow)))/2));
      y:=Round(32 / 2 - canvas.TextHeight('М: '+IntToStr(ARow)));
      Canvas.TextOut(rect.Left+x, rect.Top+y, 'М: '+IntToStr(ARow))
    end else if (ARow <= 0)and(ACol >=1) then begin
      x:=Round(32 / 2 - ((Length('ID: '+IntToStr(ACol-1))*canvas.TextWidth('ID: '+IntToStr(ACol-1)))/2));
      y:=Round(32 / 2 - canvas.TextHeight('ID: '+IntToStr(ACol-1)));
      Canvas.TextOut(rect.Left+x, rect.Top+y, 'ID: '+IntToStr(ACol-1))
при таком раскладе рисует черти где
Alexandr17 вне форума Ответить с цитированием
Старый 08.08.2014, 14:03   #8
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

проблему решил используя свою формулу
Код:
if (ACol <=0)and(ARow >= 1) then begin
      x:=((32 div 2) - (Canvas.TextWidth('М: '+IntToStr(ARow)) div 2));
      y:=((32 div 2) - (Canvas.TextHeight('М: '+IntToStr(ARow)) div 2));
      Canvas.TextOut(rect.Left+x, rect.Top+y, 'М: '+IntToStr(ARow))
    end else if (ARow <= 0)and(ACol >=1) then begin
      x:=((32 div 2) - (Canvas.TextWidth('ID: '+IntToStr(ACol-1)) div 2));
      y:=((32 div 2) - (Canvas.TextHeight('ID: '+IntToStr(ACol-1)) div 2));
      Canvas.TextOut(rect.Left+x, rect.Top+y, 'ID: '+IntToStr(ACol-1))
    end else if  (ARow >= 1)and(ACol >=1) then begin
      x:=((32 div 2) - (Canvas.TextWidth(IntToStr(MatrixColorRegionArray[ACol-1, ARow-1])) div 2));
      y:=((32 div 2) - (Canvas.TextHeight(IntToStr(MatrixColorRegionArray[ACol-1, ARow-1])) div 2));
      Canvas.TextOut(rect.Left+x, rect.Top+y, IntToStr(MatrixColorRegionArray[ACol-1, ARow-1]));
    end;
Alexandr17 вне форума Ответить с цитированием
Старый 08.08.2014, 14:35   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
нет не подойдет так как не имеет возможности отрисовки картинок
Ага, а TextOut имеет DrawText вместо кучи этого кода
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.08.2014, 14:58   #10
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ага, а TextOut имеет DrawText вместо кучи этого кода
Зато обычный драв имеет
Alexandr17 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выравнивание по центру swish HTML и CSS 3 09.08.2012 20:32
Выравнивание по центру Андрей-прог HTML и CSS 2 17.05.2012 09:27
выравнивание подменю по центру ilma55 HTML и CSS 0 20.09.2010 00:36
выравнивание по центру ruavia3 Microsoft Office Access 5 03.12.2009 09:30
выравнивание по центру в QuickReport Vasya БД в Delphi 3 18.08.2007 20:43