Главная страница
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.025 c
14-1081257414
Chapha
2004-04-06 17:16
2004.05.02
Таблица db*


3-1081001165
Nous Mellon
2004-04-03 18:06
2004.05.02
Обновление БД


14-1081256066
Maxim Vetera
2004-04-06 16:54
2004.05.02
Print Scrn -> На принтер


14-1081485626
Rouse_
2004-04-09 08:40
2004.05.02
Утро добрым не бывает...


3-1081151802
Бегляров Владимир
2004-04-05 11:56
2004.05.02
Базы данных