線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2100
推到 Plurk!
推到 Facebook!

以Printer.Canvas.TextOut的方式列印,紙張大小如何設

尚未結案
Jack0323
初階會員


發表:22
回覆:70
積分:28
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-30 15:31:19 IP:211.74.xxx.xxx 未訂閱
有請各位高手幫幫忙:真的是很急 ^_^" 我用這段程式列印一段文字檔 印表機驅動程式的紙張大小也都設成B4了 但是印出來都是A4大小的格式 是否我在那個地方没有設定好範圍 還請各位高手幫幫忙 印表機 EPSON LQ 2180C WIN2000的預設Driver try AssignFile(aFile,pmFullFile); ReSet(aFile); Printer.Orientation := poLandscape ; Printer.BeginDoc; Printer.Canvas.Font.Size := 12; Printer.Canvas.Font.Name := '細明體'; while not EOF(aFile) do begin Readln(aFile,aStr); Printer.Canvas.TextOut(3*16,1,aStr); end; finally Printer.EndDoc; CloseFile(aFile); end; end;
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-30 15:42:19 IP:202.39.xxx.xxx 未訂閱
How to set the printer paper size: http://www.lmc-mediaagentur.de/dpool/tips/0170.htm
var
  Device, Driver, Port: array[0..80] of Char;
  DevMode: THandle;
  pDevmode: PDeviceMode;
begin
  {Get printer device name etc.}
  Printer.GetPrinter(Device, Driver, Port, DevMode);
  {force reload of DEVMODE}
  Printer.SetPrinter(Device, Driver, Port, 0) ;
  {get DEVMODE handle}
  Printer.GetPrinter(Device, Driver, Port, DevMode);
  if Devmode <> 0 then
  begin
    {lock it to get pointer to DEVMODE record}
    pDevMode := GlobalLock( Devmode );
    if pDevmode <> Nil then 
    try
      with pDevmode^ do
      begin
        {modify paper size}
        dmPapersize := DMPAPER_B5;
        {tell printer driver that dmPapersize field contains data it needs to inspect}
        dmFields := dmFields or DM_PAPERSIZE;
      end;
    finally
      {unlock DEVMODE handle}
      GlobalUnlock( Devmode );
    end;
  end;
end;    
uses winspool;    procedure GetBinnames( sl: TStrings );
Type
  TBinName = Array [0..23] of Char;
  TBinNameArray = Array [1..High(Integer) div Sizeof( TBinName )] of TBinName;
  PBinnameArray = ^TBinNameArray;
  TBinArray = Array [1..High(Integer) div Sizeof(Word)] of Word;
  PBinArray = ^TBinArray;
var
  Device, Driver, Port: Array [0..255] of Char;
  hDevMode: THandle;
  i, numBinNames, numBins, temp: Integer;
  pBinNames: PBinnameArray;
  pBins: PBinArray;
begin
  Printer.PrinterIndex := - 1;
  Printer.GetPrinter(Device, Driver, Port, hDevmode);
  numBinNames := WinSpool.DeviceCapabilities( Device, Port, DC_BINNAMES, Nil, Nil );
  numBins := WinSpool.DeviceCapabilities( Device, Port, DC_BINS, Nil, Nil );
  if numBins <> numBinNames then
  begin
    raise Exception.Create('DeviceCapabilities reports different number of bins and '  'bin names!');
  end;
  if numBinNames > 0 then
  begin
    pBins := Nil;
    GetMem( pBinNames, numBinNames * Sizeof( TBinname ));
    GetMem( pBins, numBins * Sizeof(Word));
    try
      WinSpool.DeviceCapabilities( Device, Port, DC_BINNAMES, Pchar( pBinNames ), Nil);
      WinSpool.DeviceCapabilities( Device, Port, DC_BINS, Pchar( pBins ), Nil );
      sl.clear;
      for i:= 1 to numBinNames do
      begin
        temp := pBins^[i];
        sl.addObject( pBinNames^[i], TObject( temp ));
      end;
    finally
      FreeMem( pBinNames );
      if pBins <> Nil then 
        FreeMem( pBins );
    end;
  end;
end;
var
  aDrvName, aPrtName, aPortName: Array[0..127] of Char;
  aDeviceMode: THandle;
  PDevMode: ^TDevMode;
  i: Integer;
begin
  with Printer do
  begin
    GetPrinter(aDrvName, aPrtName, aPortName, aDeviceMode);
    PDevMode := GlobalLock(aDeviceMode);
    try
      if PDevMode^.dmPaperSize = DMPAPER_A4 then
        ShowMessage('A4')
      else
      if PDevMode^.dmPaperSize = DMPAPER_A3 then
        ShowMessage('A3')
      else
      begin
        ShowMessage('Size not supported!'   #13   'Resetting papersize to A4');
        PDevMode^.dmPaperSize := DMPAPER_A4;
      end;
    finally
      GlobalUnlock(aDeviceMode);
    end;
  end;
end;    
--- Everything I say is a lie. --<-<-<@
系統時間:2024-05-17 0:28:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!