我想在表頭顯示以下效果廠商:******
地址:******   電話:******   傳真:******  PO#:*****用以下代碼,當字體設置為16號字體時,只顯示一列,下一列就看不到,其原因是表頭的列高設置太小,可我要不知道用什麼函數來設置表頭列高,再就是我這是套打印,廠商上面要空出很多,這也沒有辦法設置,代碼如下,請幫忙修改:procedure TMainForm.PrintHeader;
var
  SaveFont: TFont;
  LineHeight: Integer;
  Tenthdofinchpixellsy:integer;
begin
  SaveFont := TFont.Create;
  try
    Savefont.Assign(Printer.Canvas.Font);
    Printer.Canvas.Font.Assign(edtHeaderFont.Font);
    with Printer do
    begin
      if not Printer.Aborted then
        Canvas.TextOut((PageWidth div 2)-(Canvas.TextWidth(edtHeaderFont.Text)
                        div 2),0, edtHeaderFont.Text);        Canvas.TextOut(200,0, '地點:‘+'editadd');
        Canvas.TextOut(200, 60, '廠商:‘+'editcustomer');
        Canvas.TextOut(1000, 60, '電話:‘+'edittex');
        Canvas.TextOut(1900, 60, '傳真:‘+'editfax');
      AmountPrinted := AmountPrinted + LineHeight+TenthsOfInchPixelsY;
    end;
    Printer.Canvas.Font.Assign(SaveFont);
  finally
    SaveFont.Free;
  end;
end;

解决方案 »

  1.   

    用这个打打看:
      Printer.BeginDoc;
      Printer.Canvas.Font.Name:='宋体';
      Printer.Canvas.Font.Size:=16;
      Printer.Canvas.TextOut(0,200,'廠商');
      Printer.Canvas.TextOut(0,220,'地址');
      Printer.Canvas.TextOut(200,220,'電話');
      Printer.Canvas.TextOut(400,220,'傳真');
      Printer.Canvas.TextOut(600,220,'PO#');
      Printer.EndDoc;
      

  2.   

    ksaiy(消失在人海) ( ) :這樣還是不能設置表頭的高度,我想在表頭上空出幾行,以便套入已排版好的表格。
      

  3.   


    晕。那你设置Canvas的X,Y值就可以了。也就是从哪个位置开始打起。
      

  4.   

    ksaiy(消失在人海) ( );Canvas的X,Y值怎樣設置,你能給我一個例子或是別的網站嗎,謝謝!
      

  5.   

    这。这。。这你变换一下Canvas的值打印一下看看就知道了。
      

  6.   

    我用Canvas.MoveTo(0,1000);它還是一樣的。
      

  7.   

    变换Canvas的值是沒用的。我試過了,因為Canvas的表頭列高已預設好了,用Printer.Canvas.TextOut(200,0,'廠商');或Printer.Canvas.TextOut(200,60,'廠商')還能看到"廠商",當用Printer.Canvas.TextOut(200,100,'廠商')時,它什麼都不顯示,原因大楖是100超過了它的預設值,導致無法顯示。
      

  8.   

    你所說的變換Canvas的值難道不是Printer.Canvas.TextOut(200,0,'廠商');值嗎?它好象有限定列高一樣(當然我這只是懷疑),我現在是想在Printer.Canvas畫布最上面空出幾行,以便能套上已印刷好的紙張。
      

  9.   

    ksaiy(消失在人海):用你的方法能控制表頭但無法列印數據庫的格式,列印出來時,內容反在表頭的上面,我的代碼是這樣,請幫忙查看糾正,謝謝!!
    procedure TMainForm.PrintClick(Sender: TObject);
    var
      Items: TStringList;
    begin
      Items := TStringList.Create;
      try
        PixelsInInchx := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
        TenthsOfInchPixelsY := GetDeviceCaps(Printer.Handle,
                                LOGPIXELSY) div 10;
        AmountPrinted := 0;
        MainForm.Enabled := false; // Disable the parent form
        try
          Printer.BeginDoc;
          AbortForm.Show;
          Application.ProcessMessages;      LineHeight := Printer.Canvas.TextHeight('X')+TenthsOfInchPixelsY;
          if edtHeaderFont.Text <> '' then
             Printer.Canvas.Font.Name:='宋体';
             Printer.Canvas.Font.Size:=12;
             Printer.Canvas.TextOut(100,400,edAdd.text);
             Printer.Canvas.TextOut(100,460,edTel.text);
             Printer.Canvas.TextOut(200,520,edFax.text);
             Printer.Canvas.TextOut(800,520,edName.text);
             Printer.Canvas.TextOut(1600,520,edPo.text);
          PrintColumnNames;
          ADOTable1.First;
          while (not ADOTable1.Eof) or Printer.Aborted do
          begin
            Application.ProcessMessages;
            with Items do
            begin
              AddObject(ADOTable1.FieldByName('fallorder_code').AsString,
                            pointer(10));
              AddObject(ADOTable1.FieldByName('fallorder_name').AsString,
                            pointer(10));
              AddObject(ADOTable1.FieldByName('fallorder_dec').AsString,
                            pointer(10));
              AddObject(ADOTable1.FieldByName('fallorder_num').AsString,
                            pointer(10));
              AddObject(ADOTable1.FieldByName('fallorder_customer').AsString,
                            pointer(10));
              AddObject(ADOTable1.FieldByName('fallorder_memo').AsString,
                            pointer(10));
            end;
            PrintLine(Items);
            if AmountPrinted + LineHeight > Printer.PageHeight then
            begin
              AmountPrinted := 0;
              if not Printer.Aborted then
                Printer.NewPage;
              PrintHeader;
              PrintColumnNames;
            end;
            Items.Clear;
            ADOTable1.Next;
          end;
          AbortForm.Hide;
          if not Printer.Aborted then
            Printer.EndDoc;
        finally
          MainForm.Enabled := true;
        end;
      finally
        Items.Free;
      end;
    end;