![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ExtCreatePen ??? [D5, WinXP]
Alex Shulg © (2004-01-19 15:10:00)Добрый день.
Проблема в следующем: При выводе изображения на экран (используя свои собственные стили линий), все нормально, но при выводе на принтер - сплошная линия. В обоих случаях параметры ExtCreatePen одинаковые.
ExtCreatePen(PS_USERSTYLE | PS_GEOMETRIC, ...->Canvas->Pen->Width, &brush, LStmp->Count, lpStyle), где "..." - принтер или PaintBox.
На принтере получается линия моего стиля, только если убрать PS_GEOMETRIC и толщина линии = 1.
Где грабли?
MBo (2004-02-04 17:13:00) [1]Т.е. пробелы были в несколько пикселов принтера, и слишком малы в миллиметрах?
Alex Shulg (2004-02-04 16:54:00) [2]Все... вернушвись вновь к этой проблеме, разобрался до конца! Смешно, но дело было в расчете длины штрихов и пробелов в lpStyle. Некорректно расчитывал, получались слишком маленькие значения, отсюда и сплошная линия... :)
Alex Shulg (2004-01-21 11:35:00) [3]А вот ExtCreatePen работает со стандартными и с толщиной пера >1:
hpen = ExtCreatePen(PS_GEOMETRIC | PS_DOT, Prn->Canvas->Pen->Width, &brush,0,0);
Тогда не понятно, что он хочет от USERSTYLE...
Alex Shulg (2004-01-21 11:31:00) [4]А со стандартными работает, но только с толщиной пера = 1, но это вроде как нормально(MSDN: Если значение, указанное nWidth большее чем 1, fnPenStyle параметр должен быть PS_NULL, PS_SOLID, или PS_INSIDEFRAME. )
hpen = CreatePen(PS_DOT, 1, Prn->Canvas->Pen->Color);
MBo (2004-01-20 16:56:00) [5]принтера нет, поиграть с этим не могу..
А в архивах ньюсгрупп (www.tamaracka.com) навскидку такой проблемы не нашел.
А все же - как со стандартными стилями?
Alex Shulg (2004-01-20 16:49:00) [6]Но это же бред какой-то получается... Нафига тогда все эти функции в API? Либо я где-то "галку не поставил", либо Билли - явный ботаник... (и вся его команда туда же...)
MBo (2004-01-20 13:37:00) [7]Тогда, наверно, придется на битмап соответствующих размеров рисовать, потом его копировать...
Alex Shulg (2004-01-19 16:32:00) [8]>MBo
Судя по всему поддерживает все возможное...
GetDeviceCaps(Prn->Handle,LINECAPS) возвращает $FE
Таблица из windows.pas:
LC_NONE = 0; { Lines not supported }
LC_POLYLINE = 2; { Can do polylines }
LC_MARKER = 4; { Can do markers }
LC_POLYMARKER = 8; { Can do polymarkers }
LC_WIDE = $10; { Can do wide lines }
LC_STYLED = $20; { Can do styled lines }
LC_WIDESTYLED = $40; { Can do wide styled lines }
LC_INTERIORS = $80; { Can do interiors }
MBo (2004-01-19 15:28:00) [9]возможно, драйвер принтера не поддерживает
попробуй GetDeviceCaps с, вероятно, LC_STYLED или LC_WIDESTYLED
Кстати, если не User, а стандартный стиль (DOT, например) - тоже не хочет