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

Вниз

Печать   Найти похожие ветки 

 
Shutov ©   (2004-03-07 18:45) [0]

Здравствуйте. Подскажите пожалуйста, как используя только
WinAPI произвести настройку принтера (минимум - ориентацию и
кол-во печатаемых страниц), а затем и печать (с cоответствующими
настройками из "настройки принтера") обычного Bitmap"а?


 
Shutov ©   (2004-03-07 18:45) [0]

Здравствуйте. Подскажите пожалуйста, как используя только
WinAPI произвести настройку принтера (минимум - ориентацию и
кол-во печатаемых страниц), а затем и печать (с cоответствующими
настройками из "настройки принтера") обычного Bitmap"а?


 
Shutov ©   (2004-03-10 13:48) [1]

Никто ничего не подскажет?


 
Shutov ©   (2004-03-10 13:48) [1]

Никто ничего не подскажет?


 
YuRock ©   (2004-03-10 14:15) [2]

Все это умеет делать ф-ция PrintDlg.

Вот пример (ф-ция возвращает имя принтера и устанавливает настройки):

function SelectPrinter(hWnd : THandle; DevMode : PDevMode) : String;
var
 pdlg : TPrintDlg;
 dm : PDevMode;

begin
 pdlg.lStructSize := SizeOf(TPrintDlg);
 pdlg.hwndOwner := hWnd;
 pdlg.hDevMode := 0;
 pdlg.hDevNames := 0;
 pdlg.hDC := 0;
 pdlg.Flags := PD_HIDEPRINTTOFILE or PD_NOPAGENUMS or PD_NOSELECTION;
 pdlg.hInstance := HInstance;
 pdlg.hPrintTemplate := 0;
 pdlg.hSetupTemplate := 0;
 pdlg.nCopies := 1;
 if PrintDlg(pdlg) then
  begin
    dm := GlobalLock(pdlg.hDevMode);
    Result := StrPas(dm.dmDeviceName);
    if Assigned(DevMode) then CopyMemory(DevMode, dm, SizeOf(TDevMode));
    GlobalUnlock(HGLOBAL(dm));
  end
 else
  Result := "";
end;


В параметр этой ф-ции в итоге (DevMode) в итоге запишутся нужные настройки. Если не хотите выбрасывать окно с выбором принтера - можете проициализировать DevMode вручную. DevMode затем передается как параметр в CreateDC. Пример:

procedure TGStatusGrid.Print;
var
 DC : HDC;
 di : TDocInfo;
 hPrevFont : THandle;
 sPrinterName : String;
 dm : TDevMode;
begin
 sPrinterName := SelectPrinter(Handle, @dm);
 if sPrinterName = "" then Exit;
 DC := CreateDC(LPSTR("WINSPOOL"), LPSTR(sPrinterName), nil, @dm);
 SetBkMode(DC, TRANSPARENT);
 hPrevFont := SelectObject(DC, GetStockObject(ANSI_VAR_FONT));
 //
 di.cbSize := SizeOf(TDocInfo);
 di.lpszDocName := LPSTR("Печать документа");
 di.lpszOutput := nil;
 StartDoc(DC, di);

 StartPage(DC);
 // На этой странице рисуйте, что хотите...
 EndPage(DC);

 EndDoc(DC);
 SelectObject(DC, hPrevFont);
 DeleteDC(DC);
end;


> Никто ничего не подскажет?

Достаточно, надеюсь?


 
YuRock ©   (2004-03-10 14:15) [2]

Все это умеет делать ф-ция PrintDlg.

Вот пример (ф-ция возвращает имя принтера и устанавливает настройки):

function SelectPrinter(hWnd : THandle; DevMode : PDevMode) : String;
var
 pdlg : TPrintDlg;
 dm : PDevMode;

begin
 pdlg.lStructSize := SizeOf(TPrintDlg);
 pdlg.hwndOwner := hWnd;
 pdlg.hDevMode := 0;
 pdlg.hDevNames := 0;
 pdlg.hDC := 0;
 pdlg.Flags := PD_HIDEPRINTTOFILE or PD_NOPAGENUMS or PD_NOSELECTION;
 pdlg.hInstance := HInstance;
 pdlg.hPrintTemplate := 0;
 pdlg.hSetupTemplate := 0;
 pdlg.nCopies := 1;
 if PrintDlg(pdlg) then
  begin
    dm := GlobalLock(pdlg.hDevMode);
    Result := StrPas(dm.dmDeviceName);
    if Assigned(DevMode) then CopyMemory(DevMode, dm, SizeOf(TDevMode));
    GlobalUnlock(HGLOBAL(dm));
  end
 else
  Result := "";
end;


В параметр этой ф-ции в итоге (DevMode) в итоге запишутся нужные настройки. Если не хотите выбрасывать окно с выбором принтера - можете проициализировать DevMode вручную. DevMode затем передается как параметр в CreateDC. Пример:

procedure TGStatusGrid.Print;
var
 DC : HDC;
 di : TDocInfo;
 hPrevFont : THandle;
 sPrinterName : String;
 dm : TDevMode;
begin
 sPrinterName := SelectPrinter(Handle, @dm);
 if sPrinterName = "" then Exit;
 DC := CreateDC(LPSTR("WINSPOOL"), LPSTR(sPrinterName), nil, @dm);
 SetBkMode(DC, TRANSPARENT);
 hPrevFont := SelectObject(DC, GetStockObject(ANSI_VAR_FONT));
 //
 di.cbSize := SizeOf(TDocInfo);
 di.lpszDocName := LPSTR("Печать документа");
 di.lpszOutput := nil;
 StartDoc(DC, di);

 StartPage(DC);
 // На этой странице рисуйте, что хотите...
 EndPage(DC);

 EndDoc(DC);
 SelectObject(DC, hPrevFont);
 DeleteDC(DC);
end;


> Никто ничего не подскажет?

Достаточно, надеюсь?


 
Shutov ©   (2004-03-18 15:28) [3]

Спасибо.


 
Shutov ©   (2004-03-18 15:28) [3]

Спасибо.



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

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

Наверх




Память: 0.46 MB
Время: 0.037 c
9-1071252044
G A M E R
2003-12-12 21:00
2004.05.09
Новая версия


6-1079517885
Triakin
2004-03-17 13:04
2004.05.09
Какие инструменты лучше использовать для обмена инф. в сети


3-1081396835
Серж
2004-04-08 08:00
2004.05.09
Как округлить число в процедуре Interbase?


3-1081438217
Mishenka
2004-04-08 19:30
2004.05.09
Графические изображения в базе?


14-1082140416
тихий вовочка
2004-04-16 22:33
2004.05.09
Создание своего компонента





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский