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

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.037 c
14-1081845051
LaidBack
2004-04-13 12:30
2004.05.09
Немножко расслабился :)


3-1081238047
slavon
2004-04-06 11:54
2004.05.09
Десятичный разделитель в dbExpress под Kylix2


8-1076386138
scorpi
2004-02-10 07:08
2004.05.09
OpenGL


14-1082358614
Семен Сорокин
2004-04-19 11:10
2004.05.09
ненужная WINDOWS :)


1-1082607570
Beglec
2004-04-22 08:19
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский