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

Вниз

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

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

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


 
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;


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

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


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

Спасибо.



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

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

Наверх




Память: 0.47 MB
Время: 0.038 c
1-1082369020
Dmitriy O.
2004-04-19 14:03
2004.04.11
Qreport не хочет печатать в NT


9-1065430545
Ssv
2003-10-06 12:55
2004.04.11
прорисовка файла


1-1079721543
ser_ega
2004-03-19 21:39
2004.04.11
Округление числа!!!


8-1074332995
*BES*
2004-01-17 12:49
2004.04.11
Управление потоком!!!!


6-1079092329
ki11er
2004-03-12 14:52
2004.04.11
Аналог NMUDP в Delphi 7