Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

Все время черно-белая картинка!!! Блин...   Найти похожие ветки 

 
romeo   (2003-11-18 15:35) [0]

Мучаюсь с печатью на принтере (и, соотвественно, с превью).
В данном примере задача простая - нарисовать на белом фоне красную диагональную линию. Рисуется же все время черная линия на прозрачном фоне. Где грабли?
Помогите пожалуйста

procedure TForm1.PBPaint(Sender: TObject); // TPaintBox.OnPaint
var
DC: hDC;
Bmp: hBitmap;
Pen: hPen;
Brush: hBrush;
W, H: integer;
begin
W := GetDeviceCaps(Printer.Handle, HORZRES);
H := GetDeviceCaps(Printer.Handle, VERTRES);
DC := CreateCompatibleDC(Printer.Handle);
Bmp := CreateCompatibleBitmap(DC, W, H);
SelectObject(DC, Bmp);

Brush := CreateSolidBrush(clWhite);
FillRect(DC, Rect(0, 0, W, H), Brush);

Pen := CreatePen(PS_SOLID, 1, clRed);
SelectObject(DC, Pen);
MoveToEx(DC, 0, 0, nil);
LineTo(DC, W, H);

StretchBlt(PB.Canvas.Handle, 0, 0, PB.Width, PB.Height, DC, 0, 0, W, H, SRCCOPY);

DeleteObject(Pen);
DeleteObject(Brush);
DeleteObject(Bmp);
DeleteDC(DC);
end;


 
romeo   (2003-11-18 15:37) [1]

ЗЫ. По-умолчанию в системе установлен цветной принетр (если это важно...)


 
Murad   (2003-11-18 15:42) [2]

Могу предположит 3 возможные "неучтенности "
1. Не выставлено SetStretchBltMode(PaintDc, STRETCH_HALFTONE)
2. Не знаю как через API , а у TBitmap можно попробовать
вызвать SetPixelFormat(pf24bit) ( для Bmp)
3. Глючный драйвер принтера


 
romeo   (2003-11-18 15:49) [3]


> Murad © (18.11.03 15:42) [2]

1 - не помогло
2 - пытаюсь воспользоваться твоим же советом, данным мне вчера (куда здеся пихать-то TBitmap?). На всякий случай - пардон за мою дремучесть. :)
3 - такая фигня при любом принтере


 
Семен Сорокин   (2003-11-18 15:58) [4]

Pen := CreatePen(PS_SOLID, 1, ColorToRGB(clRed));


 
romeo   (2003-11-18 16:07) [5]


> Семен Сорокин © (18.11.03 15:58) [4]
> Pen := CreatePen(PS_SOLID, 1, ColorToRGB(clRed));

Та же унылая черно-белая картина...
Пойду топиться (если раньше не пристрелят)...


 
Семен Сорокин   (2003-11-18 16:12) [6]

а так:
Pen := CreatePen(PS_SOLID, 1, RGB(255, 0, 0));


 
romeo   (2003-11-18 16:20) [7]


> Семен Сорокин © (18.11.03 16:12) [6]

И так тоже. Может это я такой уникальный? :)
На своей машине не пробовал запустить мой кусок кода? Там делов-то -> скопировал, нажал "Run".


 
Семен Сорокин   (2003-11-18 16:41) [8]

Возможно создается монохромный битмап.

The CreateCompatibleBitmap function creates a bitmap compatible with the device that is associated with the specified device context.

HBITMAP CreateCompatibleBitmap(

HDC hdc, // handle to device context
int nWidth, // width of bitmap, in pixels
int nHeight // height of bitmap, in pixels
);


Parameters

hdc

Identifies a device context.

nWidth

Specifies the bitmap width, in pixels.

nHeight

Specifies the bitmap height, in pixels.



Return Values

If the function succeeds, the return value is a handle to the bitmap.
If the function fails, the return value is NULL.

Remarks

The color format of the bitmap created by the CreateCompatibleBitmap function matches the color format of the device identified by the hdc parameter. This bitmap can be selected into any memory device context that is compatible with the original device.

Because memory device contexts allow both color and monochrome bitmaps, the format of the bitmap returned by the CreateCompatibleBitmap function differs when the specified device context is a memory device context. However, a compatible bitmap that was created for a nonmemory device context always possesses the same color format and uses the same color palette as the specified device context.


 
BOA_KAA   (2003-11-18 16:51) [9]

Bmp := CreateCompatibleBitmap(Printer.Handle, W, H);


 
romeo   (2003-11-18 16:52) [10]


> Семен Сорокин © (18.11.03 16:41) [8]

Дайте-ка я Вас расцелую! Поясню за что :

However, a compatible bitmap that was created for a nonmemory device context always possesses the same color format and uses the same color palette as the specified device context.

Было:

DC := CreateCompatibleDC(Printer.Handle);
Bmp := CreateCompatibleBitmap( DC, W, H);

Исправил: Bmp := CreateCompatibleBitmap( Printer.Handle, W, H);

Теперь все сверкает и переливается красками! Вот спасибо так спасибо, всем спасибам спасибо...


 
romeo   (2003-11-18 16:53) [11]


> BOA_KAA © (18.11.03 16:51) [9]


Пардон, писали ответ вместе. Все равно спасибо


 
REA   (2003-11-18 16:54) [12]

HORZSIZE - Width, in millimeters, of the physical screen.
Ну это так - на всякий случай.



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

Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
1-89995
Olivka
2003-11-17 10:21
2003.11.27
tDBGridEh


3-89697
Layner
2003-11-10 15:44
2003.11.27
Подскажите, как сделать запрос на сохранение, если запись была


1-89969
Vyter
2003-11-11 17:27
2003.11.27
коды символов....


6-90047
Wadim
2003-10-03 02:05
2003.11.27
Lan


3-89711
frogl
2003-11-09 11:26
2003.11.27
Записть полей типа text в MS SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский