吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 441|回复: 6
收起左侧

[其他原创] Delphi中RichViewEdit控件中将富文本转换为纯文本的实现

[复制链接]
冥界3大法王 发表于 2024-12-28 23:40
本帖最后由 冥界3大法王 于 2024-12-28 23:46 编辑

原控件地址:https://www.trichview.com/download/
本以为这个功能实现起来很容易,没想到绕了很多的弯路才实现。
如果用的是原生Delphi自带的 RichEdit那么下面的代码就能满足你

[Delphi] 纯文本查看 复制代码
var
  XYZ: TMemoryStream;
  RichEdit: TMemo;
begin
  RichEdit := TMemo.Create(Self);
  RichEdit.Parent := Self;
  RichEdit.Visible := False;
  RichEdit.PasteFromClipboard;
  XYZ := TMemoryStream.Create;
  try
    RichEdit.Lines.SaveToStream(XYZ);
    XYZ.Position := 0;
    RichEdit.Lines.LoadFromStream(XYZ);
    Clipboard.AsText := RichEdit.Text;
     RichEdit1.PasteFromClipboard;
  finally
    XYZ.Free;
  end;
end;


image.png

如图所示,  5-5.控件得到信息类 这个文字 后面我们输入 888就会带有前面的富文本
这在上面呢,并不影响
如果你用的确实是RichEdit
image.png

RichEdit.PlainText:=False;

有个这个属性,如用Memo就可以少一句这个了。




如果你用的是 上面链接中的这个RichViewEdit控件
就你会发现 用同样的代码(也有上面这个问题)似乎咋改都不好使,那我们剪贴板中富文本转换成纯文本的功能就跟没写一样了。
image.png

帮助中是这样告诉你的
你要是真这么用的话,那你原来Ctrl+V也就只能粘来纯文本了。。
这当然是我们不希望的。
(我们希望既能粘纯文本,又能粘富文本)





后来又经过了很多次不懈的折腾。。。
//  RVStyle1.TextStyles[0].FontName := '微软雅黑';
//  RVStyle1.TextStyles[0].Color := clBlack;
//  RVStyle1.TextStyles[0].BackColor := clWhite;
//  RVStyle1.TextBackgroundKind := rvtbkSimple;


//  RVStyle1.CleanupInstance;
//  RichViewEdit1.Font.Name := '微软雅黑';
//  RichViewEdit1.Font.Size := 50;
//  RVStyle1.AddTextStyle;
//  RichViewEdit1.ReformatAll;
//  RVStyle1.TextStyles.Clear;
  with RVStyle1.TextStyles.Add do
  begin
    StyleName := 'Title Text';
    Size := 14;
    Style := [fsBold];
  end;
  with RVStyle1.TextStyles[1] do
  begin
    Color := clRed;
    FontName := 'Verdana';
  end;
  with RVStyle1.ParaStyles[1] do
  begin
    Alignment := rvaLeft;
  end;
  RichViewEdit1.Reformat;
end;

//  RichViewEdit1.Style.StyleTemplates[0].TextStyle.Color := clRed;
//  RichViewEdit1.ApplyStyleTemplate(0);

比如修改前景色 ,背景色,格式清除啊。。
//  RichViewEdit1.DeleteSelection; 什么前面删除啊,

//  RVStyle1.TextStyles.Clear;
//   RichViewEdit1.InsertText(' ', True);

//  keybd_event(VK_BACK, 0, 0, 0); // 按下 Backspace 键
//  keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, 0); // 释放 Backspace 键
//  RichViewEdit1.delete
//  RichViewEdit1.DeleteItems(1, -1);
//  RichViewEdit1.ClearLeft[1];


统统不达标。。。

。。。。
最后最后。。。我先添加一个不带格式的,看不到的空格,0就代表风格号,-1代表段落不换行(反正就是参数啦)

     RichViewEdit1.AddNL(' ', 0, -1);      //成功方法,先插入一个空格字符串充掉那个原来的格式
     RichViewEdit1.SelectCurrentWord; //选中当前的那个单词,其实呢选中不了这样就无形中向左移动了光标
     RichViewEdit1.PasteText;               //最后再把剪贴板中转换后的那字符串粘来

image.png

估计吧,可能还有其他的方法吧,贴出来大家参考下吧。

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lyrong2008 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lyn1875 发表于 2024-12-29 13:29
感谢分享
tangguokui 发表于 2024-12-29 17:56
skypaladin 发表于 2024-12-29 20:49
xieyinghao 发表于 2024-12-30 10:18

很好的资源,66
 楼主| 冥界3大法王 发表于 2024-12-30 14:19
本帖最后由 冥界3大法王 于 2025-1-2 09:44 编辑

更简洁的解决方法:
procedure TMain_Form.N8Click(Sender: TObject); //剪贴板富文本转换为纯文本
begin
RichViewEdit1.CurTextStyleNo := 0;                            //设置这个才对!
  RichViewEdit1.InsertText(Clipboard.AsText, False);     //插入符位于光标后,所以为False
  RichViewEdit1.Format;end;
xxy2191 发表于 2024-12-30 17:29
慢慢学习,谢谢分享。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-7 20:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表