Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизВывод текста Найти похожие ветки
← →
Cobalt © (2012-06-17 20:15) [0]Хочу отрисовать надпись ровно по центру строки
Делаю так:Canvas.Font := MonthesFont;
StringWidth := Canvas.TextWidth(MonthesStr);
TextRect := Rect(StrLeft, ATop + delta,
StrLeft + StringWidth, ATop + delta + FMonthesHeight);
Canvas.Brush.Color := clYellow;
Canvas.FillRect(TextRect);
Canvas.Brush.Color := clLime;
Canvas.TextOut(TextRect.Left, TextRect.Top, MonthesStr);
а получается вот так:
http://desmond.imageshack.us/Himg690/scaled.php?server=690&filename=textout.jpg&res=landing
Желтый прямоугольник отрисовываю для иллюстрации области где хочу надпись.
5 пикселей снизу вылезает, и получается, что надпись идет не по центру :(
Как быть?
← →
Rouse_ © (2012-06-17 21:47) [1]Не по центру по вертикали? Так это потому что ты выравнивание по вертикали нигде не сделал.
← →
Омлет © (2012-06-17 22:01) [2]Что такое delta?
Используй DrawText + DT_VCENTER, если текст однострочный.
← →
Cobalt © (2012-06-17 23:20) [3]
type
TForm6 = class(TForm)
Image1: TImage;
SpinEdit1: TSpinEdit;
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure UpdateString;
private
{ Private declarations }
FontSize: Integer;
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
procedure TForm6.FormCreate(Sender: TObject);
begin
FontSize := 12;
SpinEdit1.Value := FontSize;
UpdateString;
end;
procedure TForm6.SpinEdit1Change(Sender: TObject);
begin
FontSize := SpinEdit1.Value;
UpdateString;
end;
procedure TForm6.UpdateString;
var
ARect: TRect;
TextStr: string;
TextHeight: Integer;
begin
TextStr := "Июнь 2012";
Image1.Invalidate;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0,0,Image1.Height, Image1.Width));
Image1.Canvas.Font := self.Font;
Image1.Canvas.Font.Size := FontSize;
TextHeight := Image1.Canvas.TextHeight(TextStr);
ARect := Rect(0, 0, 200, TextHeight*2);
Image1.Canvas.Brush.Color := clYellow;
Image1.Canvas.FillRect(ARect);
Image1.Canvas.Brush.Color := clLime;
DrawText(Image1.Canvas.Handle, PWideChar(TextStr), Length(TextStr), ARect, DT_VCENTER);
end;
Как-то не похоже что работает :(
← →
Омлет © (2012-06-18 01:22) [4]Ты б хоть в справку заглянул. DT_VCENTER должен идти в паре с DT_SINGLELINE.
← →
Cobalt © (2012-06-18 07:41) [5]а, да, точно :-)
← →
Омлет © (2012-06-18 08:11) [6]К тому же, для вывода WideString необходимо использовать DrawTextW.
← →
Cobalt © (2012-06-18 12:20) [7]Вдогонку:
Несмотря наImage1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0,0,Image1.Height, Image1.Width));
при уменьшении высоты шрифта (и, соответственно, высоты прямоугольника), оставался шлейф от предыдущей отрисовки, как будто игнорируется очистка белым цветом
http://img546.imageshack.us/img546/9755/drawtext2fillrect.jpg
← →
Rouse_ © (2012-06-18 12:27) [8]Шлейф остался потому что у предыдущего ректа ширина была большая.
← →
Омлет © (2012-06-18 12:43) [9]
> Image1.Canvas.FillRect(Rect(0,0,Image1.Height, Image1.Width));
А ширину с высотой местами не перепутал? )
← →
Cobalt © (2012-06-18 12:54) [10]Нифига :-)
я в заливке белым перепутал высоту и ширину прямоугольника.
← →
Cobalt © (2012-06-18 12:57) [11]пока заливал белым, это было незаметно.
поменял цвет заливки - всплыло.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.072 c