前面我有个贴子说下面滚动条滚动时候,字体会变大。 根本就不清楚borland怎么管理资源的。
如果说在scrollbox里面paintbox输出的字体有问题,那么放在form里面就不会出现这种问题。
前面有网友说:“
应该是汉字的关系,把字体设为宋体就不会变大了. 
PaintBox1.Canvas.Font.Name := '宋体'; ”是个解决办法,但是是什么原因,却没有人能答复。
把paintbox放到form里面就不需要,设置中文字体也会正常,有人知道什么原因么unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    PaintBox1: TPaintBox;
    procedure FormCreate(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  ScrollBox1.VertScrollBar.Range := 1000;
  ScrollBox1.Height := 241;
end;procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  I : Integer;
begin
  for i := 0 to 99 do
  begin
    PaintBox1.Canvas.Font.Size := 12;
    PaintBox1.Canvas.TextOut(10, i * 18, '´óС');
  end;
end;end.

解决方案 »

  1.   

     更正
    PaintBox1.Canvas.TextOut(10, i * 18, '这里面应该是汉字'); 
      

  2.   

    从测试的结果来看问题应该是出在ScrollBox,我分别用了三个版本的Delphi进行了测试,D6,D7显示有问题,D2007没有问题可以正常显示,所以你之前的帖子好几个高手说没问题,估计他们用的是高版本的Delphi。后面我去看D6,D7,D2007 TScrollBox的源代码,发现在D2007 TScrollBox protected当中加了一个过程procedure PaintWindow(DC: HDC); override;我想差别就在这里,之前Delphi版本的ScrollBox并没有处理消息WM_PAINT,所以导致字体没有改变过来。楼主你可以自己看看VCL,PaintWindow实现的代码如下:procedure TWinControl.PaintWindow(DC: HDC);
    var
      Message: TMessage;
    begin
      Message.Msg := WM_PAINT;
      Message.WParam := DC;
      Message.LParam := 0;
      Message.Result := 0;
      DefaultHandler(Message);
    end;
      

  3.   

    首先谢谢,非常感谢你,我加你为好友吧。
    我用D6,D7测试都用这样问题,至于D2005, 2006,我没测试,因为启动太慢我没有安装,SCROLLBOX的VCL代码我看了,并且我跟踪了字体,paint等代码都没看出哪出问题了,还有字体资源分配,没发现问题,你说的对高版本的SCROLLBOX增加了procedure PaintWindow(DC: HDC); override; 应该问题就出现在这里,好的我看看2006的吧,我手里没有2007.谢谢,结贴
      

  4.   


    { TScrollBox }  TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow,
        bsSizeToolWin);
      TBorderStyle = bsNone..bsSingle;  TScrollBox = class(TScrollingWinControl)
      private
        FBorderStyle: TBorderStyle;
        procedure SetBorderStyle(Value: TBorderStyle);
        procedure WMNCHitTest(var Message: TMessage); message WM_NCHITTEST;
        procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
      protected
        procedure CreateParams(var Params: TCreateParams); override;
        procedure PaintWindow(DC: HDC); override;
      public
        constructor Create(AOwner: TComponent); override;
      published
        property Align;
        property Anchors;
        property AutoScroll default True;
        property AutoSize;
        property BevelEdges;
        property BevelInner;
        property BevelOuter;
        property BevelKind;
        property BevelWidth;
        property BiDiMode;
        property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsSingle;
        property Constraints;
        property DockSite;
        property DragCursor;
        property DragKind;
        property DragMode;
        property Enabled;
        property Color nodefault;
        property Ctl3D;
        property Font;
        property Padding;
        property ParentBiDiMode;
        property ParentBackground default False;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PopupMenu;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Visible;
        property OnCanResize;
        property OnClick;
        property OnConstrainedResize;
        property OnContextPopup;
        property OnDblClick;
        property OnDockDrop;
        property OnDockOver;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDock;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnGetSiteInfo;
        property OnMouseActivate;
        property OnMouseDown;
        property OnMouseEnter;
        property OnMouseLeave;
        property OnMouseMove;
        property OnMouseUp;
        property OnMouseWheel;
        property OnMouseWheelDown;
        property OnMouseWheelUp;
        property OnResize;
        property OnStartDock;
        property OnStartDrag;
        property OnUnDock;
      end;