Главная страница
    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.036 c
7-1080541322
Ciberrus
2004-03-29 10:22
2004.05.09
Реестр


1-1082763405
/\_A_M_E_P
2004-04-24 03:36
2004.05.09
Как програмно сделать главное окно програмы невидимым?


1-1082525196
[BAD]Angel
2004-04-21 09:26
2004.05.09
как узнать количество файлов в папке?


7-1079680526
Артур
2004-03-19 10:15
2004.05.09
Аутентификация в Windows.


1-1082354460
Viktor
2004-04-19 10:01
2004.05.09
html





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