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

Вниз

Ф-ция SelectClipRgn и печать на принтере   Найти похожие ветки 

 
KSergey ©   (2003-05-10 14:36) [0]

Я никак не просеку в каких попугаях этой ф-ции задаются параметры...
Что хочу: при выводе на принтер (картинок) отсекать все, что за пределами определенного прямоугольника.
Как печатаю:

var
CardRect: TRect;
hRegion: HRGN;
begin
Printer.BeginDoc;
SetMapMode (Printer.Canvas.Handle, MM_LOMETRIC);
CardRect.Left:= // думаю не суть важно как -
CardRect.Top:= // но координаты я здесь вычисляю
CardRect.Right:=
CardRect.Bottom:=
// создать регион
hRegion := CreateRectRgnIndirect (CardRect);
SelectClipRgn (Printer.Canvas.Handle, HRGN(0)); // на всякий случай очищу
SelectClipRgn (Printer.Canvas.Handle, hRegion);
..... // ну а тут пошли методы рисования всякие на канве
// уничтожить объект
DeleteObject (hRegion);
Printer.EndDoc;
end;


Что получаю: если не отрезать обоасть вывода - все нормально, картинка (которая выводится) попадает куда ей и нужно. При этом, обратите внимание, режим координат выставлен таков, что ось Y одет с верху от 0 и вниз координаты увеличиваются по модулю, но с отрицательным знаком (короче в низ пошло -1, -2, -3; это я так, на всякий случай).
Соответственно отрицательные координаты установлены и для CardRect.Top (например, -50) и CardRect.Bottom (например, -100).
Но если в области отсечения задать их такими же - вообще все отрезается. Если сделать их положительными все - ну что-то появляется, но нифига не пойму по каким соображениям (как оно пересчитывается исходя из установленного режима в SetMapMode)

Как тут быть? Может кто знает?


 
KSergey ©   (2003-05-10 14:38) [1]

Да, не отметил сразу: картинка выводится как раз в тех же координатах, т.е. заданных CardRect! (это пока так делаю, для пробы, чтобы проверить) И она (картинка) выводится нормально, а вот область ограничений наложенная вроде как туда же - отсекает все напрочь...


 
MBo ©   (2003-05-10 18:46) [2]

SelectClipRgn воспринимает координаты регииона отсечения, заданные в едниницах устройства (device units).
Используй LPtoDP, чтобы перевести свой прямоугольник в них.

Картинка же выводится в лог. координатах.



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.014 c
3-70140
Алексей
2003-05-01 12:27
2003.05.22
кодирование потоков данных


4-70574
Smok_er
2003-03-21 13:29
2003.05.22
Вопрос про system tray icon


1-70390
Marina_S
2003-05-10 23:31
2003.05.22
Как определить, что Media Player закончил проигрывание файла?


3-70167
Xeon
2003-05-02 08:55
2003.05.22
Файлы в базе данных


14-70437
fighter@str
2003-04-30 18:56
2003.05.22
Жесткий диск IBM