聊天程序通过编译,但是运行.exe的出现list index out of bounds(2),麻烦高手帮忙解决下 谢谢哦

guqian1984 2006-06-15 12:08:06
服务器端:
//---------------------------------------------------------------------------
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Menus.hpp>
#include <ScktComp.hpp>
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TButton *BtnToAll;
TLabel *Label1;
TLabel *Label3;
TEdit *EdtSend;
TListBox *ListUserAddr;
TListBox *ListUserName;
TStatusBar *StatusBar1;
TServerSocket *ServerSocket1;
TMenuItem *MenuListen;
TMenuItem *MenuClose;
TMenuItem *MenuDisConnect;
TLabel *LabelNotice;
TLabel *Label2;
void __fastcall ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket);
//void __fastcall EdtSendChange(TObject *Sender);
void __fastcall ListUserNameClick(TObject *Sender);
void __fastcall BtnToAllClick(TObject *Sender);
void __fastcall MenuListenClick(TObject *Sender);
void __fastcall ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ServerSocket1ClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
int &ErrorCode);
void __fastcall EdtSendKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift);
void __fastcall MenuDisConnectClick(TObject *Sender);
void __fastcall MenuCloseClick(TObject *Sender);
void __fastcall ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket);
private: // User declarations
int m_iClientNum; //连接的客户机的数量
AnsiString m_sIsName; //用户的姓名
AnsiString m_sIsChat; //对话内容
AnsiString m_sIsCommand;//命令
AnsiString m_sPart; //分隔标志与具体内容
AnsiString m_sTo; //选择的对象
void __fastcall AppException(TObject *Sender,Exception *E); //自定义函数,处理程序异常
public: // User declarations
__fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
//当程序发生异常的时候将显示出现的错误
void __fastcall TMainForm::AppException(TObject *Sender,Exception *E)
{
Application->ShowException(E);
Application->Terminate();
}
//---------------------------------------------------------------------------
//对程序中的各主要成员变量进行初始化
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
ServerSocket1->Port=50;
ServerSocket1->Active=true;
m_iClientNum=0;
m_sIsName="NA";
m_sIsChat="CT";
m_sPart="#";
m_sIsCommand="CO";
m_sTo="ALL";
MenuListen->Enabled=false;
MenuClose->Enabled=true;
Application->OnException=AppException;
TDateTime NowTime;
NowTime=Now();
StatusBar1->Panels->Items[2]->Text=NowTime.DateTimeString();
}
...全文
919 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iec 2006-06-23
  • 打赏
  • 举报
回复
数组越界了
痞子酷 2006-06-21
  • 打赏
  • 举报
回复
删除时,ItemIndex最好赋值-1
痞子酷 2006-06-21
  • 打赏
  • 举报
回复
主要原因出现在 ListBox这个控件上,对改控件操作是,注意先BEGIN,再动作(删除、新增),最后END
HelloBear188 2006-06-20
  • 打赏
  • 举报
回复
既然代码都贴出来了,不如把代码打个包给大家给你调试修改修改也许会更好些!
雪狼__ 2006-06-20
  • 打赏
  • 举报
回复
搜索一下Strings,看到Strings[n]中n大于count的就改正;
guqian1984 2006-06-15
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
//当客户机处于连接过程中时在状态栏中显示正在连接的提示
void __fastcall TMainForm::ClientSocket1Connecting(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->Panels->Items[1]->Text="正在连接,请稍后...";
}
//---------------------------------------------------------------------------
//当选择"connect"菜单项时,输入用户名与服务器端连接
void __fastcall TMainForm::MenuConnectClick(TObject *Sender)
{
InputQuery("请输入您的用户名","用户名:",m_sName);
if(m_sName.IsEmpty())
{
ShowMessage("您以无名氏登录");
m_sName="无名氏";
}
if(ClientSocket1->Active==false)
ClientSocket1->Open();
}
//---------------------------------------------------------------------------
//当客户接通时在状态栏中显示接通的提示
void __fastcall TMainForm::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
Socket->SendText(m_sIsName+m_sName);
AnsiString sTemp;
sTemp.sprintf("%s登录成功!",m_sName);
StatusBar1->Panels->Items[1]->Text=sTemp;
LabelNotice->Caption=m_sName+AnsiString("对所有人说...");
m_HasConnected=true;
}
//---------------------------------------------------------------------------
/*当服务器端有数据写入时,如果是清除命令,清除用户列表框;如果是新用户加入的信息,则在
用户列表框中加入新用户;如果是对话内容,则显示出来*/
void __fastcall TMainForm::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString sInfo;
AnsiString sType;
AnsiString sChat;
sInfo=Socket->ReceiveText();
sType=sInfo.SubString(1,2);
if(sInfo==AnsiString("CLEAR"))
ListUser->Items->Clear();
else
{
if(sType!=m_sIsChat)
{
if(sInfo!=m_sIsName)
LabelNotice->Caption="喂!新朋友来了!";
ListUser->Items->Add(sInfo);
}
else
{
sChat=sInfo.SubString(4,sInfo.Length()-3);
MemoReceive->Lines->Add(sChat);
}
}
}
//---------------------------------------------------------------------------
//当客户端Socket发生错误时将错误码设置为零
void __fastcall TMainForm::ClinetSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode=0;
}
//---------------------------------------------------------------------------
//当在用户列表框中单击时,选择要与之交谈的用户
void __fastcall TMainForm::ListUserClick(TObject *Sender)
{
if(m_HasConnected)
{
AnsiString sTemp;
if(m_sName==ListUser->Items->Strings[ListUser->ItemIndex])
{
LabelNotice->Caption="请不要和自己说话!";
}
else
{
sTemp.sprintf("%s对%s说...",m_sName,
ListUser->Items->Strings[ListUser->ItemIndex]);
m_sSpeakTo=ListUser->Items->Strings[ListUser->ItemIndex];
LabelNotice->Caption=sTemp;
}
}
else
{
ShowMessage("对不起!请先登录!");
}
}
//---------------------------------------------------------------------------
//当在发送信息框中按键时,如果按下的是Enter键,则向服务器发送信息
void __fastcall TMainForm::EdtSendKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_RETURN)
{
AnsiString sTemp;
sTemp=m_sIsChat+m_sSpeakTo+m_sPart+EdtSend->Text;
sTemp+=AnsiString("(")+m_sName+AnsiString("say:)");
ClientSocket1->Socket->SendText(sTemp);
EdtSend->Clear();
Key=0;
}
}
//---------------------------------------------------------------------------
//当单击"BtnToAll"按钮,表示与所有人进行交谈
void __fastcall TMainForm::BtnToAllClick(TObject *Sender)
{
if(m_HasConnected)
{
AnsiString sTemp;
m_sSpeakTo="ALL";
sTemp.sprintf("%s对%s说...",m_sName,"所有人");
LabelNotice->Caption=sTemp;
}
else
{
ShowMessage("对不起,请先登录!");
}
}
//---------------------------------------------------------------------------
//当客户机端断开时,在状态栏中显示断开连接的提示
void __fastcall TMainForm::ClientSocket1Disconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->Panels->Items[1]->Text="服务器已经断开了连接!";
ListUser->Items->Clear();
LabelNotice->Caption="呜呜:o 被断开了!";
m_HasConnected=false;
MemoReceive->Clear();
}
//---------------------------------------------------------------------------
//当选择"MenuDisconnect"菜单项时,关闭ClientSocket
void __fastcall TMainForm::MenuDisConnectClick(TObject *Sender)
{
if(ClientSocket1->Socket->Connected)
ClientSocket1->Socket->Close();
}
//---------------------------------------------------------------------------
//当选择"MenuSet"菜单项时,设置服务器的IP地址
void __fastcall TMainForm::MenuSetClient(TObject *Sender)
{
AnsiString sIp;
InputQuery("输入框","输入服务器的IP",sIp);
if(!sIp.IsEmpty())
{
m_sHostAddress=sIp;
ClientSocket1->Address=m_sHostAddress;
}
}
//---------------------------------------------------------------------------
第一次用C++ Bulider 完成我的课程设计...在编译通过后 生成.exe文件的时候 运行时出现list index out of bounds(2)
有很多不懂的地方 希望高手能给予指点..谢谢
guqian1984 2006-06-15
  • 打赏
  • 举报
回复
客户端:
//---------------------------------------------------------------------------
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Menus.hpp>
#include <ScktComp.hpp>
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
TMemo *MemoReceive;
TMainMenu *MainMenu1;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *LabelNotice;
TListBox *ListUser;
TEdit *EdtSend;
TStatusBar *StatusBar1;
TButton *BtnToAll;
TClientSocket *ClientSocket1;
TMenuItem *MenuSet;
TMenuItem *MenuConnect;
TMenuItem *MenuDisConnect;
void __fastcall ClientSocket1Connecting(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall MenuConnectClick(TObject *Sender);
void __fastcall ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ClinetSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
int &ErrorCode);
void __fastcall ListUserClick(TObject *Sender);
void __fastcall EdtSendKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift);
void __fastcall BtnToAllClick(TObject *Sender);
void __fastcall ClientSocket1Disconnect(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall MenuSetClient(TObject *Sender);
void __fastcall MenuDisConnectClick(TObject *Sender);
void __fastcall ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket);
private: // User declarations
BOOL m_HasConnected;//表示是否与服务器相连通,true表示已经连接成功
AnsiString m_sHostAddress;//表示主机地址
AnsiString m_sName;//表示新加入的成员的姓名
AnsiString m_sIsChat;//表示发送的是对话内容
AnsiString m_sSpeakTo;//表示想要交谈的对象
AnsiString m_sPart;//用于分隔标志与具体的内容
AnsiString m_sSendInfo;//表示发送的信息
AnsiString m_sIsName;//表示发送的是用户的姓名
public: // User declarations
__fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
//在主窗体的构造函数中对成员变量进行初始化
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
m_sHostAddress="172.16.82.199";
ClientSocket1->Active=false;
ClientSocket1->Address=m_sHostAddress;
ClientSocket1->Port=50;
m_sSpeakTo="ALL";
m_sIsName="NA";
m_sIsChat="CT";
m_sPart="#";
m_HasConnected=false;
TDateTime NowTime;
NowTime=Now();
StatusBar1->Panels->Items[2]->Text=NowTime.DateTimeString();
}
guqian1984 2006-06-15
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
/*当服务器建立了一个与客户机的连接时,在状态栏上显示连接成功的提示,
将当前客户机的总数加1,由服务器向当前所有客户机发送刚刚连接成功的客户机的信息*/
void __fastcall TMainForm::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString sClientNum;
m_iClientNum++;
sClientNum.sprintf("有%台用户连接",ServerSocket1->Socket->ActiveConnections);
StatusBar1->Panels->Items[1]->Text="连接成功!";
StatusBar1->Panels->Items[0]->Text=sClientNum;
ListUserAddr->Items->Add(Socket->RemoteAddress);
for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
ServerSocket1->Socket->Connections[i]->SendText("CLEAR");
Sleep(90);
}
//---------------------------------------------------------------------------
/*当客户机端有数据传输过来时,首先判断是否是刚刚登陆,
如果是,则将用户名加入服务器端的用户名列表中,
如果是发送对话内容,则将内存转给该客户机想要发送给的用户*/
void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString sTemp;
AnsiString sPre;
AnsiString sWelcome;
sTemp=Socket->ReceiveText();
sPre=sTemp.SubString(1,2);
if(sPre==m_sIsName)
{
AnsiString sName;
sName=sTemp.SubString(3,sTemp.Length()-2);
ListUserName->Items->Add(sName);
for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
{
for(int j=0;j<ListUserName->Items->Count;j++)
{
AnsiString sName;
sName=ListUserName->Items->Strings[j];
ServerSocket1->Socket->Connections[i]->SendText(sName);
Sleep(9);
}
sWelcome=m_sIsChat+m_sPart;
sWelcome+=AnsiString("大家欢迎(")+sName+AnsiString("):)的光临!(服务器说:)");
ServerSocket1->Socket->Connections[i]->SendText(sWelcome);
}
}
if(sPre==m_sIsChat)
{
AnsiString sTo,sChat;
int iPos;
iPos=sTemp.Pos(m_sPart);
sTo=sTemp.SubString(3,iPos-3);
sChat=m_sIsChat+sTemp.SubString(iPos,sTemp.Length()-iPos+1);
if(sTo==AnsiString("All"))
for(int i=0;i<ServerSocket1->Socket->ActiveConnections;
i++)
ServerSocket1->Socket->Connections[i]->SendText(sChat);
if(sTo!=AnsiString("All"))
{
int iIndex=ListUserName->Items->IndexOf(sTo);
ServerSocket1->Socket->Connections[iIndex]->
SendText(sChat);
}
}
}
//---------------------------------------------------------------------------
/*当客户机端断开时在状态栏上显示断开连接的信息,
同时在服务器端的成员列表中删除刚刚断开的用户*/
void __fastcall TMainForm::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString sTemp;
sTemp.sprintf("%s断开连接!",Socket->RemoteAddress);
StatusBar1->Panels->Items[1]->Text=sTemp;
int iIndex;
iIndex=ListUserAddr->Items->IndexOf(Socket->RemoteAddress),
ListUserAddr->Items->Delete(iIndex);
ListUserName->Items->Delete(iIndex);
}
//---------------------------------------------------------------------------
//当Socket发生异常时执行以下代码:
void __fastcall TMainForm::ServerSocket1ClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode=0;
}
//---------------------------------------------------------------------------
// 当在EdtSend编辑框中按键时判断是否按下Enter键,如果是,则发送信息
void __fastcall TMainForm::EdtSendKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_RETURN)
{
AnsiString sTemp;
sTemp=m_sIsChat+m_sPart+EdtSend->Text+AnsiString("(服务器说:)");
if(m_sTo==AnsiString("All"))
for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
ServerSocket1->Socket->Connections[i]->SendText(sTemp);
if(m_sTo!=AnsiString("All"))
{
int iIndex=ListUserName->Items->IndexOf(m_sTo);
ServerSocket1->Socket->Connections[iIndex]->SendText(sTemp);
}
EdtSend->Clear();
}
}
//---------------------------------------------------------------------------
//当在表框中单击时将显示要与之对话的成员
void __fastcall TMainForm::ListUserNameClick(TObject *Sender)
{
m_sTo=ListUserName->Items->Strings[ListUserName->ItemIndex];
LabelNotice->Caption=AnsiString("向")+m_sTo+AnsiString("发信息!");
}
//---------------------------------------------------------------------------
//当单击"BtnToAll"按钮时表示将向所有人说话
void __fastcall TMainForm::BtnToAllClick(TObject *Sender)
{
m_sTo="ALL";
LabelNotice->Caption="向所有人发信息";
}
//---------------------------------------------------------------------------
//当选择"MenuDisConnect"菜单项时断开连接
void __fastcall TMainForm::MenuDisConnectClick(TObject *Sender)
{
if(m_sTo=="ALL")
{
AnsiString sTemp;
sTemp.sprintf("真的要断开与%s的连接吗?","所有人");
if(MessageDlg(sTemp,mtConfirmation,
TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes)
for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
ServerSocket1->Socket->Connections[i]->Close();
}
if(m_sTo!="ALL")
{
AnsiString sTemp;
sTemp.sprintf("真的要断开与%s的连接吗?",m_sTo);
if(MessageDlg(sTemp,mtConfirmation,
TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes)
{
int iIndex=ListUserName->Items->IndexOf(m_sTo);
ServerSocket1->Socket->Connections[iIndex]->Close();
}
}
}

//---------------------------------------------------------------------------
//当选择"MenuClose"菜单项时关闭ServerSocket
void __fastcall TMainForm::MenuCloseClick(TObject *Sender)
{
if(ServerSocket1->Active)
ServerSocket1->Close();
MenuListen->Enabled=true;
MenuClose->Enabled=false;
}
//---------------------------------------------------------------------------
//当选择"MenuListen"菜单项时打开ServerSocket并处于监听状态
void __fastcall TMainForm::MenuListenClick(TObject *Sender)
{
if(!ServerSocket1->Active)
ServerSocket1->Open();
MenuListen->Enabled=false;
MenuClose->Enabled=true;
}
//---------------------------------------------------------------------------
pp616 2006-06-15
  • 打赏
  • 举报
回复
在你使用Items->Strings[n]的时候先判一下n是否大雨ListBox的Count
guqian1984 2006-06-15
  • 打赏
  • 举报
回复
唉 对不起 我实在是不会... 能不能告诉我 在哪个地方加什么代码...麻烦各位高手了
weixing979 2006-06-15
  • 打赏
  • 举报
回复
怎么都粘出来了,看看
m_sTo=ListUserName->Items->Strings[ListUserName->ItemIndex];
类似这种代码,操作前先判断 ListBox的ItemIndex 是否是 -1
SynEditStudio更新 ---------- v3.0(2005.09.10 beta2.00) ---------- - 01.TSynManager,修正会出现'Cannot assign a TSynHighlighterItem to a TSynHighlighterItem'的错误; - 02.TSynEdit,增加属性ScrollBarsStyle,以支持显示各种样式的滚动条; - 03.TSynEdit,修正滚动滚动条时会显示错乱的BUG; - 04.TSynEdit,增加进最新版本的一些元素; - 05.TSynEdit,修正一些会导致内存读取错误的BUG; - 06.TSynEditSource,增加一些相应的属性; - 07.TSynOptionsForm,更新选项对话框; - 08.TSynUniSyn,更新至最新的版本,汉化并修正了UniEdit(源码位置HighlightersUni Syntax Editor); - 09.TaSynToggleHighlighter,增加一个Action,用来切换高亮显示语法; - 10.增加拼写检查的字典在Dictionary目录下; - 11.TSynEditPrint,修正了在换行打印时会出现'List index out of bounds -1'和不支持双字节的BUG; - 12.TSynEdit,修正了光标大小以行间距作为基准而不是以字符高度作为基准的BUG; - 13.TSynEdit,修正在使用了高亮控件后若是行最后一个可显字符是双字节前半部分时会变成小方框的BUG; - 14.TSynEdit,增加ExpandLines属性,返回为引用为TSynEditStringList的Lines; - 15.TSynEditStringList,增加DeleteBlankLineAtEOF(默认为True)属性,当为True时会在载入文件时删除文件最后所有空白行; ---------- ---------- v2.6(2005.09.05) ---------- - 01.TSynManager,修正若DefaultSource为nil会出错的BUG; - 02.TSynEditor,修正了自定义命令处理错误的BUG; - 03.TSynEdit,修正了在快速移动光标时会出现延迟的BUG; - 04.TSynEdit,重新改写了高亮显示当前行的代码; - 05.TSynCustomHighlighter,增加了一个过程CanHighlighter; - 06.SynEditActions,重新修改Highlighter的管理,支持所有继承于TSynCustomHighlighter的Highlighter; - 07.重新整理安装包,只需安装SynEdit_DX(X是你用的Delphi版本).dpk; ---------- ---------- v2.5(2005.08.29) ---------- - 01.TSynEdit,增加运行时可以用鼠标移动右边线的功能; - 02.SynEditActions,修正若干小处的BUG,增加TaSynOptionsSetting(Action); - 03.SynOptionsDlg,增加一个选项对话框; - 04.SynEdiSource,增加Assign函数对TSynEdiSource的支持; ---------- ---------- v2.4(2005.07.29) ---------- - 01.对所有非Delphi6的包去掉SynSpellCheck的注册; - 02.TSynEdit,再次轻微修改一些BUG; - 03.修改Demo,增加类似于IDE的代码补充的功能; ---------- ---------- v2.3(2005.06.25) ---------- - 01.TSynEdit,再次修改了缓冲技术的代码和删除了用API锁定的画面; - 02.TSynEdit,修正了控件自动换行后使用书签时会出面的异常; ---------- ---------- v2.2(2005.06.8) ---------- - 01.SynEditActions,修正若是Action放在工具条上时会不断的闪烁的Bug; - 02.TSynEdit,修正了控件出现'has no parent window'异常的可能,未经测试; ---------- ---------- v2.1(2005.06.1) ---------- - 01.TSynEdit,修改滚动条不现示的BUG; - 02.TSynEdit,修改控件可能会出现错误的异常; - 03.SynEditActions,基本完成,更新注册,并重做了个Demo; ---------- ---------- v1.2(2005.05.29) ---------- - 01.TSynEdit,稍稍修改使用缓冲技术后可能出现的异常; - 02.SynEditActions,一个包含各种synedit动作的单元,目前只提供测试,没有注册单元; ---------- ---------- v1.1(2005.05.23) ---------- - 01.SynSpellReg,修正了这个单元注册时会找不到dcr文件的错误; - 02.TSynEdit,修正了按END键到下一行开头等其它键类似的定位错误; - 03.TSynEdit,修正了快速录入大量文本闪烁问题,使用缓冲技术和API锁定; ---------- ---------- v1.0(2005.05.20) ---------- - 01.TSynAutoCorrect,改正控件原先不支持中文输入的特点; - 02.TSynEdit,增加一个属性ActiveLine,类属性,具体参考TSynActiveLine; - 03.TSynEdit,增加一个属性LineDivider,类属性,具体参考TSynLineDivider; - 04.TSynEdit,增加一个属性WordWrap,类属性,具体参考TSynWordWrap; - 05.TSynEdit,增加一个属性RightEdge,类属性,具体参考TSynRightEdge; - 06.TSynEdit,修改高亮当前行的方式,在自动换行的情况也只高亮一行; - 07.TSynEdit,当行间距大于零时,原本文本会显示于靠上,现修改于垂直中间对齐; - 08.TSynEdit,增加一个属性LineSpacing,可指定行间距; - 09.TSynEdit,增加一个属性LineSpacingRule,可指定行间距类型; - 10.TSynEdit,修正当控件是在一个子窗口上时,若是焦点转回到主窗口中某个控件后再转回来时会不能显示光标的BUG; - 11.TSynEdit,修正当第一列显示的字符是双字节字符的第二个字节时,在高亮当前行情况下会把第一个字节显示在行号区上的BUG; - 12.TSynEdit,修正了DoCaseChange,加快转换字母大小写的处理速度和精简代码,也避免出现一些双字节字符的丢失; - 13.TSynEdit,修正画右边线的代码,避免有时右边线颜色显示出错; - 14.TSynEdit,修正了改变属性TEXT后不能UNDO的特性; - 15.TSynEditSource,新添加的自己写的控件,用于存储Synedit的属性,详细请查看单元SynEditSource; - 16.TSynEditSearcher,新添加的自己写的类,用于简化Synedit搜索,详细请查看单元SynEditSearcher; - 17.TSynUniSyn,新添加的修改过的第三方控件,一个通用的Highlighter,详细请查看单元SynUniHighlighter; - 18.TSynSpellCheck,新添加的第三方控件,一个拼写检查控件,详细请查看单元SynSpellCheck; - 19.TSynEditor,新增加的TSynEdit的继承控件,增加对编辑文档管理的支持和一些增强型功能 - 20.SynMsgDialog,一个消息框单元,参照Dialogs中MessageDlg的代码进行改进并重写; - 21.SynEditStrRes,一个字符串常量声明单元,存储增加的自定义的控件中用到的字符串; ---------- ---------- 编译环境 ---------- - 系统 - Windows2000 (Build 2195: Service Pack 3) - 工具 - Borland Delphi 6 (Build 6.240) Update Pack 2 - 无错编译通过,并测试正常. ----------

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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