Форум: "KOL";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизПечать в mdvXLGrid Найти похожие ветки
← →
<Falcon> (2003-10-20 17:13) [0]В частности интересует как реализовать вывод изображения на принтер объединенных ячеек? При оббегании ячеек в цикле и выводе четырехугольников, объединенные ячейки отображаются неправильно.
Пробовал чтобы это обойти так
procedure TForm1.Button1Click(Sender: PObj);
var
i,j,Px,Py : integer;
Rect: TRect;
begin
Printer.BeginDoc;
Px:=GetDeviceCaps(Printer.Handle,LOGPIXELSX) div 100;
Py:=GetDeviceCaps(Printer.Handle,LOGPIXELSY) div 100;
for j:=0 to Grid1.RowCount-1 do
begin
for i:=0 to Grid1.ColCount-1 do
begin
Printer.Canvas.Font.Assign(Grid1.Cells[i,j].Font);
Printer.Canvas.Font.FontHeight:= Printer.Canvas.Font.FontHeight*Py;
Printer.Canvas.Font.FontWidth:= Printer.Canvas.Font.FontWidth*Px;
Printer.Canvas.Brush.Color:=Grid1.Cells[i,j].Color;
Printer.Canvas.Pen.Color:= Grid1.LineColor;
Printer.Canvas.Pen.PenWidth:= 1*Px;
Printer.Canvas.Pen.PenMode:= pmCopy;
Rect:=Grid1.CellToRect(i,j);
Rect:=MakeRect(Rect.Left*Px,Rect.Top*Py,Rect.Right*Px,Rect.Bottom*Py);
Printer.Canvas.RequiredState( HandleValid or FontValid or BrushValid or ChangingCanvas );
if Grid1.IsMerge(MakePoint(i,j)) then
begin
if Grid1.Cells[i,j].Tag<>Grid1.Cells[i+1,j].Tag then
begin
Printer.Canvas.MoveTo(Rect.Right,Rect.Top);
Printer.Canvas.LineTo(Rect.Right,Rect.Bottom);
end;
if Grid1.Cells[i,j].Tag<>Grid1.Cells[i,j+1].Tag then
begin
Printer.Canvas.MoveTo(Rect.Left,Rect.Top);
Printer.Canvas.LineTo(Rect.Right,Rect.Top);
end;
end
else Printer.Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
Printer.Canvas.DrawText(Grid1.Cells[i,j].Text,Rect,DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;
end;
Printer.EndDoc;
end;
В свойстве tag задаю принадлежность к определенной обьединенной ячейке.
Так работает, но сам чувствую сделано через... Помогите советом.
← →
mdw © (2003-10-20 18:09) [1]Здесь наверное поможет перенос из секции private d public полей
FShow - видима ли ячейка(левая верхняя из обьединенных - True, остальные - False)
FIsMerge - обьеденина ли ячейка;
FBoundsWidth - кол-во обединенных ячеек (столбцы);
FBoundsHeight - кол-во обединенных ячеек (строки);
FMergePos: TPoint; - левая верхняя ячеека из обьединенных.
А печатать нужно у которых FShow - True.
← →
mdw © (2003-10-20 18:22) [2]Тогда добавлю сответствующие свойства для ячеек. Просто, когда портировал компонент в KOL, все свойства ячеек грохнул, показалось что не нужны они.
А вообще изначально компонент делался как раз для получения однозначного соответствия того что на экране (96 dpi) и того что выводится в Tif (600 dpi).
Кстати DrawText(...); не одинаково выводит текст при разных разрешениях (экран\принтер), поэтому лучше сначала пробегать всю строку и вызывать DrawText с DT_CALCRECT, получать максимальную высоту ячеек, а потом уже выводить ячейки с этой высотой, иначе текст может вылазить за пределы ячейки.
← →
<Falcon> (2003-10-21 09:30) [3]Спасибо! Попробую сегодня. Кстати мы как-то обсуждали вопрос о вертикальном выводе текста и переносах. Эти свойства можно было бы тоже добавить, я это сделал правда не в компоненте а в проге.Работает. Если нужно - могу выслать. Не знаю только насколько удачно вышло.
← →
mdw © (2003-10-21 11:43) [4]2 <Falcon>
Давай присылай. Я как-то пробовал, но что-то DrawText при вертикальном выводе, у меня странно работает.:(( Так что если получилось, то добавим.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c