Форум: "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.045 c