zoukankan      html  css  js  c++  java
  • C++Builder使用经验谈(上)

    原文地址:http://c.chinaitlab.com/ccjq/874278_4.html

     C++Builder3.0的问世,对广大爱好C语言的用户来说不啻是个福音。因为以往在Windows下,没有一种真正基于C语言的可视化编程语言。你如果想用VB或Delphi这一类可视化编程语言去编程,你就不得不去重温一遍Basic或Pascal语言,没有了像C语言一样可以灵活应用的指针,没有了"++"、"――"这样一类可爱的运算,总之一切使用起来都不如C语言一样得心应手。现在这一切烦恼都不复存在了。C++Builder3.0不仅支持传统的C语言,也支持Borland的OWL和Microsoft的MFC.可以这样说,C++Builder3.0是目前Windows下功能最为强大的C语言编译器。下面结合笔者的使用情况,谈谈几点经验、体会。

        
        一、动态调用窗体Form
        
        在缺省情况下,由File/NewForm生成添加入项目文件中的窗体都具有"AutoCreate"(自动创建)的特性。即只要程序运行,该窗体就存在于内存中了,不管当前它是否被调用。具有这种特性的窗体一般适用于窗体属性比较固定、经常被调用的情况。其优点是速度快,缺点是占用内存。
        
        在实际程序设计中,会遇见大量类似对话框功能的窗体,它们用于显示状态或输入信息,仅须在程序中调用一下,完成其功能就行了,无需常驻内存。这时可以通过选择Project/Options/Forms,将"Auto--Createforms"栏中相应的窗体,如Form1,用">"键移动到"Availableforms"栏中,并在程序需调用该窗体处,加入下列语句:
        
        TForm1*myform=newTForm1(this);
        
        myform->ShowModal();
        
        deletemyform;
        
        窗体Form1仅是在需要调用时才调入内存,调用完成后,即用delete清除出内存。这样可减少程序对内存资源的占用。
        
        二、遍历窗体控件的方法
        
        要访问或修改窗体上的控件,方法很简单,以TEdit为例子:
        
        Edit1->Text="";
        
        Edit2->Text="";
        
        但如果窗体上有十来个像Edit1这样的控件,需要进行相同的初始化,用上面的方法一个一个地进行,岂不麻烦!所以有必要掌握遍历窗体控件的方法。在介绍该方法之前,让我们先了解一下窗体Form的Components和Controls属性。参见表一。
        
        表一
        
        属性      类型   说明
        
        ComponentCount   Int   目前Form上各类控件的总数
        
        ComponentsTCompont *    目前Form上指向所有控件的数组
        
        ControlCount    Int   目前Form上某一子区域上各类控件的总数
        
        ControlsTControl  *    目前Form上指向某一子区域上所有控件的数组
        
        其中:数组对象
        
        Components[0]Panel1
        
        Components[1]Label1
        
        Components[2]Edit1
        
        Components[3]Label2
        
        Components[4]Edit2
        
        Components[5]Button1
        
        数组对象
        
        Controls[0]Label1
        
        Controls[1]Edit1
        
        Controls[2]Label2
        
        Controls[3]Edit2
        
        下面这段代码完成了对Panel1上所有TEdit控件的遍历初始化。读者稍加修改,即可对其它控件进行遍历。这里有一个小技巧,我们把需要进行初始化的控件放置在了Panel1上,与不需要初始化的控件区分开来,这样便于编程。
        
        AnsiStringnamestring="TEdit";
        
        for(inti=1;iControlCount;i++)
        
        {
        
        if(Panel1->Controls[i]->
        
        ClassNameIs(namestring))
        
        {
        
        TEdit*p=dynamic_cast
        
        (Panel1->Controls[i]);
        
        P->Text="";
        
        }
        

        }

    三、用Enter键控制焦点切换的方法
        
        在Windows环境下,要使一个控件取得焦点,可在该控件上用鼠标单击一下,或按Tab键将焦点移至该控件上。这种控制焦点切换的方法有时不符合用户的习惯。就图一而言,用户就希望用Enter键,控制焦点由Edit1切换到Edit2.要实现这样的功能需借助WinAPI函数SendMessage来完成。方法是:先设Form1的KeyPreview属性为true,然后在Form1的OnKeyPress事件中加入如下的代码。这样,用户就可以通过按Enter键控制焦点按定义好的Taborder顺序来移动了!
        
        void__fastcallTForm1::
        
        FormKeyPress(TObject*Sender,char&Key)
        
        {
        
        if(Key==VK_RETURN)
        
        {
        
        SendMessage(this->Handle,WM_NEXTDLGCTL,0,0);
        
        Key=0;
        
        }
        
        }
        
        四、为TStringGrid的文字加上颜色
        
        TStringGrid是C++Builder提供给用户的一种字符网格控件。美中不足的是,它没有提供分别修改各单元字体颜色、大小的方法。其实要为TStringGrid实现这样功能,只需在程序中稍加处理就行了。方法是自定义一个二维数组cellbuf,它的下标与网格单元列行一一对应,用于存放各网格单元的颜色、文字等信息。
        
        structCellStru
        
        {
        
        AnsiStringmsg;//文字信息
        
        TColorcolor;//文字颜色
        
        };
        
        CellStrucellbuf[MAXCOL][MAXROW];
        
        初始化cellbuf后,再在字符网格控件StringGrid1的OnDrawCell响应事件中,加入如下的代码即可。
        
        void__fastcallTForm1::StringGrid1DrawCell
        
        (TObject*Sender,intCol,
        
        intRow,TRect&Rect,TGridDrawStateState)
        
        {
        
        StringGrid1->Canvas->Font->
        
        Color=cellbuf[Col][Row].color;
        
        StringGrid1->Canvas->TextOut(Rect.Left+3,
        
        Rect.Top+3,cellbuf[Col][Row].msg);
        
        }

  • 相关阅读:
    json格式
    UICollectionViewLayout继承UICollectionViewFlowLayout自定义布局
    iOS中如何生成二维码
    Xcode升级之后插件无法使用与不小心点击Skipbundle的解决办法
    如何上传本地代码到github
    Xcode实用快捷键以及Mac一些常用指令
    0925-0926 函数注意点
    0921控制结构注意点
    0920逻辑运算符,位运算,移位运算,三元运算符,短路性注意点
    0919表达式&运算符注意点
  • 原文地址:https://www.cnblogs.com/phyking/p/4456671.html
Copyright © 2011-2022 走看看