richedit编程指南

合集下载

delphi7 dbrichedit 用法

delphi7 dbrichedit 用法

delphi7 dbrichedit 用法[Delphi 7 DBRichEdit 用法]Delphi 7是一种流行的编程语言,常用于开发Windows平台上的应用程序。

其中一个强大而有用的组件是DBRichEdit,它允许用户在应用程序中创建和编辑RTF(Rich Text Format)文本。

本文将一步一步介绍DBRichEdit的用法,并提供一些示例代码。

第一步:安装DBRichEdit组件在使用DBRichEdit之前,需要确保已经正确安装了Delphi 7。

接下来,我们需要安装DBRichEdit组件。

将其相关文件复制到Delphi的组件目录中,并在Delphi的组件菜单中添加DBRichEdit组件。

第二步:创建数据库表格DBRichEdit是用于处理数据库中存储的RTF文本的。

在继续之前,我们需要创建一个数据库表格,用于存储RTF文本。

可以使用Delphi提供的数据库管理工具,如BDE(Borland Database Engine)或ADO(ActiveX Data Objects),创建一个包含一个RTF字段的表格。

第三步:在Delphi中添加数据源组件要使用DBRichEdit,我们需要在Delphi中添加一个数据源组件。

打开Delphi 的“工具”菜单,选择“组件库”下的“数据源”选项,然后将数据源组件拖放到主窗口的设计视图中。

第四步:配置数据源组件右击刚刚添加的数据源组件,选择“属性”选项。

在属性窗口中,将“DataSet”属性设置为我们创建的数据库表格。

第五步:添加DBRichEdit组件在Delphi的组件菜单中,选择DBRichEdit组件,并在主窗口的设计视图中添加一个DBRichEdit组件。

然后,通过拖放方式将其与数据源组件关联。

第六步:配置DBRichEdit组件选中添加的DBRichEdit组件,在属性窗口中,将“DataField”属性设置为RTF 文本所在的数据库字段,并将“DataSource”属性设置为我们刚刚创建的数据源组件。

Win32教程33-RichEdit控件_基础知识

Win32教程33-RichEdit控件_基础知识
RichEd20.dll3.0RICHEDIT20A
你会注意到版本2和3都使用了相同的DLL文件名,而且它们也使用了相同的类名!这样在你想要明确的使用RichEdit 3.0的功能的时候就会产生问题. 到目前为止,我还找到一个正式的方法来区分版本2.0和3.0.不过,有个解决方法工作良好,我会在后面演示给你看.
CFM_STRIKEOUTdwEffects 成员中的 CFE_STRIKEOUT 值是有效的.
CFM_UNDERLINEdwEffects 成员中的 CFE_UNDERLINE 值是有效的.
dwEffects字符效果. 可以是以下值的组合
CFE_AUTOCOLOR使用系统正文颜色
CFE_BOLD粗体字符
dwMask位标记, 用来指定下面的那些成员是有效的.
CFM_BOLDdwEffects 成语中的 CFE_BOLD 值是有效的.
CFM_CHARSETbCharSet 成员是有效的。
CFM_COLORcrTextColor 成员跟 dwEffects中的 CFE_AUTOCOLOR 值是有效的.
CFE_ITALIC斜体字符
CFE_STRIKEOUT字符带删除线
CFE_UNDERLINE字符带下划线
CFE_PROTECTED字符是受保护的; 企图改变字体会产生一个EN_PROTECTED 通知消息.
yHeight字符高度, 单位是 twips ( 1/1440 英寸 或者 1/20 的打印机的打印点).
lParam == 指定要设置的颜色的 COLORREF 结构,仅当 wParam 为 0 时才有效.
譬如, 如果我要设置背景为纯蓝色,我需要写入以下代码:
invoke SendMessage,hwndRichEdit,EM_SETBKGNDCOLOR,0,0FF0000h

delphi trichedit用法

delphi trichedit用法

delphi trichedit用法Delphi Trichedit用法1. 什么是Delphi TricheditDelphi Trichedit是Delphi提供的一个组件,用于创建和编辑RTF格式的文本。

它支持丰富的文本格式设置和自定义功能,适用于开发各种文本编辑程序。

2. 创建Trichedit控件要使用Delphi Trichedit,首先需要在Delphi的窗体上创建一个Trichedit控件。

你可以在Delphi的组件面板上找到Trichedit控件,并将其拖放到窗体上。

3. 设置Trichedit的属性Trichedit控件具有许多属性,可以通过设置这些属性来控制文本的格式和行为。

以下是一些常用的属性及其说明:•Font:设置文本的字体、字号和样式。

•Color:设置文本的颜色。

•ReadOnly:设置是否只读,如果设置为True,则无法编辑文本。

•WordWrap:设置是否自动换行。

•ScrollBars:设置是否显示滚动条。

•PlainText:获取或设置文本的纯文本内容。

4. 设置文本格式通过Trichedit控件的属性和方法,可以对文本进行格式设置,例如:•SelAttributes:获取或设置当前选中文本的属性,例如字体、字号和颜色。

•Paragraph:设置段落的缩进、对齐方式和行距等属性。

•Lines:获取或设置文本的内容,可以通过添加、删除、插入和替换等方法来编辑文本。

5. 处理事件Trichedit控件还支持各种事件,可以在事件处理程序中编写代码来实现一些自定义功能。

以下是一些常用的事件:•OnChange:文本内容发生改变时触发的事件。

•OnKeyPress:按下键盘按键时触发的事件。

•OnSave:将文本保存到文件时触发的事件。

•OnLoad:从文件加载文本时触发的事件。

6. 导出和导入文本通过使用Trichedit控件的方法,可以将文本导出为RTF格式或纯文本格式,也可以从文件导入文本。

CRichEdit控件操作使用

CRichEdit控件操作使用

CRichEdit控件操作使用CRichEdit控件操作相关< 转载>一般性问题1. 代码编译通过了,运行后RichEdit控件不显示,在InitInstance中添加BOOL CWinApp::InitInstance (){…AfxInitRichEdit(); - RichEdit 1.0或 AfxInitRichEdit2(); - RichEdit 2.0…}2. 升级默认的RichEdit版本,默认的版本有BUG,在InitInstance中添加BOOL CWinApp::InitInstance (){…LoadLibrary("RICHED20.DLL");…FreeLibrary();}如果是CRichEditView基类的话,可用如下消息机制:BOOL CRichEditView::PreCreateWindow(CREATESTRUCT& cs) {if (LoadLibraryA("RICHED20.DLL") == NULL){AfxMessageBox(_T("Fail to load /"riched20.dll/"."),MB_OK |MB_ICONERROR);PostMessage(WM_QUIT,0,0);return FALSE;}m_strClass = RICHEDIT_CLASSA;return CRichEditView::PreCreateWindow(cs);}3. 在RichEdit控件的输入框中最后追加一行CRichEditCtrl.SetSel(-1, -1);CRichEditCtrl.ReplaceSel((LPCTSTR)str);4. 限制RichEdit控件的字数CRichEditCtrl.LimitText(long nChars)5. 设置RichEdit控件的换行切换如果是CRichEditView基类的话,可用如下消息机制:BOOL CRichEditView::OnInitialUpdate(){…m_nWordWrap = WrapNone;WrapChanged();…}如果是在Dialog,可使用SetTargetDevice,并在RichEdit的属性里面加上want returnCRichEditCtrl.SetTargetDevice(m_dcTarget, GetPrintWidth());WrapChanged实际上也是调用CRichEditCtrl.SetTargetDevice(NULL, 0); //m_nWordWrap == WrapToWindowCRichEditCtrl.SetTargetDevice(NULL, 1); //m_nWordWrap == WrapNoneCRichEditCtrl.SetTargetDevice(NULL, 2);// m_nWordWrap == WrapToTargetDevice6. 设置RichEdit控件不带格式的数据粘贴CRichEditCtrl.PasteSpecial(CF_TEXT);7. 设置RichEdit控件的滚动条自动随输入滚动到最后一行int nFirstVisible = CRichEditCtrl.GetFirstVisibleLine();if (nFirstVisible > 0){CRichEditCtrl.LineScroll(-nFirstVisible, 0);}或CRichEditCtrl.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);8.设置RichEdit控件的撤销输入次数(只能用在RICHED20以上)SendMessage(EM_SETTEXTMODE, TM_MULTILEVELUNDO, 0);SendMessage(EM_SETUNDOLIMIT, 100, 0);TM_MULTILEVELUNDO 支持多取消(默认值),可通过EM_SETUNDOLIMIT设置最大次数9.设置RichEdit控件的OnChange事件EM_SETEVENTMASK 设置 ENM_CHANGElong lMask = GetEventMask();lMask |= ENM_CHANGE;lMask &= ~ENM_PROTECTED;SetEventMask(lMask);10.设置RichEdit控件的只读属性CRichEditCtrl::SetReadOnly(BOOL bReadOnly = TRUE );通过设置PROTECTED实现选中的文本只读,参见如下文章:函数应用1. 设置RichEdit控件的显示字体CHARFORMAT cf;ZeroMemory(&cf, sizeof(CHARFORMAT));cf.cbSize = sizeof(CHARFORMAT);cf.dwMask|=CFM_BOLD;cf.dwEffects|=CFE_BOLD; //粗体,取消用cf.dwEffects&=~CFE_BOLD;cf.dwMask|=CFM_ITALIC;cf.dwEffects|=CFE_ITALIC; //斜体,取消用cf.dwEffects&=~CFE_ITALIC;cf.dwMask|=CFM_UNDERLINE;cf.dwEffects|=CFE_UNDERLINE; //斜体,取消用cf.dwEffects&=~CFE_UNDERLINE;cf.dwMask|=CFM_COLOR;cf.crTextColor = RGB(255,0,0); //设置颜色cf.dwMask|=CFM_SIZE;cf.yHeight =200; //设置高度cf.dwMask|=CFM_FACE;strcpy(cf.szFaceName ,_T("隶书")); //设置字体CRichEditCtrl.SetSelectionCharFormat(cf);2.设置RichEdit控件的显示字体的行间距(只能用在RICHED20以上)PARAFORMAT2 pf;pf.cbSize = sizeof(PARAFORMAT2);pf.dwMask = PFM_NUMBERING | PFM_OFFSET;pf.wNumbering = PFN_BULLET; //注意PFM_NUMBERINGpf.dxOffset = 10;VERIFY(SetParaFormat(pf));常用的dwMask有如下列表:PFM_NUMBERING 成员 wNumbering 才起作用1 项目符号,默认用PFN_BULLET.2 使用阿拉伯数字 (1, 2, 3, ...).3 使用小写字母 (a, b, c, ...).4 使用大写字母 (A, B, C, ...).5 使用小写罗马数字 (i, ii, iii, ...).6 使用大写罗马数字 (I, II, III, ...).7 自定义,字符见成员 wNumberingStart.PFM_OFFSET 成员 dxOffset 才起作用,缩进,单位twipsPFM_STARTINDENT 成员 dxStartIndent 才起作用,首行缩进PFM_SPACEAFTER 成员 dySpaceAfter 才起作用,段间距PFM_LINESPACING 成员 dyLineSpacing 才起作用,行间距3.设置RichEdit控件的透明背景(只能用在RICHED20以上)long style = ::GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);style &= WS_EX_TRANSPARENT;::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, style);或 CreateEx(),然后把WS_EX_TRANSPARENT样式加上4.获取或者写入RichEdit控件的内容GetWindowText使用EM_GETTEXTEXGETTEXTEX gt;gt.cb = 200;gt.flags = GT_DEFAULT;gt.codepage = CP_ACP ;gt.lpDefaultChar = NULL;gt.lpUsedDefChar = NULL;SendMessage(EM_GETTEXTEX,(WPARAM)>,(LPARAM)text);StreamOut(主要用于RTF等格式输出)static DWORD CALLBACK;MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb){CFile* pFile = (CFile*) dwCookie;pFile->Write(pbBuff, cb);*pcb = cb;return 0;}CFile cFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite);EDITSTREAM es;es.dwCookie = (DWORD) &cFile; //设置用例参数,以便回调函数调用es.pfnCallback = MyStreamOutCallback;pmyRichEditCtrl->StreamOut(SF_RTF, es);读入可以此类推,SetWindowText, EM_SETTEXTEX, StreamIn5.查找RichEdit控件中的字符串FINDTEXTEX ft;ft.chrg.cpMin = 0;ft.chrg.cpMax = -1;ft.lpstrText = "|";long lPos = FindText(0, &ft);如果要继续查找,修改cpMin,如int nCount = 0;do{long lPos = GetRichEditCtrl().FindText(0, &ft);if( -1 == lPos) break;ft.chrg.cpMin = lPos + strlen(ft.lpstrT ext);++nCount;}while(TRUE);6. 以Html格式保存RichEdit控件中的内容临时做法可先转为RTF格式,再通过RTF-to-HTML Converter,参考如下文章:8. 重载OnProtected函数以得到RichEdit对应的消息,如粘贴等void CRichEditorView::OnProtected(NMHDR* pNMHDR, LRESULT* pResult){ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;switch (pEP->msg){case WM_KEYDOWN: //按键,判断pEP->wParamcase WM_PASTE: //粘贴case WM_CUT: //剪切case EM_SETCHARFORMAT:default:break;};*pResult = FALSE;}聊天常用1. 设置RichEdit控件的链接功能(只能用在RICHED20以上)LoadLibrary(_T("Riched20.dll"));创建RichEdit2.0控件CreateEx(0, _T("RichEdit20A"), NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|ES_READONLY|ES_WANTRETURN|ES_MULTILINE, rect.left, rect.top, cx, cy, pParentWnd->m_hWnd, (HMENU)nID, NULL);设置选中的文字为链接显示CHARFORMAT2 cf2;ZeroMemory(&cf2, sizeof(CHARFORMAT2));//cf2.cbSize = sizeof(CHARFORMAT2);cf2.dwMask = CFM_LINK;cf2.dwEffects |= CFE_LINK;m_cRichEdit.SendMessage(EM_SETCHARFORMAT,SCF_SELECTION, (LPARAM)&cf2);支持链接的点击响应m_cRichEdit.SetEventMask(ENM_LINK);响应链接的点击EN_LINKBEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl)ON_NOTIFY_REFLECT(EN_LINK, OnURL)END_MESSAGE_MAP()......void CMyRichEdit::OnURLClick(NMHDR *pNmhdr, LRESULT *pResult){TCHAR LinkChar[512];ENLINK *pLink = (ENLINK *)pNmhdr;if (pLink->msg == WM_LBUTTONUP){SetSel(penLink->chrg); //这是链接的文字范围long Res = GetSelT ext((char *)LinkChar); //这是链接文字…}}自动识别链接UINT nMask = SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_GETEVENTMASK, 0, 0);SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_SETEVENTMASK, 0, nMask | NM_LINK);SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_AUTOURLDETECT, TRUE, 0);BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult){NMHDR* pNmHdr = (NMHDR *)lParam;if(pNmHdr->idFrom == IDC_RICHEDIT_MESSAGE && pNmHdr->code == EN_LINK){ENLINK *pLink = (ENLINK *)lParam;if (pLink->msg == WM_LBUTTONDOWN){SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_EXSETSEL, 0, (LPARAM)&(pLink->chrg));ShellExecute(GetSafeHwnd(), "open", m_wndREMessage.GetSelText(), 0, 0, SW_SHOWNORMAL);}}return CDialog::OnNotify(wParam, lParam, pResult);}2.在RichEdit中插入位图参考如下文章:自定义在RichEdit中插入对象的图标3.在RichEdit显示GIF动画常用的是通过QQ的imageole.dll(也有用Gif89.dll的)在richedit控件中插入动态GIF(Native C++版)4.IRichEditOleCallback的使用5.类似MSN信息发送框的制作(上)内容包含:实现右键菜单,图片插入,读取/写入RTF格式字符串6.自定义RichEdit控件内容包含:鼠标右键消息,消息映射,字体变换转载】MFC中的CEdit与CRichEdit使用技巧2008-03-14 15:41VC中在对话框上使用Rich Edit控件前一定要用AfxInitRichEdit()初始化RichEdit环境.--------------------------------------------------------------------------------1.设置edit只读属性方法一:m_edit1.SetReadOnly(TRUE);方法二:::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);--------------------------------------------------------------------------------2.判断edit中光标状态并得到选中内容(richedit同样适用)int nStart, nEnd;CString strTemp;m_edit1.GetSel(nStart, nEnd);if(nStart == nEnd){strTemp.Format(_T("光标在%d"), nStart);AfxMessageBox(strTemp);}else{//得到edit选中的内容m_edit1.GetWindowText(strTemp);strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);AfxMessageBox(strTemp);}注:GetSel后,如果nStart和nEnd,表明光标处于某个位置(直观来看就是光标在闪动);如果nStart和nEnd不相等,表明用户在edit中选中了一段内容。

trichedit用法

trichedit用法

trichedit用法摘要:1.Trichedit 简介2.Trichedit 功能3.Trichedit 安装与使用4.Trichedit 示例5.Trichedit 的优点与不足正文:1.Trichedit 简介Trichedit 是一款强大的文本编辑器,适用于Windows 操作系统。

它具有许多特色功能,为用户提供了方便的文本处理解决方案。

Trichedit 支持多种文本格式,包括HTML、PHP、Java、JavaScript 等,满足编程人员和普通用户的需求。

2.Trichedit 功能(1)强大的文本编辑功能:Trichedit 支持文本拖放、复制粘贴、查找替换等基本编辑功能,同时支持宏、自动完成、语法高亮等高级特性。

(2)代码折叠:Trichedit 可以自动折叠代码,使代码看起来更加清晰易读。

(3)文件比较:Trichedit 可以方便地对两个文本文件进行比较,并高亮显示差异部分。

(4)内置FTP 客户端:Trichedit 内置了FTP 客户端功能,用户可以直接通过编辑器上传、下载文件。

(5)支持插件:Trichedit 支持插件扩展,用户可以根据需要安装各种插件来增强编辑器的功能。

3.Trichedit 安装与使用(1)下载与安装:用户可以从Trichedit 官网下载最新版本的编辑器,并按照提示进行安装。

(2)使用:安装完成后,用户可以双击打开Trichedit,即可开始使用。

4.Trichedit 示例假设用户需要编写一个HTML 文件,可以使用Trichedit 的代码折叠功能将HTML 代码折叠,使代码看起来更加清晰。

同时,Trichedit 的语法高亮功能可以帮助用户更轻松地找到代码中的错误。

5.Trichedit 的优点与不足(1)优点:Trichedit 功能强大,适用于多种文本格式,支持插件扩展,易于上手。

(2)不足:Trichedit 仅支持Windows 操作系统,对于使用其他操作系统的用户来说可能不太方便。

richedit关键字高亮的简单实现

richedit关键字高亮的简单实现

richedit关键字高亮的简单实现以richedit关键字高亮的简单实现为标题在编程领域中,文本编辑器是一种非常重要的工具。

而在文本编辑器中,关键字高亮功能能够帮助开发者更加清晰地看到代码的结构和逻辑,提高编程效率。

本文将介绍如何实现一个简单的richedit 关键字高亮功能。

一、richedit控件简介richedit是Windows操作系统提供的一个文本编辑控件,它具有丰富的文本格式化和编辑功能。

通过使用richedit控件,我们可以实现文字加粗、斜体、下划线、字体颜色等效果。

在实现关键字高亮功能时,richedit控件的文本格式化功能将起到关键作用。

二、关键字高亮的实现思路关键字高亮的实现思路可以分为以下几个步骤:1.创建一个richedit控件,并设置其样式为只读。

这样,用户就无法编辑richedit控件中的内容,只能查看。

2.获取用户输入的文本,并将其分解为多个单词。

3.遍历每个单词,判断其是否为关键字。

如果是关键字,则将其设置为指定的高亮颜色。

4.将高亮后的文本显示在richedit控件中。

三、实现关键字高亮的代码示例下面是一个使用C++语言实现关键字高亮的简单示例代码:```cpp#include <windows.h>#include <richedit.h>LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){static HWND hEdit;switch (msg){case WM_CREATE:// 创建一个richedit控件hEdit = CreateWindowEx(0, MSFTEDIT_CLASS, L"", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_READONLY | ES_MULTILINE, 10, 10, 400, 300, hWnd, nullptr, nullptr, nullptr); break;case WM_COMMAND:if (LOWORD(wParam) == 1){// 获取用户输入的文本int len = GetWindowTextLength(hEdit);wchar_t* buffer = new wchar_t[len + 1];GetWindowText(hEdit, buffer, len + 1);// 关键字列表wchar_t* keywords[] = { L"int", L"if", L"else", L"while", L"for" };// 遍历每个单词,判断是否为关键字wchar_t* word = wcstok(buffer, L" \t\n");while (word != nullptr){for (int i = 0; i < sizeof(keywords) / sizeof(keywords[0]); i++){if (wcscmp(word, keywords[i]) == 0){// 将关键字设置为红色CHARRANGE cr;cr.cpMin = wcsstr(buffer, word) - buffer;cr.cpMax = cr.cpMin + wcslen(word);SendDlgItemMessage(hEdit, EM_EXSETSEL, 0, (LPARAM)&cr);SendDlgItemMessage(hEdit,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);}}word = wcstok(nullptr, L" \t\n");}delete[] buffer;}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, msg, wParam, lParam);}return 0;}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){// 注册窗口类WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW, WndProc, 0, 0, hInstance, nullptr, nullptr, (HBRUSH)(COLOR_WINDOW + 1), nullptr, L"MainWindow", nullptr };RegisterClassEx(&wc);// 创建窗口HWND hWnd = CreateWindowEx(0, L"MainWindow", L"关键字高亮示例", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, nullptr, nullptr, hInstance, nullptr);// 创建一个按钮,用于触发关键字高亮功能CreateWindow(L"BUTTON", L"高亮关键字", WS_VISIBLE | WS_CHILD, 420, 10, 100, 30, hWnd, (HMENU)1, hInstance, nullptr);// 显示窗口ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);// 消息循环MSG msg;while (GetMessage(&msg, nullptr, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return (int)msg.wParam;}```四、总结通过使用richedit控件的文本格式化功能,我们可以实现简单的关键字高亮功能。

delphi7 dbrichedit 用法

delphi7 dbrichedit 用法

delphi7 dbrichedit 用法Delphi 7 是一款经典且功能强大的集成开发环境(IDE),其拥有丰富的组件库,可以用于开发各种类型的应用程序。

其中之一就是 DBRichEdit 控件,它是一个继承自 RichEdit 组件的数据驱动版本,可以在应用程序中对 RTF 格式的文本进行显示、编辑和存储。

在本文中,我将向您介绍如何使用 Delphi 7 中的 DBRichEdit控件,包括控件的基本属性设置、文本的显示和编辑、获取和设置文本内容、保存和读取 RTF 格式的文本等。

让我们一起开始吧!1. 首先,启动 Delphi 7,并创建一个新的 VCL 文件,其中包含一个DBRichEdit 控件。

可以在“工具箱”窗口中找到该控件,并将其拖放到窗体上。

2. 接下来,我们需要连接一个数据集(DataSet)到DBRichEdit 控件,以便加载和保存文本内容。

可以使用TTable、TQuery、TADOQuery 等组件作为数据集。

a. 在工具箱中找到适当的数据集组件,并将其拖放到窗体上。

b. 打开该数据集的属性编辑器,设置连接字符串、表名、查询语句等,以便与数据库建立连接。

c. 在 DBRichEdit 控件的属性编辑器中找到 DataField 属性,选择与文本内容对应的字段名。

3. 现在,我们已经完成了控件的基本设置,可以开始设置其他属性,如字体、颜色、对齐方式等。

a. 找到 Font 属性,可以设置字体名称、大小、样式等。

b. 找到 Color 属性,可以设置文本的颜色。

c. 找到 Alignment 属性,可以设置文本的对齐方式,如左对齐、居中对齐、右对齐等。

4. 接下来,让我们来学习如何显示和编辑文本内容。

a. 运行应用程序,您将看到 DBRichEdit 控件中显示了与字段中的文本内容相对应的文本。

b. 单击 DBRichEdit 控件,可以开始编辑文本。

您可以输入新的文本、选择、拖拽和格式化文本。

windows sdk编程系列文章

windows sdk编程系列文章

windows sdk编程系列文章 ---- RichEdit控件基础知识之四2008-05-08 09:21分析:例子程序首先载入RichEdit DLL, 在这里是riched20.dll. 如果DLL载入失败,就返回Windows.hRichEdit = LoadLibrary(RichEditDLL);if(!hRichEdit){MessageBox(0,NoRichEdit,AppName,MB_OK|MB_ICONERROR);return 0;}成功载入DLL后,我们继续创建一个常规窗口,作为RichEdit的父窗口。

在WM_CREATE处理函数里,我们创建一个RichEdit控件:hwndRichEdit =CreateWindowEx(WS_EX_CLIENTEDGE,RichEditClass,NULL,ES_MUL TILINE | WS_CHILD |WS_VISIBLE |WS_VSCROLL |WS_HSCROLL |ES_NOHIDESEL,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFA ULT,hWnd,(HMENU)RichEditID,g_hInstance,NULL);注意在这里我们指定了ES_MULTILINE风格,否则创建的会是一个单行的控件。

SendMessage(hwndRichEdit,EM_LIMITTEXT,-1,0);创建了RichEdit控件之后,我们必须设置新的正文大小。

缺省时,RichEdit控件具有64K的正文大小限制,跟简单的多行Edit控件相同。

我们需要扩展这个限制,允许用来操作更大的文件。

在上一个代码行里,我们指定了大小为-1,大小总计为0FFFFFFFFh 字节, 是一个很大的数值了。

SetColor();下一步,我们设置正文/背景色。

因为这个操作可以在程序中的其他部分执行,我把这些代码放到一个叫SetColor的函数里。

windows sdk编程系列文章 -- RichEdit控件基础知识之三

windows sdk编程系列文章 -- RichEdit控件基础知识之三

windows sdk编程系列文章---- RichEdit控件基础知识之三例子:见光盘FirstWindow31下面的例子是一个简单的编辑器,你可以用来打开一个cpp源文件,编辑它,然后保存。

它使用了RichEdit 控件 2.0 或者更高的版本.#include "Windows.h"#include "tchar.h"#include "Richedit.h"#define IDR_MAINMENU 101#define IDM_OPEN 40001#define IDM_SAVE 40002#define IDM_CLOSE 40003#define IDM_SAVEAS 40004#define IDM_EXIT 40005#define IDM_COPY 40006#define IDM_CUT 40007#define IDM_PASTE 40008#define IDM_DELETE 40009#define IDM_SELECTALL 40010#define IDM_OPTION 40011#define IDM_UNDO 40012#define IDM_REDO 40013#define IDD_OPTIONDLG 101#define IDC_BACKCOLORBOX 1000#define IDC_TEXTCOLORBOX 1001#define RichEditID 300TCHAR ClassName[] = _T("IczEditClass");TCHAR AppName[] = _T("IczEdit version 1.0");TCHAR RichEditDLL[] = _T("riched20.dll");TCHAR RichEditClass[] = _T("RichEdit20A");TCHAR NoRichEdit[] = _T("Cannot find riched20.dll");TCHAR CppFilterString[] = _T("Cpp source code(*.cpp)\0*.cpp\0All Files (*.*)\0*.*\0"); TCHAR OpenFileFail[] = _T("Cannot open the file");TCHAR WannaSave[] = _T("The data in the control is modified. Want to save it?");BOOL FileOpened = FALSE;COLORREF BackgroundColor = RGB(255,255,255) ;COLORREF TextColor = RGB(0,0,0);TCHAR FileName[256];TCHAR AlternateFileName[256];DWORD CustomColors[16];HINSTANCE g_hInstance;HMODULE hRichEdit;HWND hwndRichEdit;HMENU hMenu;DWORD CALLBACK StreamInProc(DWORD hFile,LPBYTE pBuffer,long NumBytes,long *pBytesRead){return (ReadFile((HANDLE)hFile,pBuffer,NumBytes,(LPDWORD)pBytesRead,0) ^ 1);}DWORD CALLBACK StreamOutProc(DWORD hFile,LPBYTE pBuffer,long NumBytes,long *pBytesRead){return (WriteFile((HANDLE)hFile,pBuffer,NumBytes,(LPDWORD)pBytesRead,0) ^ 1);}BOOL CheckModifyState(HWND hWnd){if(SendMessage(hwndRichEdit,EM_GETMODIFY,0,0)){int nResult = MessageBox(hWnd,WannaSave,AppName,MB_YESNOCANCEL);if(nResult == IDYES){SendMessage(hWnd,WM_COMMAND,IDM_SAVE,0);}else if(nResult == IDCANCEL)return FALSE;}return TRUE;}void SetColor(){CHARFORMAT cfm;SendMessage(hwndRichEdit,EM_SETBKGNDCOLOR,0,BackgroundColor);RtlZeroMemory(&cfm,sizeof(cfm));cfm.cbSize = sizeof(cfm);cfm.dwMask = CFM_COLOR;cfm.crTextColor = TextColor;SendMessage(hwndRichEdit,EM_SETCHARFORMAT,SCF_ALL,(LPARAM)&cfm);}INT CALLBACK OptionProc( HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam ){CHOOSECOLOR clr;switch(Msg){case WM_INITDIALOG:break;case WM_COMMAND:if(HIWORD(wParam) == BN_CLICKED){switch(LOWORD(wParam)){case IDCANCEL:SendMessage(hWnd,WM_CLOSE,0,0);break;case IDC_BACKCOLORBOX:RtlZeroMemory(&clr,sizeof(clr));clr.lStructSize = sizeof(clr);clr.hwndOwner = hWnd;clr.hInstance = (HWND)g_hInstance;clr.rgbResult = BackgroundColor;clr.lpCustColors = CustomColors;clr.Flags = CC_ANYCOLOR | CC_RGBINIT;if(ChooseColor(&clr)){BackgroundColor = clr.rgbResult;InvalidateRect(GetDlgItem(hWnd,IDC_BACKCOLORBOX),0,TRUE);}break;case IDC_TEXTCOLORBOX:RtlZeroMemory(&clr,sizeof(clr));clr.lStructSize = sizeof(clr);clr.hwndOwner = hWnd;clr.hInstance = (HWND)g_hInstance;clr.rgbResult = TextColor;clr.lpCustColors = CustomColors;clr.Flags = CC_ANYCOLOR | CC_RGBINIT;if(ChooseColor(&clr)){TextColor = clr.rgbResult;InvalidateRect(GetDlgItem(hWnd,IDC_TEXTCOLORBOX),0,TRUE);}break;case IDOK:{DWORD dwRet = SendMessage(hwndRichEdit,EM_GETMODIFY,0,0);SetColor();SendMessage(hwndRichEdit,EM_SETMODIFY,dwRet,0);EndDialog(hWnd,0);}break;}}break;case WM_CTLCOLORSTATIC:if(GetDlgItem(hWnd,IDC_BACKCOLORBOX) == (HWND)lParam){return (int)CreateSolidBrush(BackgroundColor);}else{if(GetDlgItem(hWnd,IDC_TEXTCOLORBOX) == (HWND)lParam)return (int)CreateSolidBrush(TextColor);}break;case WM_CLOSE:EndDialog(hWnd,0);break;default:return FALSE;}return TRUE;}LONG CALLBACK ProcWinMain( HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam ){CHARRANGE chrg;OPENFILENAME ofn;EDITSTREAM editstream;HANDLE hFile;switch(Msg){case WM_CREATE:{hwndRichEdit=CreateWindowEx(WS_EX_CLIENTEDGE,RichEditClass,NULL,ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_NOHIDESEL, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hWnd,(HMENU)Ric hEditID,g_hInstance,NULL);SendMessage(hwndRichEdit,EM_LIMITTEXT,-1,0);SetColor();SendMessage(hwndRichEdit,EM_SETMODIFY,FALSE,0);SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER,0,0);}break;case WM_INITMENUPOPUP:if(LOWORD(lParam) == 0){if(FileOpened){EnableMenuItem((HMENU)wParam,IDM_OPEN,MF_GRAYED);EnableMenuItem((HMENU)wParam,IDM_CLOSE,MF_ENABLED);EnableMenuItem((HMENU)wParam,IDM_SAVE,MF_ENABLED);EnableMenuItem((HMENU)wParam,IDM_SAVEAS,MF_ENABLED);}else{EnableMenuItem((HMENU)wParam,IDM_OPEN,MF_ENABLED);EnableMenuItem((HMENU)wParam,IDM_CLOSE,MF_GRAYED);EnableMenuItem((HMENU)wParam,IDM_SAVE,MF_GRAYED);EnableMenuItem((HMENU)wParam,IDM_SAVEAS,MF_GRAYED);}}else if(LOWORD(lParam) == 1){if(SendMessage(hwndRichEdit,EM_CANPASTE,CF_TEXT,0))EnableMenuItem((HMENU)wParam,IDM_PASTE,MF_ENABLED);elseEnableMenuItem((HMENU)wParam,IDM_PASTE,MF_GRAYED);if(SendMessage(hwndRichEdit,EM_CANREDO,CF_TEXT,0))EnableMenuItem((HMENU)wParam,IDM_REDO,MF_ENABLED);elseEnableMenuItem((HMENU)wParam,IDM_REDO,MF_GRAYED);SendMessage(hwndRichEdit,EM_EXGETSEL,0,(LPARAM)&chrg);if(chrg.cpMin == chrg.cpMax){EnableMenuItem((HMENU)wParam,IDM_COPY,MF_GRAYED);EnableMenuItem((HMENU)wParam,IDM_CUT,MF_GRAYED);EnableMenuItem((HMENU)wParam,IDM_DELETE,MF_GRAYED);}else{EnableMenuItem((HMENU)wParam,IDM_COPY,MF_ENABLED);EnableMenuItem((HMENU)wParam,IDM_CUT,MF_ENABLED);EnableMenuItem((HMENU)wParam,IDM_DELETE,MF_ENABLED);}}break;case WM_CLOSE:if(CheckModifyState(hWnd))DestroyWindow(hWnd);break;case WM_DESTROY:PostQuitMessage(0);break;case WM_SIZE:MoveWindow(hwndRichEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);break;case WM_COMMAND:if(lParam == 0){switch(LOWORD(wParam)){case IDM_OPEN:RtlZeroMemory(&ofn,sizeof(ofn));ofn.lStructSize = sizeof(ofn);ofn.hwndOwner = hWnd;ofn.hInstance = g_hInstance;ofn.lpstrFilter = CppFilterString;ofn.lpstrFile = FileName;ofn.nMaxFile = sizeof(FileName);ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY| OFN_PATHMUSTEXIST;if(GetOpenFileName(&ofn)){hFile=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);if(hFile != INVALID_HANDLE_VALUE){editstream.dwCookie = (DWORD)hFile;editstream.pfnCallback = StreamInProc;SendMessage(hwndRichEdit,EM_STREAMIN,SF_TEXT,(LPARAM)&editstrea m);SendMessage(hwndRichEdit,EM_SETMODIFY,FALSE,0);CloseHandle(hFile);FileOpened = TRUE;}elseMessageBox(hWnd,OpenFileFail,AppName,MB_OK | MB_ICONERROR);}break;case IDM_CLOSE:if(CheckModifyState(hWnd)){SetWindowText(hwndRichEdit,0);FileOpened = FALSE;}break;case IDM_SAVE:{hFile=CreateFile(FileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTR IBUTE_NORMAL,0);if(hFile != INVALID_HANDLE_VALUE){editstream.dwCookie = (DWORD)hFile;editstream.pfnCallback = StreamOutProc;SendMessage(hwndRichEdit,EM_SETMODIFY,FALSE,0);CloseHandle(hFile);}elseMessageBox(hWnd,OpenFileFail,AppName,MB_OK | MB_ICONERROR);}break;case IDM_COPY:SendMessage(hwndRichEdit,WM_COPY,0,0);break;case IDM_CUT:SendMessage(hwndRichEdit,WM_CUT,0,0);break;case IDM_PASTE:SendMessage(hwndRichEdit,WM_PASTE,0,0);break;case IDM_DELETE:SendMessage(hwndRichEdit,EM_REPLACESEL,TRUE,0);break;case IDM_SELECTALL:chrg.cpMax = -1;chrg.cpMin = 0;SendMessage(hwndRichEdit,EM_EXSETSEL,0,(LPARAM)&chrg);break;case IDM_UNDO:SendMessage(hwndRichEdit,EM_UNDO,0,0);break;case IDM_REDO:SendMessage(hwndRichEdit,EM_REDO,0,0);break;case IDM_OPTION:DialogBoxParam(g_hInstance,MAKEINTRESOURCE(IDD_OPTIONDLG),hWnd,&O ptionProc,0);break;case IDM_SAVEAS:RtlZeroMemory(&ofn,sizeof(ofn));ofn.lStructSize = sizeof(ofn);ofn.hwndOwner = hWnd;ofn.hInstance = g_hInstance;ofn.lpstrFilter = CppFilterString;ofn.lpstrFile = AlternateFileName;ofn.nMaxFile = sizeof(AlternateFileName);ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST;if(GetSaveFileName(&ofn)){hFile=CreateFile(AlternateFileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FI LE_ATTRIBUTE_NORMAL,0);if(hFile != INVALID_HANDLE_VALUE){editstream.dwCookie = (DWORD)hFile;editstream.pfnCallback = StreamOutProc;SendMessage(hwndRichEdit,EM_SETMODIFY,FALSE,0);CloseHandle(hFile);}elseMessageBox(hWnd,OpenFileFail,AppName,MB_OK | MB_ICONERROR);}break;case IDM_EXIT:SendMessage(hWnd,WM_CLOSE,0,0);break;}}break;default:return DefWindowProc(hWnd,Msg,wParam,lParam);}return 0;}int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){WNDCLASSEX wc;MSG msg;HWND hWnd;g_hInstance = hInstance;hRichEdit = LoadLibrary(RichEditDLL);if(!hRichEdit){MessageBox(0,NoRichEdit,AppName,MB_OK|MB_ICONERROR);return 0;}wc.cbSize = sizeof(WNDCLASSEX);wc.style = NULL;wc.lpfnWndProc = ProcWinMain;wc.cbClsExtra = NULL;wc.cbWndExtra = NULL;wc.hInstance = hInstance;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.lpszMenuName = MAKEINTRESOURCE(IDR_MAINMENU);wc.lpszClassName = ClassName;wc.hIcon = wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);wc.hCursor = LoadCursor(NULL,IDC_ARROW);RegisterClassEx(&wc);hWnd = CreateWindowEx(NULL,ClassName,AppName,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL, hInstance,NULL);ShowWindow(hWnd,SW_SHOWNORMAL);UpdateWindow(hWnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}FreeLibrary(hRichEdit);return msg.wParam;}。

cxrichedit 方法

cxrichedit 方法

cxrichedit 方法CRichEditCtrl 是 MFC (Microsoft Foundation Classes) 中的一个控件,用于在Windows 应用程序中提供富文本编辑功能。

这个控件允许用户输入、编辑和显示格式化的文本,包括不同的字体、大小、颜色、对齐方式等。

CRichEditCtrl 还支持嵌入对象(如 OLE 对象)和脚本。

使用 CRichEditCtrl 的方法通常包括以下几个步骤:创建控件:在对话框或视图中创建 CRichEditCtrl 控件。

这通常是通过在对话框模板中添加一个富文本编辑控件,或者在代码中动态创建它来实现的。

初始化控件:在控件创建后,你可能需要设置一些初始属性,如文本、字体、颜色等。

处理用户输入:你需要为控件编写事件处理程序,以响应用户的各种操作,如键入文本、选择文本、改变格式等。

获取和设置文本:你可以使用 CRichEditCtrl 的方法来获取和设置控件中的文本。

例如,使用 GetSelText 方法获取选定的文本,使用 SetSel 方法设置选区,使用 ReplaceSel 方法替换选定的文本等。

处理富文本格式:CRichEditCtrl 支持多种文本格式。

你可以使用字符和段落格式对象(CHARFORMAT 和 PARAFORMAT)来设置和获取这些格式。

嵌入对象:你还可以使用 CRichEditCtrl 来嵌入 OLE 对象,如图像、文档等。

这通常涉及到处理 OLE 相关的消息和接口。

下面是一个简单的示例代码,展示了如何在 MFC 应用程序中使用 CRichEditCtrl:cpp// 假设你有一个 CRichEditCtrl 成员变量 m_richEditvoid CMyDialog::OnInitDialog(){CDialogEx::OnInitDialog();// 设置初始文本m_richEdit.SetWindowText(_T("这是一个富文本编辑控件示例"));// 设置字体和颜色CHARFORMAT cf;cf.cbSize = sizeof(CHARFORMAT);cf.dwMask = CFM_FACE | CFM_COLOR;_tcscpy_s(cf.lpszFaceName, _T("Arial"));cf.crTextColor = RGB(0, 0, 255); // 蓝色m_richEdit.SetSel(0, -1); // 选择整个文本m_richEdit.SetCharFormat(cf);}void CMyDialog::OnEnChangeRichEdit(){// 处理文本变化事件CString text;m_richEdit.GetWindowText(text);// 在这里可以对文本进行处理,例如保存到文件或进行其他操作}这只是一个基本示例,CRichEditCtrl 提供了丰富的功能和接口,你可以根据需要进一步探索和使用它。

vb richedit em_settextex 例子

vb richedit em_settextex 例子

vb richedit em_settextex 例子VB是一款广泛应用于Windows桌面应用程序的开发工具,它提供了丰富的控件和API函数,方便开发者进行各种图形界面设计。

RichEdit控件是VB中一个重要的文本编辑控件,支持多语言、支持字体、颜色、对齐方式等格式化操作。

本文将介绍使用Em_SetTextEx方法设置RichEdit控件文本的例子。

一、准备工作首先,确保你已经安装了Visual Basic开发环境,并创建了一个新的VB项目。

其次,将RichEdit控件添加到窗体中,并设置好相关属性,如控件大小、位置等。

最后,准备好要显示的文本和相关资源。

二、Em_SetTextEx方法介绍Em_SetTextEx是RichEdit控件的一个方法,用于设置控件的文本内容。

该方法接受三个参数:文本、文本格式和文本样式。

其中,文本格式指定了文本的字体、颜色、对齐方式等属性,文本样式指定了文本的显示效果,如加粗、斜体等。

通过这些参数的设置,可以实现RichEdit控件的个性化显示。

三、示例代码及说明下面是一个简单的示例代码,演示如何使用Em_SetTextEx方法设置RichEdit控件的文本:```vbPrivate Sub Form_Load()' 获取RichEdit控件对象Dim richEdit As RichEditControlSet richEdit = Me.Controls("RichEditControl1")' 设置文本内容richEdit.Em_SetTextEx("这是一段测试文字",RichText_FORMAT_DEFAULT, RGB(0, 255, 0)) ' 文本内容为"这是一段测试文字",字体颜色为绿色' 设置文本样式richEdit.Em_SetTextExEx("这是一段加粗文字",RichText_STYLE_BOLD, RichText_FORMAT_NONE,RichText_FORMAT_DEFAULT) ' 文本内容为"这是一段加粗文字",加粗效果End Sub```在上述代码中,首先通过Controls函数获取RichEdit控件对象,然后使用Em_SetTextEx方法设置文本内容和样式。

devexpress richedit 字间距 -回复

devexpress richedit 字间距 -回复

devexpress richedit 字间距-回复首先,我们来介绍一下DevExpress RichEdit是什么。

DevExpress RichEdit是一个功能强大且灵活的文本编辑控件,它可以嵌入在各种应用程序中,提供丰富的文本处理功能。

它是DevExpress公司的开发产品之一,该公司是一家专业的软件开发工具提供商,致力于为开发人员提供高质量的控件和组件。

在使用DevExpress RichEdit时,我们可能会遇到一个需要调整字间距的需求。

字间距是指在文本中字母之间的距离,它可以影响到文本的可读性和美观度。

调整字间距可以使文本更加紧凑或者更加松散,以适应不同的排版需求。

为了实现字间距的调整,我们可以按照下面的步骤进行操作:第一步,选择需要调整字间距的文本段落。

在DevExpress RichEdit中,我们可以通过鼠标拖动或者使用键盘上的箭头键来选择文本段落。

另外,我们也可以使用代码来选择特定的文本段落。

第二步,打开字间距调整的功能菜单。

在DevExpress RichEdit中,我们可以通过右键单击选中的文本段落或者在编辑器的工具栏中找到相关的功能按钮来打开字间距调整的功能菜单。

在功能菜单中,我们可以找到字间距调整的选项。

第三步,设置适当的字间距数值。

在打开的功能菜单中,我们可以看到可以通过滑动条、数字输入框或者是输入具体数值的方式来设置字间距的数值。

通过调整这些数值,我们可以实时地预览字间距变化的效果。

第四步,应用字间距的调整。

在设置好适当的字间距数值后,我们可以点击菜单中的确认按钮或者按下键盘上的Enter键来应用字间距的调整。

此时,选择的文本段落的字间距将会立即改变。

在以上的步骤中,我们可以看到DevExpress RichEdit提供了非常直观和方便的方式来调整字间距。

无论是使用鼠标操作还是使用代码,我们都可以轻松地实现字间距的调整。

此外,值得一提的是,DevExpress RichEdit还提供了其他一些与字间距相关的功能。

devexpress richedit 字间距

devexpress richedit 字间距

devexpress richedit 字间距DevExpress RichEdit 字间距在编辑文档时,字间距是一种常见的排版技术,可以用来调整文字之间的水平间距。

DevExpress RichEdit是一款功能强大的文本编辑控件,能够满足各种排版需求,包括字间距的调整。

本文将详细介绍DevExpress RichEdit中字间距的使用方法和技巧。

一、什么是字间距?字间距指的是相邻文字之间的水平间距,用来调整字符之间的距离,以实现更好的排版效果。

可以通过增加或减小字间距来调整文字的紧凑程度,从而使得文本更加易读、美观。

二、DevExpress RichEdit如何设置字间距?在DevExpress RichEdit中,可以通过以下几个步骤来设置字间距:步骤一:打开RichEdit控件并选中要调整字间距的文本。

步骤二:在RichEdit的工具栏中,找到"字间距"按钮,点击它。

步骤三:弹出的字间距设置窗口中,可以通过拖动滑块或手动输入数值来改变字间距大小。

同时,还可以选择不同的单位,如磅、点或百分比等。

步骤四:调整完毕后,点击"确定"按钮,即可完成字间距的设置。

三、字间距的调整技巧除了基本的字间距设置外,DevExpress RichEdit还提供了一些高级的调整技巧,以满足更加复杂的排版需求。

下面介绍几个常用的技巧:1. 段落样式设置:可以通过设置段落样式来实现不同字间距之间的变化。

在RichEdit中,可以创建自定义的段落样式,并在其中设置不同的字间距值。

通过在不同段落间切换样式,即可实现不同字间距的效果。

2. 字符样式设置:与段落样式类似,还可以通过设置字符样式来实现不同字间距的改变。

可以在需要设置字间距的文字上选中,然后在RichEdit的字符样式设置中改变字间距的数值。

3. 动态调整:在某些情况下,可能需要动态调整字间距。

例如,在表格、图形或其他元素中插入文本时,可以根据需要自动调整字间距,以使得文本和其他元素更好地配合。

控件:Rich_Edit2.0使用方法

控件:Rich_Edit2.0使用方法

控件:Rich_Edit2.0使⽤⽅法资料:⼀:直接看Rich Edit 2.0的属性。

⼆:查看MSDN三:⽹络资料。

回答者VC_Edit_Control_VC中Edit Control控件的⽤法简介摘要:; } 1.设置edit只读属性⽅法⼀:m_edit1.SetReadOnly(TRUE); ⽅法⼆:::SendMessage(m _edit1.m_hWnd,EM_SETREADONLY, TRUE, 0); 2.判断edit中光标状态并得到选中内容(richedit同样适⽤); }1.设置[she zhi]edit只读[zhi du]属性[shu xing][zhi du shu xing]⽅法[fang fa]⼀:m_edit1.SetReadOnly(TRUE);⽅法[fang fa]⼆:::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);2.判断edit中光标[guang biao]状态[zhuang tai]并得到选中内容(richedit同样适⽤)int nStart, nEnd;CString strTemp;m_edit1.GetSel(nStart, nEnd);if(nStart == nEnd){strTemp.Format(_T(" 光标[guang biao]在%d" ), nStart);AfxMessageBox(strTemp);}else{//得到edit选中的内容m_edit1.GetWindowText(strTemp);strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);AfxMessageBox(strTemp);}注:GetSel后,如果nStart和nEnd,表明光标[guang biao]处于某个位置[wei zhi](直观来看就是光标[guang biao]在闪动);如果nStart和nEnd不相等,表明⽤户[yong hu]在edit中选中了⼀段内容。

RichEdit说明

RichEdit说明

RICH EDIT摘要:本文对Rich Edit控件底层消息机制进行了讲解,以期读者对Windows平台下的Rich Edit控件有一个更深入的认识,同时对于使用Win32 SDK进行开发的人员具有一定参考价值。

因为文章的初衷是引领VB程序员通过Win32 API调用来扩展VB下的Rich Edit控件的功能,所以对于每个消息的详细说明和注意事项未作过多说明,感兴趣的朋友可以参考Visual Studio下的MSDN Library。

关键字:Rich Edit Control、RTF、SDK、MSDN。

一、引言Rich Edit控件是一个可用于输入、编辑、格式化、打印和保存文本的窗体。

这些文本可以设置字符和段落格式,并且可以包含嵌入的COM对象。

Rich Edit控件提供格式化文本的编程接口。

不过,应用程序必须实现这些用户接口组件,以便用户可以进行格式化操作。

Rich Edit控件几乎支持所有用于多行Edit控件的消息和通知。

因此,已经使用了Edit控件的程序可以很容易的改为Rich Edit控件。

额外的消息和通知使得应用程序可以访问Rich Edit控件特有的功能。

获取更多关于Edit控件的信息,请参阅Edit Controls。

正如大家所熟知的,Windows控件是基础窗口,它处理那些控制窗口显示和特征的消息。

而ActiveX 控件是把那些消息变成属性和方法的COM 容器。

RichEdit Windows控件是Edit Windows控件的扩展集,TextBox ActiveX控件也是从它派生而来。

RichEdit能够识别Edit消息并且加入了自己特有的消息。

你可以在Win32帮助文件中认出Edit和RichEdit的消息常数,因为他们均采用EM_作为前缀。

ActiveX RichTextBox控件将绝大多数的这种消息映射为其属性。

例如,EM_LIMITTEXT与MaxLength属性相对应。

19第三十四课 RichEdit 控件 更多的正文操作

19第三十四课 RichEdit 控件 更多的正文操作

第三十四课: RichEdit 控件:更多的正文操作你将会了解到关于的RichEdit更多的正文操作。

特别是你将会学习到如何搜索/替换正文,定位到某一指定的行号。

例子.TheorySearching for TextRichEdit 控件具有几种正文操作,搜索指定正文就是其中的一种。

搜索正文是通过发送EM_FINDTEXT或者EM_FINDTEXTEX消息来完成的。

这两个消息有一点很小的不同点。

EM_FINDTEXTwParam == 搜索选项。

可以是下表中的任意组合值。

这些选项对EM_FINDTEXT和EM_FINDTEXTEX都是一样的。

FR_D OWN 如果指定了这个标志值,搜索操作从当前选定的end位置开始,直到控件中正文的end 位置结束(向下搜索)。

这个标志仅影响 RichEdit 2.0 和以后版本: 这个是 RichEdit 1.0 的缺省行为。

RichEdit 2.0 或以后版本的缺省行为是在当前选定正文内的从结尾搜索到开始位置(向前搜索)。

概括来说就是,如果你使用 RichEdit 1.0, 无论你做什么都没法影响搜索的方向:它总使用向后搜索。

但是如果你使用 RichEdit 2.0 而且你想使用向后搜索的话,你必须指定这个标志值,否则使用的是向前搜索了。

FR_MATCHCASE如果指定了这个标志值,搜索操作是大小写敏感的,即区分大小写。

FR_WHOLEWORD如果设置了这个标志值,搜索操作就搜寻匹配指定搜索串的整个词。

实际上,还有更多的标志值,但是它们都是跟非英语系正文操作相关的。

lParam == FINDTEXT结构的指针。

FINDTEXT STRUCTchrg CHARRANGE <>lpstrText DWORD ?FINDTEXT ENDSchrg是一个CHARRANGE结构,其定义如下:CHARRANGE STRUCTcpMin DWORD ?cpMax DWORD ?CHARRANGE ENDScpMin包含字符数组中第一个字符的字符索引。

【原创】【1】richeditor系列教程。前期准备,兼容

【原创】【1】richeditor系列教程。前期准备,兼容

【原创】【1】richeditor系列教程。

前期准备,兼容【1】前期准备,兼容 rich editor的原理⽆⾮是启⽤iframe的编辑模式或者div的contenteditable=true。

然后使⽤document.execcommand来编辑选取⽂本。

但会使⽤到selection操作和range。

查看api:,。

使⽤iframe作为编辑器的优势:独⽴的编辑document、不会与页⾯其他选择冲突,独⽴的redo undo操作。

缺点,如果页⾯设置了document.domain,⽽编辑模式中的js⽆法执⾏,会造成权限错误,有加载失败的可能。

使⽤div作为编辑器,轻量、加载不会失败、效率提升。

但不适⽤于重量级、多功能⽂本处理,同时selection、range、undo的与页⾯元素共有。

ie使⽤了跟w3c不⼀样的api,返回的结果类似,不兼容。

创建range对象:1var selection = ifrDoc.createRange ? ifrDoc.createRange() : ifrWin.getSelection();2var range = selection.createRange ? selection.createRange() : selection.getRangeAt(0) 同样,不同的浏览器对于回车按键的处理也不⼀致,ie浏览器会产⽣⼀个成对⼉的<p></p>标签,chrome为<div></div>,firefox根据版本为p或者br。

如何解决这个问题?将所有的换⾏设置为段落,或者设置为br firefox,使⽤命令insertBrOnReturn命令,最后参数为true,会产⽣br,为false则产⽣p标签document.execCommand("insertBrOnReturn",false,'true'); ie,默认的,产⽣成对的段落p标签(chrome为div标签,but,如果chrome中编辑器默认的元素为<p></p>,那么我⼤chrome则智能的把换⾏段落tag设置成了<p>) , 搜噶。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RICH EDIT 控件 SDK 参考手册摘要:本文对Rich Edit控件底层消息机制进行了讲解,以期读者对Windows平台下的Rich Edit控件有一个更深入的认识,同时对于使用Win32 SDK进行开发的人员具有一定参考价值。

因为文章的初衷是引领VB程序员通过Win32 API调用来扩展VB下的Rich Edit控件的功能,所以对于每个消息的详细说明和注意事项未作过多说明,感兴趣的朋友可以参考Visual Studio下的MSDN Library。

关键字:Rich Edit Control、RTF、SDK、MSDN。

一、引言Rich Edit控件是一个可用于输入、编辑、格式化、打印和保存文本的窗体。

这些文本可以设置字符和段落格式,并且可以包含嵌入的COM对象。

Rich Edit控件提供格式化文本的编程接口。

不过,应用程序必须实现这些用户接口组件,以便用户可以进行格式化操作。

Rich Edit控件几乎支持所有用于多行Edit控件的消息和通知。

因此,已经使用了Edit 控件的程序可以很容易的改为Rich Edit控件。

额外的消息和通知使得应用程序可以访问Rich Edit控件特有的功能。

获取更多关于Edit控件的信息,请参阅Edit Controls。

正如大家所熟知的,Windows控件是基础窗口,它处理那些控制窗口显示和特征的消息。

而ActiveX控件是把那些消息变成属性和方法的COM 容器。

RichEdit Windows控件是Edit Windows控件的扩展集,TextBox ActiveX控件也是从它派生而来。

RichEdit能够识别Edit 消息并且加入了自己特有的消息。

你可以在Win32帮助文件中认出Edit和RichEdit的消息常数,因为他们均采用EM_作为前缀。

ActiveX RichTextBox控件将绝大多数的这种消息映射为其属性。

例如,EM_LIMITTEXT与MaxLength属性相对应。

但是你同时会注意到一些感兴趣的消息并没有与之对应的RichTextBox属性。

为什么呢?ActiveX控件为最通用的特性提供方法和属性,更具体讲,是提供给VB设计者最感兴趣的特性。

设计者们似乎喜欢每个新版本里更多的特征。

例如,TextBox 和RichTextBox控件现在具备Locked属性。

在旧版本的VB中你不得不通过EM_SETREADONLY消息来模拟。

但是,还有许多其他隐藏的或者不是很明显的特性在ActiveX控件中尚未提供。

为了使用这些特性,我们就必须对Rich Edit控件的底层消息机制进行较深入的了解。

二、关于Rich Edit控件Rich Edit控件的最初规范为1.0版。

目前规范为2.0版。

(译者注:目前最新版本为4.1版本!)在创建一个Rich Edit控件之前,你应该调用LoadLibrary函数来确认安装的Rich Edit控件的版本。

下表显示了不同版本与其DLL间的对应关系。

Rich Edit 版本DLL名称版本号1.0RICHED32.DLL2.0RICHED20.DLL低于5.30.23.12003.0RICHED20.DLL5.30.23.1200或更高4.1Msftedit.dll下表给出了不同版本Windows下与其包含的不同版本的Rich Edit对应关系:Windows XP SP1包含 Rich Edit 4.1, Rich Edit 3.0, 和一个 Rich Edit 1.0 仿真程序。

Windows XP包含Rich Edit 3.0和一个 Rich Edit 1.0 仿真程序。

Windows Me包含Rich Edit 1.0和3.0。

Windows 2000包含Rich Edit 3.0和一个 Rich Edit 1.0 仿真程序。

Windows NT 4.0包含Rich Edit 1.0和2.0。

Windows 98包含Rich Edit 1.0和2.0。

Windows 95只包含Rich Edit 1.0。

不过,Riched20.DLL与Windows 95系统兼容,所以可以在正确安装后使用。

2.1 Rich Edit 2.0Rich Edit 2.0包含几个新特性,比如支持Unicode和远东语言,多级撤消,以及大量的增强用户接口。

Rich Edit 2.0采用与Rich Edit 1.0一致的Win32函数,结构和消息,极少例外。

他们的区别在于:Rich Edit 1.0窗体类的名字叫"RichEdit"。

Rich Edit 2.0同时具有ANSI和Unicode窗体类,"RichEdit20A"和"RichEdit20W"分别表示对应的Rich Edit窗体类,我们RichEdit.H 文件定义的RICHEDIT_CLASS常数来区分,而具体采用哪一个取决于UNICODE编译标志。

在Rich Edit 2.0中,如果你创建一个Unicode控件,只需在任何发往控件的Window消息中给出Unicode数据。

同样的,如果创建了一个ANSI控件,只能发送ANSI或者DBCS数据。

你可以使用IsWindowUnicode函数来判断是否一个Rich Edit控件是Unicode的。

Rich Edit 1.0 采用CRLF(回车符和换行符)字符组合表示段落符号。

而RichEdit 2.0只采用一个回车符号('\r')。

Rich Edit 2.0包含以下新的消息:消息描述EM_AUTOURLDETECT是否开启/关闭自动URL检测。

EM_CANREDO判断是否在Redo队列中有一些动作。

EM_GETIMECOMPMODE获取当前输入方式编辑(IME)模式。

EM_GETLANGOPTIONS获取IME和远东语言支持选项。

EM_GETREDONAME获取Redo队列中的下一动作的类型名称。

EM_GETTEXTMODE获取文本模式或者Undo级别。

EM_GETUNDONAME获取Undo队列中的下一动作的类型名称。

EM_REDO重做Redo队列中的下一动作。

EM_SETLANGOPTIONS设置IME和远东语言支持选项。

EM_SETTEXTMODE设置文本模式或者Undo级别。

EM_SETUNDOLIMIT设置Undo队列的最大动作数目。

EM_STOPGROUPTYPING终止当前Undo动作的连续键入动作的组合。

Rich Edit 2.0 包含以下新的结构:消息描述CHARFORMAT2包含字符格式信息。

PARAFORMAT2包含段落格式属性。

Rich Edit 2.0 不支持以下这些在亚洲语言版本的Rich Edit 1.0中支持的消息:EM_CONVPOSITIONEM_GETIMECOLOREM_GETIMEOPTIONSEM_GETPUNCTUATIONEM_GETWORDWRAPMODEEM_SETIMECOLOREM_SETIMEOPTIONSEM_SETPUNCTUATIONEM_SETWORDWRAPMODE2.2 创建 Rich Edit 控件可用通过CreateWindowEx函数中指定Rich Edit 窗体类来创建一个Rich Edit控件。

如果使用1.0版本(RICHED32.DLL),窗体类参数应该为"RichEdit"。

如果采用2.0版本(RICHED20.DLL),窗体类参数应该为"RICHEDIT_CLASS"。

Rich Edit控件支持大部分的Edit控件采用的窗体样式,同时也支持一些额外的样式。

你如果希望控件中的文本支持不止一行的话就应该给出ES_MULTILINE窗体样式。

2.3 文本格式应用程序可以通过给Rich Edit控件发送消息来格式化字符和段落以及获取这些格式化信息。

段落格式属性包含对齐、跳格、缩进和编号。

对字符而言,你可以指定字体、尺寸、颜色以及如粗体、斜体和保护等效果。

你可以采用EM_SETPARAFORMAT消息来应用段落格式。

获取当前选中文本的段落格式属性,则采用EM_GETPARAFORMAT消息。

PARAFORMAT结构将会在这两个消息中用到,它用于描述段落格式属性。

你可以采用EM_SETCHARFORMAT消息来应用字符格式。

获取当前选中文本的字符格式属性,则采用EM_GETCHARFORMAT消息。

CHARFORMAT结构将会在这两个消息中用到,它用于描述字符格式属性。

你也可以采用EM_SETCHARFORMAT和EM_GETCHARFORMAT消息来设置和获取默认字体格式,它将应用于所有随后插入的字符。

例如,应用程序将默认字符格式设置为粗体,则用户随后敲入的字符都将为粗体。

只有在当前选择内容为空的时候默认字符格式才会被应用到新插入的文本上。

否则,新的文本将假定沿用其所替换的文本的格式。

如果选择内容改变,则默认字体格式将将采用该内容的首字符的格式。

保护(Protected)字符效果是唯一不改变其文本显示的例子。

如果用户试图修改保护文本,Rich Edit控件将发送EN_PROTECTED通知到其父窗口,让其父窗体决定是否允许或者拒绝修改。

为了接收该通知,你必须使用EM_SETEVENTMASK消息来启用它。

前景色是一个字符属性,但是背景色是一个Rich Text控件属性。

要设置背景色,请采用EM_SETBKGNDCOLOR消息。

2.4 Rich Edit控件中的当前选择内容用户可以在Rich Edit控件中通过鼠标和键盘来选择文本。

当前选择内容指的是选中字符的范围,或者表示没有字符选中时的插入点位置。

应用程序可以获取选中内容的相关信息,设置当前选中内容,决定当前选中内容何时改变,显示或者隐藏当前高亮显示的选中内容等。

确定Rich Edit控件中的当前选中内容,采用EM_EXGETSEL消息。

设置当前选择区域,采用EM_EXSETSEL消息。

CHARRANGE结构用于在这两个消息中描述字符范围。

获取当前选中内容的相关信息,你可以采用EM_SELECTIONTYPE消息。

应用程序可以通过处理EN_SELCHANGE通知来检测当前选中内容何时被改变。

该通知通过SELCHANGE结构给出新选中内容的相关信息。

Rich Edit控件只有在你通过EM_SETEVENTMASK 消息开启它之后才会发送该通知。

默认情况下,Rich Edit控件在获取和失去焦点时将开启和隐藏选中文本的高亮显示。

你可以通过EM_HIDESELECTION消息在任何时候开启或者隐藏选中区域的高亮显示。

例如,某个应用程序可能提供一个查找对话框用于在Rich Edit控件中查找文本,这种情况下就必须使用EM_HIDESELECTION消息来保持选中文本的高亮显示。

相关文档
最新文档