想根据图片大小,决定横向还是纵向打印,现在的代码如下:
if Width<Height then  //纵向打印
    begin
    printer.GetPrinter(a,b,c,bb);
    ee:=GlobalLock(bb);
    ee^.dmOrientation:=DMORIENT_PORTRAIT;
    ee^.dmDefaultSource:=DMBIN_MANUAL;
    ee^.dmFields:=ee^.dmFields or DM_ORIENTATION or DM_PAPERWIDTH or DM_PAPERLENGTH;
    ee^.dmFields:=ee^.dmFields or DMBIN_MANUAL;
    GlobalUnLock(bb);
    Printer.BeginDoc;
        打印
    Printer.EndDoc;
    end
    else
    begin   //横向打印
       printer.GetPrinter(a,b,c,bb);
       ee:=GlobalLock(bb);
       ee^.dmOrientation:=DMORIENT_LANDSCAPE;
       ee^.dmDefaultSource:=DMBIN_MANUAL;
       ee^.dmFields:=ee^.dmFields or DM_ORIENTATION or DM_PAPERWIDTH or DM_PAPERLENGTH;
       ee^.dmFields:=ee^.dmFields or DMBIN_MANUAL;
       GlobalUnLock(bb);
       printer.PrinterIndex:=printer.PrinterIndex;
       Printer.BeginDoc;
          打印 
       Printer.EndDoc;
    end现在的效果是程序第一次打印是什么方向,后面的打印全是这个方向。但是根据图片的宽和高进入这个if分支正确。
大家帮帮忙,怎样解决?

解决方案 »

  1.   

    打印方向參考:Uses     Printer;       
      .........       
      procedure     TForm1.Button1Click(Sender:     TObject);       
      var       
            ADevice,     ADriver,     APort:     array[0..255]     of     Char;       
            DeviceHandle:     THandle;       
            DevMode:     PDeviceMode;       
      begin       
                    //初始化印表機       
                    Printer.GetPrinter(ADevice,     ADriver,     APort,     DeviceHandle);       
                    if     DeviceHandle     =     0     then       
                    begin       
                            Printer.PrinterIndex     :=     Printer.PrinterIndex;       
                            Printer.GetPrinter(ADevice,     ADriver,     APort,     DeviceHandle);       
                    end;       
                    if     DeviceHandle     =     0     then       
                            Raise     Exception.Create('不能初始化印表機!')       
                    else       
                            DevMode     :=     GlobalLock(DeviceHandle);       
                    if     DeviceHandle     <>     0     then       
                    begin       
                            with     DevMode^     do       
                            begin       
                                    dmFields     :=     dmFields     or     DM_ORIENTATION;       
                                    //在下面這裡設置列印方向       
                                    dmOrientation     :=     DMORIENT_LANDSCAPE;     //DMORIENT_PORTRAIT       
                                    dmPaperSize     :=     DMPAPER_A3;                   
                                    Printer.SetPrinter(ADevice,     ADriver,     APort,     DeviceHandle);       
                                    GlobalUnLock(DeviceHandle);       
                            end;       
                    end;       
          
                    PrinterSetupDialog1.Execute;     //驗證一下設置是否成功了       
      end;      
    .............打印紙張大小:procedure     SetPaperSize(X,     Y:     Integer);       
      //     單位是0.1mm       
      //     A4時     Printer.Pagewidth:=1440;         A5時     Printer.Pagewidth:=1049;       
      //     B5時     Printer.Pagewidth:=1290;         16K時     Printer.Pagewidth:=1035;       
      //     lq1600寬行印表機這個值寬度最大為42cm左右,     長度大約2m。       
      //改變devicemode結構       
      var       
            Device:     array[0..255]     of     char;       
            Driver:     array[0..255]     of     char;       
            Port:     array[0..255]     of     char;       
            hDMode:     THandle;       
            PDMode:     PDEVMODE;       
      begin       
            Printer.PrinterIndex     :=     Printer.PrinterIndex;       
            Printer.GetPrinter(Device,     Driver,     Port,     hDMode);       
            if     hDMode     <>     0     then       
            begin       
                    pDMode     :=     GlobalLock(hDMode);       
                    if     pDMode     <>     nil     then       
                    begin       
                            if     (x     =     0)     or     (y     =     0)     then       
                            begin       
                                    {Set     to     legal}       
                                    pDMode^.dmFields     :=     pDMode^.dmFields     or     dm_PaperSize;       
                                    {pDMode^.dmPaperSize     :=     DMPAPER_LEGAL;     changed     by     wulianmin}       
                                    pDMode^.dmPaperSize     :=     DMPAPER_FANFOLD_US;       
                            end       
                            else       
                            begin       
                                    {Set     to     custom     size}       
                                    pDMode^.dmFields     :=     pDMode^.dmFields     or       
                                            DM_PAPERSIZE     or       
                                            DM_PAPERWIDTH     or       
                                            DM_PAPERLENGTH;       
                                    pDMode^.dmPaperSize     :=     DMPAPER_USER;       
                                    pDMode^.dmPaperWidth     :=     x     {SomeValueInTenthsOfAMillimeter};       
                                    pDMode^.dmPaperLength     :=     y     {SomeValueInTenthsOfAMillimeter};       
                            end;       
                            {設定紙張來源}       
                            pDMode^.dmFields     :=     pDMode^.dmFields     or     DMBIN_MANUAL;       
                            pDMode^.dmDefaultSource     :=     DMBIN_MANUAL;       
          
                            GlobalUnlock(hDMode);       
                    end;       
            end;       
            Printer.PrinterIndex     :=     Printer.PrinterIndex;       
            //以下開始列印       
            Printer.BeginDoc;       
            Printer.Canvas.TextOut(100,100,     'Test     1');       
            Printer.EndDoc;       
      end;