win2000
报表有A4,A3,自定义大小等多种纸张的格式 
偶想在打印前 给系统默认打印机的纸张类型更改成偶想要的
不知道如何做 
自定义的纸张偶已经加倒打印服务器里了

解决方案 »

  1.   

    var
      Device : array[0..cchDeviceName-1] of Char;
      Driver : array[0..(MAX_PATH-1)] of Char;
      Port : array[0..32]of Char;
      hDMode : THandle;
      pDMode : PDevMode;
    ...
    //-------------------------------------自定义纸张-----------------------------------
      Printer.GetPrinter(Device,Driver,Port,hDMode); // 获取打印机DevMode结构的句柄值,存放在hDMode中
       if hDMode <> 0 then begin
         pDMode := GlobalLock(hDMode);     // 获取指向打印机DevMode结构的//指针   if pDMode <> nil then begin
          pDMode^.dmPaperSize := 256; // 如果要将当前打印机纸张变为自定义‘dmPaperSize’必须设置成256
          pDMode^.dmPaperLength := zg;     // 自定义长     A4
          pDMode^.dmPaperWidth := zk;     // 自定义宽度
          pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
          pDMode^.dmFields := pDMode^.dmFields or DM_PAPERLENGTH;
          pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH;    //以上三条语句是对相应的dmFields成员进行置位。
          ResetDC(Printer.Handle,pDMode^);   // 设置打印机设备环境句柄的值
          GlobalUnlock(hDMode);
         end;
       end;
    //------------------------------------打印初始化-----------------------------------------------------
         PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);
         PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);    //根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例 
         PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5);
      

  2.   


        printer.canvas.font.name:='黑体';
        printer.canvas.font.size:=16;
        s:='aaaa';
         PrintStep:=printer.canvas.TextHeight(s)+16;