![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Текст в несколько строк в mdvXLGrid - КАК?
<Falcon> © (2003-09-17 12:06:00)Посоветуйте, как лучше сделать текст в ячейке сетки mdvXLGrid в несколько строк?
пробовал:
mdvXLGrid.Cels[i,j].Text:='1-st string'+#13#10+'2-nd string';
- не работает выдает в одну строку с мусором вместо завершения строки и Enter.
Или только через Canvas делать? Не хотелось бы...
mdw (2003-09-18 14:58:00) [1]Я поигрался с вертикальным выводом.
Получается вот так:
R:= MakeRect(ARect.Left, ARect.Bottom, ARect.Right, ARect.Top);
DrawText(ACanvas.Handle, PChar(ACell.Text), -1, R, DT_WORDBREAK or DT_RIGHT );
НО!!! Позиционируется техт правильно. А вот расчет переносов идет не по значению (ARect.Bottom - ARect.Top), а по (ARect.Right - ARect.Left). Я так думаю, что это все таки ошибка в DrawText.
Так что, наверное, придется или вручную расчитывать переносы и выводить построчно TextOut'ом или выводить техт горизонтально на Bitmap, поворачивать его и выводить в ячейке.
<Falcon> (2003-09-18 09:54:00) [2]Да. Все правильно. Это я уже поправил. Я тут уже с другой проблемой столкнулся:
При выводе в несколько строк и горизонтальном расположении текста
все нормально - что хотел то и получил, а вот при вертикальном - по строкам то текст бьется, но выводится невесть куда, только части видны. Или вообще одну строку на другую лепит.Вот код, может кто-нибудь подскажет где ошибка?
procedure TForm1.Button1Click(Sender: PObj);
begin
Grid.Cells[1,1].Font.FontName:='Arial';
Grid.Cells[1,1].Font.FontOrientation:=900;
Grid.Cells[1,1].Font.Color:=clWindowText;
Grid.Cells[1,1].Font.FontStyle:= [fsBold,fsItalic,fsUnderline];
Grid.Cells[1,1].Font.FontCharSet:=RUSSIAN_CharSet;
Grid.AlignmentVert:= avBottom;
Grid.AlignmentHor:=ahCenter;
Grid.Cells[1,1].Text:='Первая строка, вторая строка';
Grid.Cells[1,2].Text:='Test!';
end;
procedure TForm1.GridDrawCell(Sender: PControl; ACol, ARow: Integer;
ACell: PmdvXLCell; ACanvas: PCanvas; ARect: TRect; ASelected,
AFocused: Boolean; var Access: Boolean);
begin
Access:= ACell=Grid.Cells[1,1];
ACanvas.Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
ACanvas.Font.Assign(ACell.Font);
ACanvas.RequiredState( HandleValid or FontValid or BrushValid or ChangingCanvas );
DrawText(ACanvas.Handle, PChar(ACell.Text), -1, ARect, DT_WORDBREAK or DT_CENTER or DT_BOTTOM );
end;
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
begin
GlobalGraphics_UseFontOrient:=True;
end;
end.
mdw (2003-09-17 20:07:00) [3]>Работает, только линии сетки затирает...
Не затирает, а не рисует. Вся отрисовка ячейки ложится на пользователя... Может свойство - признак как выводить, в одну или несколько строк добавить?
<Falcon> (2003-09-17 17:13:00) [4]Работает, только линии сетки затирает...
<Falcon> (2003-09-17 15:46:00) [5]Во... а то я предыдущий ответ чиатю и уже переспросить хотел при чем тут ATitle.Items[i]. :) Я понял, спасибо!
mdw (2003-09-17 15:34:00) [6]Вернее вот такую строку:
DrawText(ACanvas.Handle, PChar(ACell.Text), -1, ARect, DT_WORDBREAK);
mdw (2003-09-17 15:31:00) [7]Или написать эту строчку в в событии OnDrawCell
procedure TMainForm.XLGridDrawCell(Sender: PControl; ACol, ARow: Integer;
ACell: PmdvXLCell; ACanvas: PCanvas; ARect: TRect; ASelected,
AFocused: Boolean; var Access: Boolean);
begin
Access:= True;
ACanvas.RequiredState( HandleValid or FontValid or BrushValid or ChangingCanvas );
DrawText(ACanvas.Handle, PChar(ATitle.Items[i]), -1, ARect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;
savva (2003-09-17 14:55:00) [8]я подправлял модуль под свои нужды - убирал DT_SINGLELINE из строки
DrawText(ACanvas.Handle, PChar(ATitle.Items[i]), -1, ARect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);