转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
报表处理组件 BY DELPHI         ★★★★

报表处理组件 BY DELPHI

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2900 更新时间:2009/4/23 18:44:18
          Inc(J,TempExtent.CX);
            if J > MaxExtent then
            begin
              J := TempExtent.CX;
              Insert(#13#10,TempStr,I+X); {Soft return}
              Inc(X,2);
            end;
          end;
        end;
      end;
      Texts.Text := TempStr;
    end;
    tcSelfAdapt:
    begin
      Texts.Text := AText;
      if Direction = tdVertChinese then
      begin
        //J := 0;
        //X := Length(WideString(Texts[0]));
        //TempStr := WideString(Texts[0]);
        TempStr := '''''''';
        for I := 0 to Texts.Count - 1 do
        begin
          if Length(TempStr) < Length(WideString(Texts[I])) then
            TempStr := WideString(Texts[I]);
          //if X < Length(WideString(Texts[I])) then
          //begin
          //  X := Length(WideString(Texts[I]));
          //  J := I;
          //end;
        end;
        //TempStr := WideString(Texts[J]);
        if Length(TempStr) <> 0 then
        begin
          J := Floor(MaxExtent / Length(TempStr));
          for I := ACanvas.Font.Size-1 downto 5 do
          begin
            Windows.GetTextMetrics(ACanvas.Handle,TextMetric);
            if TextMetric.tmHeight < J then Break
            else ACanvas.Font.Size := I;
          end;
//          if -ACanvas.Font.Height > J then
//          SetLogicFont(0,0);
//          else
        end;
      end else begin
        J := 0;
        S := '''''''';
        for I := 0 to Texts.Count - 1 do
        begin
          Windows.GetTextExtentPoint32(ACanvas.Handle, PChar(Texts[I]), Length(Texts[I]), TempExtent);
          if J < TempExtent.CX then
          begin
            S := Texts[I];
            J := TempExtent.CX;
          end;
        end;

        {for I := ACanvas.Font.Size-1 downto 5 do
        begin
          Windows.GetTextExtentPoint32(ACanvas.Handle, PChar(S), Length(S), TempExtent);
          if TempExtent.CX < MaxExtent then Break
          else ACanvas.Font.Size := I;
        end;}
        Windows.GetTextExtentPoint32(ACanvas.Handle, PChar(S), Length(S), TempExtent);
        if TempExtent.CX > MaxExtent then
        for I := -ACanvas.Font.Height downto 1 do
        begin
          Windows.GetTextExtentPoint32(ACanvas.Handle, PChar(S), Length(S), TempExtent);
          if TempExtent.CX < MaxExtent then Break
          else SetLogicFont(I,0);
        end;

      end;
    end;
    tcCalcRect:
    begin
      Texts.Text := AText;
      case Direction  of
        tdVertChinese:
        begin
          TempStr := WideString(Texts[0]);
          for I := 1 to Texts.Count - 1 do
          begin
            if Length(TempStr) < Length(WideString(Texts[I])) then
              TempStr := WideString(Texts[I]);
          end;
          Windows.GetTextMetrics(ACanvas.Handle,TextMetric);
          ARect.Bottom :=  ARect.Top + Length(TempStr) * TextMetric.tmHeight;
        end;
        0:{Horizontal}
        begin
          J := 0;
          for I := 0 to Texts.Count - 1 do
          begin
            Windows.GetTextExtentPoint32(ACanvas.Handle, PChar(Texts[I]), Length(Texts[I]), TempExtent);
            if J < TempExtent.CX then J := TempExtent.CX;
          end;
          ARect.Right := ARect.Left + J;
        end;
        1..45,-45..-1:
        begin
          J := 0;
          for I := 0 to Texts.Count - 1 do
          begin
            Windows.GetTextExtentPoint32(ACanvas.Handle, PChar(Texts[I]), Length(Texts[I]), TempExtent);
            if J < TempExtent.CX then J := TempExtent.CX;
          end;
          ARect.Right := ARect.Left + Ceil(J*Scaler);
        end;
        46..90,-90..-46:
        begin
          J := 0;
          for I := 0 to Texts.Count - 1 do
          begin
            Windows.GetTextExtentPoint32(ACanvas.Handle, PChar(Texts[I]), Length(Texts[I]), TempExtent);
            if J < TempExtent.CX then J := TempExtent.CX;
          end;
          ARect.Bottom := ARect.Top + Ceil(J*Scaler);
        end;
      end;
    end;
    else Texts.Text := AText;
  end;

  {Initialize the origin point}
  case Direction of
    tdVertChinese:
    begin
      Windows.GetTextMetrics(ACanvas.Handle,TextMetric);
      Interval := TextMetric.tmMaxCharWidth + Windows.GetTextCharacterExtra(ACanvas.Handle);
      J := Interval * Texts.Count;

      if taLeft in Aligns then
        X := ARect.Left + J - Interval
      else if taHorzCenter in Aligns then
        X := (ARect.Right + ARect.Left + J) shr 1 - Interval
      else {if taRight in Aligns}
        X := ARect.Right - Interval;

      Y := ARect.Top + 2;
    end;
    0:{Horizontal}
    begin
      Windows.GetTextMetrics(ACanvas.Handle,TextMetric);
      Interval := TextMetric.tmHeight;// + TextMetric.tmExternalLeading;

      J := Interval * Texts.Count;

      X := ARect.Left + 2;

      if taBottom in Aligns then
        Y := ARect.Bottom - J
      else if taVertCenter in Aligns then
        Y := (ARect.Bottom + ARect.Top - J) shr 1
      else {if taTop in Aligns then}
        Y := ARect.Top + 2;

    end;
    1..45:
    begin
      Windows.GetTextMetrics(ACanvas.Handle,TextMetric);
      Interval := Ceil((TextMetric.tmHeight {+ TextMetric.tmExternalLeading})/Scaler);
      J := Interval * Texts.Count;

      X := ARect.Left + 2;

      if taBottom in Aligns then
        Y := ARect.Bottom - J
      else if taVertCenter in Aligns then
        Y := (ARect.Bottom + ARect.Top - J) shr 1
      else {if taTop in Aligns then}
        Y := ARect.Top + 2;

    end;
    46..90:
    begin
      Windows.GetTextMetrics(ACanvas.Handle,TextMetric);
      Interval := Ceil((TextMetric.tmHeight {+ TextMetric.tmExternalLeading})/Scaler);
      J := Interval * Texts.Count;

      if taRight in Aligns then
        X := ARect.Right - J
      else if taHorzCenter in Aligns then
        X := (ARect.Right + ARect.Left - J) shr 1
      else {if taLeft in Aligns}
        X := ARect.Left +

上一页  [1] [2] [3] [4]  下一页


[系统软件]交叉编译sshd for IXP425 ARM  Platform by MVL 3…  [Delphi程序]Delphi Winsock Hooking Example by Aphex
[Delphi程序]Delphi for .Net 编译器预览 - by John Kaster  [Delphi程序]如何给ActiveX数字签名(Step by Step, Delphi)
[Delphi程序]Simple Programming Tip #1 by Charlie Calvert  [Delphi程序]Delphi NT Service Skeleton by Aphex
[Web开发]Step By Step 制作XML的Javascript树形目录  [Web开发]ASP.NET组件编程step by step
[Web开发]ASP.NET组件设计Step by Step(8)  [Web开发]ASP.NET组件设计Step by Step(6)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台