我在輸入MEMO中的內容時按CRTL+ENTER讓其內容分成幾行,現要列印時卻列印在同一行中,我想讓列印出來的內容與我輸入時的一樣分成幾行,也就碰到一個ENTER就分一行,請教高手。謝謝!

解决方案 »

  1.   

    csdn論壇這段時間的高手都到那去了?
      

  2.   

    可以自己加入#13来控制。此问题好像一直没有好的方法解决。
    另外给你一个自己写的换行的东西,不是很稳定。
    str是要打印的内容,width是行宽。
    function newline(str: string; width: integer): string;
    var
      buf, resultBuf, estr: wideString;
      str1, str2, cstr: string;
      cnum, enum, i, j, mnum: integer;
    label  resultlab;
    begin
      //转成宽字符后可以不用判断汉字
      buf := str;
      resultBuf := ''; //初始化结果
      while Length(buf) > width do
      begin
        estr := copy(buf, 1, width);
        Delete(buf, 1, width);
        ///////////////////////////如有数字,则从后面截取字////////////////////////////////////
        mnum:=0;
        cstr := estr;
        cnum := length(cstr) - length(estr);
        enum := 2 * length(estr) - length(cstr);
        if trunc(cnum + enum / 2) <= width then
        begin
          if enum mod 2 = 1 then
          begin
          /////////////////////空格不能插入数字中///////////////////////////////////
            str1:='';
            str1 := Copy(estr, Length(estr)-mnum, 1);
            while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.')) do
            begin
              mnum:=mnum+1;
              str1 := Copy(estr, Length(estr)-mnum, 1);
            end;
            enum := enum + 1;
            insert(' ',estr,length(estr)-mnum)
            //estr := estr + ' ';
          end;
          if trunc(cnum + enum / 2) < width then
          begin
            estr := estr + copy(buf, 1, (width - trunc(cnum + enum / 2)));
            Delete(buf, 1, (width - trunc(cnum + enum / 2)));
          end;
        end;
         /////////////////////处理数字///////////////////////
        str1 := '';
        str2 := '';
        mnum := 0;
        str1 := Copy(estr, Length(estr), 1);
        str2 := copy(buf, 1, 1);
        while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.'))
          and (((str2 >= '0') and (str2 <= '9')) or (str2 = '.')) do
        begin
          mnum := mnum + 1;
          estr := estr + str2;
          delete(buf, 1, 1);
          str1:='';
          str2 := '';
          str1 := Copy(estr, Length(estr), 1);
          str2 := copy(buf, 1, 1);
        end;
        cstr := estr;
        cnum := length(cstr) - length(estr);
        enum := 2 * length(estr) - length(cstr);
        if mnum > (width - cnum - trunc(enum / 2)) then
        begin
          str1 := '';
          str1 := Copy(estr, Length(estr), 1);
          while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.')) do
          begin
            buf :=copy(estr, Length(estr), 1)+ buf;
            estr := copy(estr, 1, Length(estr) - 1);
            str1 := '';
            str1 := Copy(estr, Length(estr), 1);
          end;
          goto resultlab;
        end
        else
        begin
          estr := estr + copy(buf, 1, mnum);
          delete(buf, 1, mnum);
        end;
        {/////处理标点符号////////////////////////////////////// }
        str1 := '';
        str1 := copy(buf, 1, 1);
        if (str1 = ',') or (str1 = ',') or (str1 = '。') or (str1 = '.') or (str1 = '?') or (str1 = '?')
          or (str1 = '!') or (str1 = '!') or (str1 = ';') or (str1 = ';') or (str1 = '、') or (str1 = '》')
          or (str1 = '”') or (str1 = '"') or (str1 = ')') or (str1 = ')') then
        begin
          estr := Copy(estr, 1, Length(estr)) + str1;
          delete(buf, 1, 1);
        end;
       { /////////////////////加空格////////////////////////////////////////// }
        resultlab: cstr := estr;
        cnum := length(cstr) - length(estr);    //汉字个数
        enum := 2 * length(estr) - length(cstr); //数字个数
        if trunc(cnum + enum / 2) < width then
        begin
          j := 6;
          for i := 1 to (width - trunc(cnum + enum / 2)) do
          begin
          //////////////////空格不能插入数字中////////////////////////
            str1 := '';
            str1 := copy(estr, j - 1, 1);
            while (j = 1) or ((str1 >= '0') and (str1 <= '9')) or (str2 = '.') do //判断是否数字
            begin
              j := j + 2;
              str1 := '';
              str1 := copy(estr, j - 1,1);
            end;
            insert(' ', estr, j);
            j := j + 2;
          end;
        end;
        resultBuf := resultBuf + estr + #13#10;
      end;
      resultBuf := resultBuf + buf;
      Result := resultBuf;
    end;