unit DPrtTestMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls; type TDlgPrtTestMain = class(TForm) pnTop: TPanel; mmText: TMemo; btnDoPrint: TSpeedButton; cbPrinter: TComboBox; Label1: TLabel; Label2: TLabel; cbPaper: TComboBox; PrintDialog: TPrintDialog; PrinterSetupDialog1: TPrinterSetupDialog; procedure btnDoPrintClick(Sender: TObject); private { Private declarations } public { Public declarations } Constructor Create(aOwner: TComponent); override; procedure RefreshPrinter; end; var DlgPrtTestMain: TDlgPrtTestMain; implementation uses Vcl.Printers; {$R *.dfm} function GetDefPrinterName: String; var arrStr: array [0 .. 255] of Char; begin GetProfileStringW('Windows', 'device', '', arrStr, 255); Result := StrPas(arrStr); end; procedure TDlgPrtTestMain.btnDoPrintClick(Sender: TObject); var hDev: THandle; DevMode: PDeviceMode; arrDevice, arrDriver, arrPort: array[0..255] of Char; i: Integer; begin if MessageBox(Handle, PChar('Ãâ·Â ÇϽðڽÀ´Ï±î?'), PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO then exit; if cbPrinter.ItemIndex = -1 then exit; Printer.PrinterIndex := cbPrinter.ItemIndex; Printer.Title := 'PrinterTest'; hDev := 0; Printer.GetPrinter(arrDevice, arrDriver, arrPort, hDev); if hDev = 0 then exit; // Printer.Copies := 1; // DevMode.dmCopies DevMode := GlobalLock(hDev); try DevMode.dmPaperSize := DMPAPER_A4; DevMode.dmColor := DMCOLOR_MONOCHROME; DevMode.dmCopies := 1; // DevMode. Printer.SetPrinter(arrDevice, arrDriver, arrPort, hDev); finally GlobalUnlock(hDev); end; // ¿ëÁö °¡·Î, ¼¼·Î µ¹¸±·Á¸é Printer.BeginDoc Àü¿¡ ÇØ¾ßÇÑ´Ù.. // ÀϺΠÇÁ·Î±×·¥¿¡¼­ ¿À·ù³² 23_0623 08:45:27 kku try // if png.Width > png.Height then // Printer.Orientation := poLandscape // else // Printer.Orientation := poPortrait; except // on E: Exception do // ETgException.TraceException(Self, E, 'Fail .. Set Printer.Orientation'); end; Printer.BeginDoc; try if not Printer.Printing or Printer.Aborted then exit; // Printer.NewPage; Printer.Canvas.Font.Assign(mmText.Font); for i := 0 to mmText.Lines.Count - 1 do begin if not Printer.Printing or Printer.Aborted then exit; Printer.Canvas.TextOut(500, 500 + (i * 200), mmText.Lines[i]); end; finally if Printer.Printing then Printer.EndDoc; end; MessageBox(Handle, PChar('Ãâ·ÂÀÌ ¿Ï·á µÇ¾ú½À´Ï´Ù.'), PChar(Caption), MB_ICONINFORMATION or MB_OK); end; Constructor TDlgPrtTestMain.Create(aOwner: TComponent); begin Inherited Create(aOwner); RefreshPrinter; end; procedure TDlgPrtTestMain.RefreshPrinter; var i: Integer; sDefPrt: String; begin cbPrinter.Clear; sDefPrt := GetDefPrinterName; i := Pos(',', sDefPrt); if i > 0 then Delete(sDefPrt, i, Length(sDefPrt) - i + 1); for i := 0 to Printer.Printers.Count - 1 do begin cbPrinter.Items.Add(Printer.Printers[i]); if sDefPrt = Printer.Printers[i] then cbPrinter.ItemIndex := i; end; // Printer. end; end.