我有一个“项目登记”的form ,上面有 项目编号,项目名称,项目负责人等等各种控件,我现在在这个Form上添加一个按牛!用来打印这个form,我开始的时候用 print 来打印,发现 打印出来的东西 不符合要求,就是说不够精确,问一下,做过这方面开发的高手 ,如何控制 。这个Form在 打印机上的 的位置和大小?

解决方案 »

  1.   

    //在 (Xmm, Ymm)处按指定配置文件信息和字体输出字符串
    procedure PrintText(X, Y: Extended; Txt: string; ConfigFileName: string; FontSize: Integer=12);
    var
    OrX, OrY: Extended;
    Px, Py: Integer;
    AP: TPoint;
    Fn: TStrings;
    FileName: string;
    OffSetX, OffSetY: Integer;
    begin
    //打开配置文件,读出横向和纵向偏移量
    try
    Fn := TStringList.Create;
    FileName := ExtractFilePath(Application.ExeName) + ConfigFileName;
    if FileExists(FileName) then
    begin
    Fn.LoadFromFile(FileName);
    //横向偏移量
    OffSetX := StrToInt(Fn.Values['X']);
    //纵向偏移量
    OffSetY := StrToInt(Fn.Values['Y']);
    end
    else
    begin
    //如果没有配置文件,则生成
    Fn.Values['X'] := '0';
    Fn.Values['Y'] := '0';
    Fn.SaveToFile(FileName);
    end;
    finally
    Fn.Free;
    end;
    X := X + OffSetX;
    Y := Y + OffSetY;
    Px := Round(Round(X * HPointsPerInch * 10000/25.4) / 10000);
    Py := Round(Round(Y * VPointsPerInch * 10000/25.4) / 10000);
    Py := Py - GetOffSetY; //因为是绝对坐标, 因此, 不用换算成相对于Y轴坐标
    Px := Px + 2 * AvgCharWidth;
    Printer.Canvas.Font.Name := '宋体';
    Printer.Canvas.Font.Size := FontSize;
    //Printer.Canvas.Font.Color := clGreen;
    Printer.Canvas.TextOut(Px, Py, Txt);
    end;
      

  2.   

    怎么连窗口也要打印啊?针打上打印form肯定会不清楚了.只要打印form上有用的数据的话,简单点用QuickReport就行了.
      

  3.   

    用QuickReport 怎么打印? 我还是要打印出 form上的所有东西/
      

  4.   

    我认为你要打印form上面的东西有一种方法适用的
    就是抓图技术,抓整个form然后打印就可以了
    如果抓图部分有困难我可以帮帮你