当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++ Builder教程

C++ Builder 初学问与答(五)

38)问:事件OnChange和OnScorll都可以描述滚动条的滚动事件,他们有什么区别吗?

  答:事件OnChange和OnScorll是有区别的。只要属性Position的值发生改变,那么无论这个值是用户操作滚动条引起的还是通过程序修改的,都会产生OnChange事件。而OnScorll事件只有在用户操作滚动条时才发生。当用户操作滚动条时,首先发生OnScorll事件,然后OnChange事件才会发生。

  下面我们共同看一个程序来加深对滚动条的理解。

  在窗体上放置一个水平滚动条ScrollBar1和一个垂直滚动条ScrollBar2,以及一个记录滚动条事件的Memo组件。当用户操作滚动条时,在Memo组件中就会显示发生的事件。

  选择Memo组件,把它的ScrollBars属性设置为ssVertical。

  选择水平滚动条组件,双击OnScroll的Value域,系统将生成事件处理模板,输入这样一段代码。

 


void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,

      TScrollCode ScrollCode, int &ScrollPos)

{

AnsiString temp;

if(Sender==ScrollBar2)

temp=\"垂直滚动条的\";

else

temp=\"水平滚动条的\";

switch(ScrollCode)

{

       case scLineUp:temp+=\"scLineUp\";break;

       case scLineDown:temp+=\"scLineDown\";break;

       case scPageUp:temp+=\"scPageUp\";break;

       case scPageDown:temp+=\"scPageDown\";break;

       case scPosition:temp+=\"scPosition\";break;

       case scTrack:temp+=\"scTrack\";break;

       case scTop:temp+=\"scTop\";break;

       case scBottom:temp+=\"scBottom\";break;

       case scEndScroll:temp+=\"scEndScroll\";break;

     default:

temp+=\"未知\";break;

}

Memo1->Lines->Append(temp+\"事件\");
}

 

 

 


       第一条语句声明一个AnsiString类型的变量,用来存放将要显示的字符串。

       第二条语句判断发送事件的对象,如果是垂直滚动条,将temp初始化为 “垂直滚动条的”,否则初始化为 “水平滚动条的”。

       第三条语句根据ScrollCode的值,显示相应的事件。

       最后一条语句将要显示的字符串加到文本框的末尾。

 

  在窗体中选择垂直滚动条组件,选择Events标签,单击OnScroll的Value域,从下拉列表框中选择ScrollBar1Scroll事件处理程序。这样,垂直滚动条和水平滚动条将共用一个事件处理程序。

  选择水平滚动条组件,选择Events标签,双击OnChange域,然后输入:

  Memo1->Lines->Append(\"水平滚动条的OnChange事件\");

  它将在文本框后面显示水平滚动条改变的信息。

  类似的,给垂直滚动条的OnChange事件加上如下代码:

Memo1->Lines->Append(\"垂直滚动条的OnChange事件\");

  详细代码如下:

 


//--------------------------------------------

#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::ScrollBar1Scroll(TObject *Sender,

      TScrollCode ScrollCode, int &ScrollPos)

{

         AnsiString temp;

if(Sender==ScrollBar2)

temp=\"垂直滚动条的\";

else

temp=\"水平滚动条的\";

switch(ScrollCode)

{

       case scLineUp:temp+=\"scLineUp\";break;

       case scLineDown:temp+=\"scLineDown\";break;

       case scPageUp:temp+=\"scPageUp\";break;

       case scPageDown:temp+=\"scPageDown\";break;

       case scPosition:temp+=\"scPosition\";break;

       case scTrack:temp+=\"scTrack\";break;

       case scTop:temp+=\"scTop\";break;

       case scBottom:temp+=\"scBottom\";break;

       case scEndScroll:temp+=\"scEndScroll\";break;

     default:

temp+=\"未知\";break;

}

Memo1->Lines->Append(temp+\"事件\");

}

 

 

 


//--------------------------------------------

 

void __fastcall TForm1::ScrollBar1Change(TObject *Sender)

{

       Memo1->Lines->Append(\"水平滚动条的OnChange事件\");

}

//--------------------------------------------

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接