Форум: "KOL";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизТекст в несколько строк в mdvXLGrid - КАК? Найти похожие ветки
← →
<Falcon> (2003-09-17 12:06) [0]Посоветуйте, как лучше сделать текст в ячейке сетки mdvXLGrid в несколько строк?
пробовал:
mdvXLGrid.Cels[i,j].Text:="1-st string"+#13#10+"2-nd string";
- не работает выдает в одну строку с мусором вместо завершения строки и Enter.
Или только через Canvas делать? Не хотелось бы...
← →
savva © (2003-09-17 14:55) [1]я подправлял модуль под свои нужды - убирал DT_SINGLELINE из строки
DrawText(ACanvas.Handle, PChar(ATitle.Items[i]), -1, ARect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
← →
mdw © (2003-09-17 15:31) [2]Или написать эту строчку в в событии 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;
← →
mdw © (2003-09-17 15:34) [3]Вернее вот такую строку:
DrawText(ACanvas.Handle, PChar(ACell.Text), -1, ARect, DT_WORDBREAK);
← →
<Falcon> (2003-09-17 15:46) [4]Во... а то я предыдущий ответ чиатю и уже переспросить хотел при чем тут ATitle.Items[i]. :) Я понял, спасибо!
← →
<Falcon> (2003-09-17 17:13) [5]Работает, только линии сетки затирает...
← →
mdw © (2003-09-17 20:07) [6]>Работает, только линии сетки затирает...
Не затирает, а не рисует. Вся отрисовка ячейки ложится на пользователя... Может свойство - признак как выводить, в одну или несколько строк добавить?
← →
<Falcon> (2003-09-18 09:54) [7]Да. Все правильно. Это я уже поправил. Я тут уже с другой проблемой столкнулся:
При выводе в несколько строк и горизонтальном расположении текста
все нормально - что хотел то и получил, а вот при вертикальном - по строкам то текст бьется, но выводится невесть куда, только части видны. Или вообще одну строку на другую лепит.Вот код, может кто-нибудь подскажет где ошибка?
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-18 14:58) [8]Я поигрался с вертикальным выводом.
Получается вот так:
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, поворачивать его и выводить в ячейке.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c