TMemo的问题,急

andypzh 2006-07-26 06:30:44
我想实现下面的效果,左边是用来显示行号,右边是TMemo,我在TMemo增加、复制、剪切或删除行时,左边能相应的增加或减少行号。请考虑wordwrap为true和false 2种不同的情况
左边可以用label或tmemo或其他控件

1 这是第一行
2 这是第二行
3 这是第三行
4 这是第四行
5 这是第五行
6 增加了第六行
...全文
366 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
andypzh 2006-07-31
  • 打赏
  • 举报
回复
要动态的显示行号的,光判断以下Memo里的Text值有多少个换行符不行吧。还有好的主意吗?
truelove7283159 2006-07-31
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewMemo1WndProc(TMessage &Message)
{
OldMemo1WndProc(Message);
if(Message.Msg==WM_VSCROLL || Message.Msg == WM_MOUSEWHEEL)
{
int iVPos1=GetScrollPos(Memo1->Handle, SB_VERT);
int iVPos2=GetScrollPos(Memo2->Handle, SB_VERT);
if(iVPos1!=iVPos2)
{
Memo2->Perform(Message.Msg, Message.WParam, Message.LParam);
}
}
}
void __fastcall TForm1::NewMemo2WndProc(TMessage &Message)
{
OldMemo2WndProc(Message);
if(Message.Msg==WM_VSCROLL || Message.Msg == WM_MOUSEWHEEL)
{
int iVPos1=GetScrollPos(Memo1->Handle, SB_VERT);
int iVPos2=GetScrollPos(Memo2->Handle, SB_VERT);
if(iVPos1!=iVPos2)
{
Memo1->Perform(Message.Msg, Message.WParam, Message.LParam);
}
}

}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString szText="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
for(int i=0; i<50; i++)
{
Memo1->Lines->Add(IntToStr(i)+" - "+szText);
Memo2->Lines->Add(IntToStr(i)+" - "+szText);
Application->ProcessMessages();
}


OldMemo1WndProc=Memo1->WindowProc;
Memo1->WindowProc=NewMemo1WndProc;
OldMemo2WndProc=Memo2->WindowProc;
Memo2->WindowProc=NewMemo2WndProc;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo2->Text = Memo1->Text;
}
//---------------------------------------------------------------------------
YJS050320001 2006-07-28
  • 打赏
  • 举报
回复
真的 用TMemo还是不太好实现
你可以去判断以下Memo里的Text值有多少个换行符
从而实现你说的那种功能
jaffy 2006-07-27
  • 打赏
  • 举报
回复
当右边滚动的时候,直接发消息给左边的控件,让左边的控件直接处理就可以了
andypzh 2006-07-27
  • 打赏
  • 举报
回复
右边只能用TMEMO,左边无所谓,现在行号能出来了,问题右边的TMEMO有垂直滚动条,(左边没有),当右边滚动滚动条时,左边要动态的显示行号,这个问题怎么解决,麻烦各位大大了,3Q
lanlanq 2006-07-27
  • 打赏
  • 举报
回复
老大们都在,学习学习
cczlp 2006-07-27
  • 打赏
  • 举报
回复
用TRichEdit。行号自己画上去。
BlueDeepOcean 2006-07-27
  • 打赏
  • 举报
回复
类似于UltraEdit-32环境的风格,这种情况我以前做过,好麻烦的,而且利用Memo好像不比RichEdit简单。
andypzh 2006-07-27
  • 打赏
  • 举报
回复
消息接收不到阿,能给个例子吗?3Q
xiaoshi0 2006-07-26
  • 打赏
  • 举报
回复
可以放一个Readonly的TMemo在左边,然后根据右边的KeyPress函数中查看右边的行数,动态的添加上就可以了

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧