Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите по использованию DrawText


Dan ©   (2003-07-03 16:36:00) 

Использую DrawText для определения высоты выводимого текста так, как, например, сделано в Dialogs.
SetRect(R, 0, 0, SomeWidth, 0);
DrawText(Canvas.Handle, PChar(val), Length(val), R,
( при реальном рисовании)

Использую DrawText для определения высоты выводимого текста так, как, например, сделано в Dialogs.
SetRect(R, 0, 0, SomeWidth, 0);
DrawText(Canvas.Handle, PChar(val), Length(val), R,
DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK);

В некоторых случаях, несмотря на то, что строка не влезает в указанную ширину, высота текста остается высотой одной строки. Хотя потом (при реальном рисовании) тот же DrawText выводит эту же строку в две строки.
С чем это может быть связано?


AlexRush   (2003-07-03 18:21:00) [1]

А... :)


Dan   (2003-07-03 18:09:00) [2]

Ничего не понимаю!
Этот пример делает принципиально все то же самое, что и у меня.
Я таким образом пытаюсь подгонять высоту строк StringGrid для вывода текста без обрезания.

НАШЕЛ!
Если тупить, то по-крупному.
При рассчете ширины шрифт в StringGrid нормальный. А при выводе - жирный. Вот он и не влезает!!!


AlexRush   (2003-07-03 17:35:00) [3]

Тестирование: сначала жмешь на батон1, потом - на батон2


AlexRush   (2003-07-03 17:33:00) [4]

Да все нормально, все работает:
// Рисование прямоугольников сделано для наглядности

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
textRect :TRECT;
strVal :string;
public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SetRect(textRECT, 10, 10, 30, 10);
DrawText(Canvas.Handle, PChar(strVal), Length(strVal), textRECT,
( textRect)

Да все нормально, все работает:
// Рисование прямоугольников сделано для наглядности

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
textRect :TRECT;
strVal :string;
public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SetRect(textRECT, 10, 10, 30, 10);
DrawText(Canvas.Handle, PChar(strVal), Length(strVal), textRECT,
DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK);

Canvas.Brush.Color:=clWhite;
Canvas.Pen.Color:=clBlue;
Canvas.Rectangle(textRect);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
Canvas.Brush.Color:=clWhite;
Canvas.Pen.Color:=clRed;
Canvas.Rectangle(textRect);

DrawText(Canvas.Handle, PChar(strVal), Length(strVal), textRECT, DT_WORDBREAK);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
strVal:="this is a toooooo (very very) large string to draw it in this rect!";
end;

end.


Dan   (2003-07-03 17:07:00) [5]

Код определения высоты см. в вопросе.
Код собственно рисования
SetRect(R, ALeft, ATop, ARight, ABottom);
( Canvas.Handle, PChar(s)

Код определения высоты см. в вопросе.
Код собственно рисования
SetRect(R, ALeft, ATop, ARight, ABottom);
DrawText(Canvas.Handle, PChar(s), Length(s), R, DT_WORDBREAK);


AlexRush   (2003-07-03 16:55:00) [6]

Приведи код


Наверх

Титульная страница Поиск, карта сайта Написать письмо