Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Печать в 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 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
14-1081254971
Kolyan
2004-04-06 16:36
2004.05.02
Нужен совет


8-1074764725
Yasik
2004-01-22 12:45
2004.05.02
Конвертация


14-1081437031
E1
2004-04-08 19:10
2004.05.02
интересный IRC бот :)


14-1081836634
Dysan
2004-04-13 10:10
2004.05.02
Как уменьшить exe


3-1081240486
Sirus
2004-04-06 12:34
2004.05.02
Как бы организовать выборку из процедур???