Главная страница
    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.031 c
14-1082105036
Style
2004-04-16 12:43
2004.05.09
Верите ли вы в НЛО, и в то что нас часто посещают инопланетяне?


1-1082712749
tria
2004-04-23 13:32
2004.05.09
Как переименовать секцию в ini-файле?


3-1081847949
Rych
2004-04-13 13:19
2004.05.09
Как проверить присутствует-ли занчение в TDataSet ?


1-1082632445
denisww
2004-04-22 15:14
2004.05.09
как узнать размеры реально заполненого текста на Листе excel


14-1082573409
jack128
2004-04-21 22:50
2004.05.09
Глюк - не глюк, но что то не то в TComponent





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