RM报表 文本框 自动换行 相关代码

procedure TRMCustomMemoView.WrapMemo1(aAddChar: Boolean);
var
  lCurHeight, lOneLineHeight, lMaxWidth: Integer;
  lWCanvas: TCanvas;

  procedure _OutLine(const lStr: WideString);
  begin
    FSMemo.Add(lStr);
    Inc(lCurHeight, lOneLineHeight);
  end;

  procedure _WrapOutMemo;
  var
    h, oldh: HFont;
    i: Integer;
  begin
    h := RMCreateAPIFont(lWCanvas.Font, 0, FFontScaleWidth);
    oldh := SelectObject(lWCanvas.Handle, h);

    try
      lCurHeight := 0;
      lOneLineHeight := -lWCanvas.Font.Height + LineSpacing; //每一行高度;
      lMaxWidth := spWidth - spGapLeft * 2 - _CalcHFrameWidth(LeftFrame.spWidth, RightFrame.spWidth);
      if (DocMode = rmdmDesigning) and (FParentReport.FDesigner.Factor <> 100) then
        lMaxWidth := Round(lMaxWidth * 100 / FParentReport.FDesigner.Factor);

      if (DocMode = rmdmDesigning) and (FMemo1.Count = 1) and
        (RMWideCanvasTextWidth(lWCanvas, FMemo1[0]) > lMaxWidth) and
        (FMemo1[0] <> ‘‘) and (FMemo1[0][1] = ‘[‘) then
        _OutLine(FMemo1[0])
      else
      begin
        if not FNeedWrapped then //不需要换行
        begin
          for i := 0 to FMemo1.Count - 1 do
            _OutLine(FMemo1[i]);
        end
        else if WordWrap or AllowHtmlTag then //自动换行
        begin
          lCurHeight := lCurHeight + RMWrapStrings(FMemo1, FSMemo, lWCanvas, lMaxWidth, LineSpacing {lOneLineHeight},
            WordBreak, CharWrap, AllowHtmlTag, True, aAddChar);

          FSMemo.Add(#1);
        end
        else //不自动换行
        begin
          for i := 0 to FMemo1.Count - 1 do
          begin
            _OutLine(FMemo1[i]);
          end;

          FSMemo.Add(#1);
        end;
      end;
    finally
      FVHeight := lCurHeight - LineSpacing;
      LineHeight := lOneLineHeight;
      SelectObject(lWCanvas.Handle, oldh);
      DeleteObject(h);
    end;
  end;

  procedure _WrapOutMemo90;
  var
    h, oldh: HFont;
    i: Integer;
  begin
    h := RMCreateAPIFont(lWCanvas.Font, 90, FFontScaleWidth);
    oldh := SelectObject(lWCanvas.Handle, h);
    try
      lCurHeight := 0;
      lOneLineHeight := -lWCanvas.Font.Height + LineSpacing;
      lMaxWidth := spHeight - spGapTop * 2 - _CalcVFrameWidth(TopFrame.spWidth, BottomFrame.spWidth);
      if not FNeedWrapped then
      begin
        for i := 0 to FMemo1.Count - 1 do
          _Outline(FMemo1[i]);
      end
      else if WordWrap then
        lCurHeight := lCurHeight + RMWrapStrings(FMemo1, FSMemo, lWCanvas, lMaxWidth, LineSpacing {lOneLineHeight},
          WordBreak, CharWrap, AllowHtmlTag, True, aAddChar)
      else
      begin
        for i := 0 to FMemo1.Count - 1 do
          _Outline(FMemo1[i]);
      end;
    finally
      FVHeight := lCurHeight - LineSpacing;
      LineHeight := lOneLineHeight;
      SelectObject(lWCanvas.Handle, oldh);
      DeleteObject(h);
    end;
  end;

  procedure _WrapOutMemo180;
  var
    i: Integer;
  begin
    lCurHeight := 0;
    lOneLineHeight := -lWCanvas.Font.Height + LineSpacing; //每一行高度;
    lMaxWidth := spHeight - spGapTop * 2 - _CalcVFrameWidth(TopFrame.spWidth, BottomFrame.spWidth);

    if (DocMode = rmdmDesigning) and (FMemo1.Count = 1) and
      (RMWideCanvasTextWidth(lWCanvas, FMemo1[0]) > lMaxWidth) and
      (FMemo1[0] <> ‘‘) and (FMemo1[0][1] = ‘[‘) then
      _OutLine(FMemo1[0])
    else
    begin
      if not FNeedWrapped then //已经换行
      begin
        for i := 0 to FMemo1.Count - 1 do
          _OutLine(FMemo1[i]);
      end
      else if WordWrap then //自动换行
      begin
        lCurHeight := lCurHeight + RMWrapStrings(FMemo1, FSMemo, lWCanvas, lMaxWidth, LineSpacing {lOneLineHeight},
          WordBreak, CharWrap, AllowHtmlTag, False, aAddChar);
      end
      else //不自动换行
      begin
        for i := 0 to FMemo1.Count - 1 do
        begin
          _OutLine(FMemo1[i]);
        end;
      end;
    end;
    FVHeight := lCurHeight - LineSpacing;
    LineHeight := lOneLineHeight;
  end;

  procedure _ChangeFontSize;
  var
    i: Integer;
    lStr: string;
    lMaxWidth: Integer;
  begin
    lMaxWidth := spWidth - spGapLeft * 2 - _CalcHFrameWidth(LeftFrame.spWidth, RightFrame.spWidth);
    if lMaxWidth < 10 then Exit;

    for i := 0 to FMemo1.Count - 1 do
    begin
      lStr := FMemo1[i];
      while (RMWideCanvasTextWidth(lWCanvas, lStr) > lMaxWidth) and (lWCanvas.Font.Size > 0) do
        lWCanvas.Font.Size := lWCanvas.Font.Size - 1;
    end;

    Font.Size := lWCanvas.Font.Size;
  end;

begin
  if not AutoAddBlank then
    aAddChar := False;
  if RotationType <> rmrtNone then
    AllowHtmlTag := False;

  FParentReport.DrawCanvas.LockCanvas;
  try
    lWCanvas := FParentReport.DrawCanvas.Canvas;
    lWCanvas.Font.Assign(Font);
    lWCanvas.Font.Height := -Round(Font.Size * 96 / 72);
    SetTextCharacterExtra(lWCanvas.Handle, CharacterSpacing);
    case FScaleFontType of
      rmstByWidth:
        begin
          if DocMode <> rmdmDesigning then
            _ChangeFontSize;
        end;
      rmstByHeight:
        begin
        end;
    end;

    FSMemo.Clear;
    case RotationType of
      rmrt90, rmrt270: _WrapOutMemo90;
      rmrt180: _WrapOutMemo180;
    else
      _WrapOutMemo;
    end;

    SetTextCharacterExtra(lWCanvas.Handle, 0);
  finally
    FNeedWrapped := False;
    FParentReport.DrawCanvas.UnLockCanvas;
  end;
end;
时间: 2025-01-06 14:01:32

RM报表 文本框 自动换行 相关代码的相关文章

jQuery实现点击文本框清除内容代码实例

jQuery实现点击文本框清除内容代码实例:本章节介绍一下文本框最简单的一个人性化措施,就是点击文本框的时候能够删除里面的提示文本.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title&g

input文本框圆角效果代码实例

input文本框圆角效果代码实例:本章节分享一段代码实例,它实现了将input文本框设置为圆角的功能.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>蚂蚁部落</tit

css3美化文本框提示特效代码下载

原文:css3美化文本框提示特效代码下载 源代码下载:http://www.zuidaima.com/share/1550463334386688.htm 源代码截图:

[超牛]只能输入数字的文本框,兼容IE7IE8等

demo地址: 只能输入数字的文本框 核心js代码: /* * 只能输入正整数,不能有小数点 * */ onlyIntegerKeyUp = function (e) { if (e === undefined) { e = window.event; } var obj = e.srcElement ? e.srcElement : e.target; var pattern = /[^\d]/ig; var val = obj.value; if (pattern.test(val)) {

java学习:AWT组件和事件处理的笔记(1)--文本框

java.awt包中的TextField类是专门用来建立文本框的,即TextField类创建的一个对象便是一个文本框. 1.TextField类的主要方法    (1)TextField()        创建的文本框可编辑,用户可在文本框中输入若干个字符,可见字符序列长度为一个机器字符长    (2)TextField(int x)        创建的文本框可编辑,用户可在文本框中输入若干个字符,可见字符序列长度为x个机器字符长    (3)TextField(String s)      

Chrome表单文本框自动填充黄色背景色样式

开发后台管理系统或 网站时,使用谷歌的Chrome浏览器访问网页中表单,文本框背景色自动填充为黄色.这个问题在网络上其实早已经是老生常谈了,今天正巧我要处理这个问 题,把之前查阅的一些资料和自己解决这个问题的方法纪录在此,一是为大家遇到此问题时提供一份资料,二是作为自己的笔记.过多的话就不多说了,下面进入正 题. 一.首先介绍一下我遇到这个问题时文本框的样式情况:  上图为Chrome浏览器为表单中的文本框自动填充黄色背景色的样子, 我自己为文本框加的,获得焦点后,周围有蓝色阴影. <input

jQuery 文本框得失焦点应用

一.文本框得失焦点一种是改变文本框的样式    得到焦点:               失去焦点: 二.文本框得失焦点另一种是改变文本框的值    得到焦点:     失去焦点:       三.jQuery 得失焦点代码 1.改变文本框样式代码 1> CSS代码 .focus { border: 1px solid #f00; background: #fcc; } 2>jQuery代码 (:input匹配 所有 input, textarea, select 和 button 元素) &l

Android实现搜索框内自动完成文本框

Android实现搜索框内自动完成文本框 xml文件代码如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" 5 android:layout_width=

css设置input文本框样式代码实例

css设置input文本框样式代码实例:使用css设置input元素的样式是最为常用的操作之一,当然也是最为基础的操作,可能对于刚刚接触css的朋友还不够熟悉,下面就通过一段简单的代码历史演示一下如何设置文本框的样式,当然这个演示可能并不是特别的美观,这里的目的也只是起到一个演示作用,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="