小勇's profile挑战自我PhotosBlogLists Tools Help

Blog


    September 06

    开学了

       硕士研究生的生活开始了,从9月4号已经上课了,感觉和本科的生活没有什么变化。
    June 26

    快要离开学校了

       6月28号晚上班级吃饭,30号毕业典礼,7月1号回北京.
     
     
     
     
      永别了,哈尔滨工业大学(威海).
    June 05

    项目文档写完了

    项目文档写完了, 全部加起来一共 400多页呵呵.
    June 04

    高中同学聚会

     
             今天高三同学在人民大学聚会,来了10个人

    写项目文档

         在 9号回去之前,必须把项目的文档写完,概要设计已经写好了,40多页;详细设计写了1/4,写了50多页了,还有用户手册,测试报告和方案与我无关.
     
         加油,努力呀!
    June 02

    9号回学校

     
        9号回学校,回威海.
    May 27

    写论文

     
        时间真过得快,快到6月份了,就要回学校答辩了.
     
     
       这段时间写论文,还有日志.
     
    May 22

    c++ builder 中实现listview 里面 combobox,edit,datatimerpiker可以编辑

    最近由于项目需要,自己封装了一个类,实现了listview 里面的combobox,edit,datetimerpiker可以
    编辑的实现.如下
    //---------------------------------------------------------------------------
    #ifndef class_listviewH
    #define class_listviewH
    //---------------------------------------------------------------------------
    #endif
     
    #include <ComCtrls.hpp>
    #include <StdCtrls.hpp>
    #include <Classes.hpp>
    #include <Controls.hpp>
    class    listview_function
    {
            public:
                    TListView *ListView1;   //listview的对象
                    TForm * Form1;  //主要是用于activecontrol

                    TListItem     *Item; //用户选择的第几行的item
                    int  ncol_number;       //listview的总列数目
                    int  ncol_dbclick;      //双击的时候所在的列
                    int  ncol_modify;       //用来记录是否修改的列
                    int  ncol_dbclick_notuse[10]; // 用来记录 双击的时候所在的列,这些列没有反应的
                    int  ncol_dbclick_notuse_number;//数目
     
                    typedef struct
                    {
                    TComboBox *ComboBox1;
                    TEdit *Edit1;
                    TDateTimePicker *DateTimePicker1;
                    int ncol; //列
                    }paris;       //一个配对
                    paris pair[20];
                    int  paris_number; //配对数目

                    int    nWidth;
                    TRect  Rect;
                    TPoint Pos;  //右键双击的变量

                    void  init_listview(TListView *ListView,TForm * Form);   //初始化
                    void  set_modify_ncol(int ncol);//设置修改的列
                    void  set_ncol_unvisable(int ncol);//设置某一列不可见
                    void  set_ncol_dbclick_notuse(int ncol); //设置某一列双击的时候不反映

                    void   right_dbclick(); // 双击的函数
                    int  is_dbclick_is_notuse(int ncol);
                    void  set_pairs(TComboBox *ComboBox1,int col);      //设置关联关系
                    void  set_pairs(TEdit *Edit1,int col);
                    void  set_pairs(TDateTimePicker *DateTimePicker1,int col);
                    void exit_paris();  //退出的时候
                    void exit_Combox(TComboBox *ComboBox1);
                    void exit_TEdit(TEdit *Edit1);
                    void exit_TDateTimePicker(TDateTimePicker *DateTimePicker1);
                    void set_activecontrol_ComboBox(TComboBox *ComboBox1);
                   
                    void set_activecontrol_TEdit(TEdit *Edit1);
                    void set_activecontrol_TDateTimePicker(TDateTimePicker *DateTimePicker1);
                   
                    void ontimer();
                    void set_paris_activecontrol_unvisable();
            private:
                    void __fastcall TheTimerOnTimer(TObject *Sender);

    };
    /*
    使用方法
    定义一个类的变量   listview_function    a
    1:初始化 listview和form
       init_listview(TListView *ListView,TForm * Form);
    2:设置列的关联
            void  set_ComboBox_pairs(TComboBox *ComboBox1,int col);      //设置关联关系
            void  set_TEdit_pairs(TEdit *Edit1,int col);
            void  set_TDateTimePicker_pairs(TDateTimePicker *DateTimePicker1,int col);
    3:可设置某一些列双击不反映   或不可以看见
          void  set_ncol_dbclick_notuse(int ncol); //设置某一列双击的时候不反映
          void  set_ncol_unvisable(int ncol);//设置某一列不可见
    4:在listview的rdouble事件里面
        void   right_dbclick(); // 双击的函数

    5:在控件的退出里面
         void exit_ComboBox_TEdit_TDateTimePicker();  //退出的时候

    6:去除 拖动的时候,还在园地的
      void   ontimer()

    */
     
     
    //---------------------------------------------------------------------------

    #pragma hdrstop
    #include "class_listview.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)

    void  listview_function::init_listview(TListView *ListView,TForm * Form)
    {
            ListView1=ListView;
            Form1=Form;
            ncol_number=ListView1->Columns->Count;
            ncol_dbclick=-1;
            ncol_dbclick_notuse_number=0;
            paris_number=0;
    }
    void  listview_function::set_modify_ncol(int ncol)//设置修改的列
    {
            ncol_modify=ncol;
    }
    void  listview_function::set_ncol_unvisable(int ncol)
    {
            ListView1->Column[ncol]->Width=0;
    }
    void  listview_function::set_ncol_dbclick_notuse(int ncol)
    {
              ncol_dbclick_notuse_number++;
              ncol_dbclick_notuse[ncol_dbclick_notuse_number]=ncol;
    }
    void  listview_function::right_dbclick()  // 双击的函数
    {
           // TListItem     *Item1=NULL; //用户选择的第几行的item

            int    nX;
            int    nCol;
            Pos  = ListView1->ScreenToClient(Mouse->CursorPos);
            Item = ListView1->GetItemAt(Pos.x, Pos.y);
            if(Item==NULL)
               return ;
     
            nX = -GetScrollPos(ListView1->Handle, SB_HORZ);
            for(nCol=0; nCol<ncol_number; nX+=nWidth, nCol++)
            {
                    nWidth = ListView_GetColumnWidth(ListView1->Handle, nCol);
                            if (Pos.x <= nX + nWidth)
                             break;
            }
            ncol_dbclick=nCol;
            if (is_dbclick_is_notuse(ncol_dbclick)||ncol_dbclick==ncol_number)
                    return ;

            if (nX < 0)
            {
                    nWidth += nX;
                    nX = 0;
             }
            Rect = Item->DisplayRect(drBounds);
            Pos.x = nX;
            Pos.y = Rect.Top;
            MapWindowPoints(ListView1->Handle, Form1->Handle, (POINT*)&Pos, 1);  //是窗体的handle么

             for(int i=1;i<=paris_number;i++)
            if(pair[i].ncol==ncol_dbclick)
                {
                  if(pair[i].ComboBox1!=NULL)
                   set_activecontrol_ComboBox(pair[i].ComboBox1);
                  else if(pair[i].Edit1!=NULL)
                   set_activecontrol_TEdit(pair[i].Edit1);
                  else if(pair[i].DateTimePicker1!=NULL)
                  set_activecontrol_TDateTimePicker(pair[i].DateTimePicker1);
            }
           
    }

    int  listview_function::is_dbclick_is_notuse(int ncol) //判断   双击的时候所在的列 是否可以 反应
    {
             for(int i=1;i<=ncol_dbclick_notuse_number;i++)
                      if(ncol_dbclick_notuse[ncol_dbclick_notuse_number]==ncol)
                           return  1;
             return 0;
    }
    void  listview_function::set_pairs(TComboBox *ComboBox1,int col)      //设置关联关系
    {
                paris_number++; //配对数目
                int  i=paris_number;
                pair[i].ncol=col;
                pair[i].ComboBox1=ComboBox1;
                pair[i].Edit1=NULL;
                pair[i].DateTimePicker1=NULL;
                pair[i].ComboBox1->Visible=false;
    }
     
    void  listview_function::set_pairs(TEdit *Edit1,int col)
    {
                paris_number++; //配对数目
                int  i=paris_number;
                pair[i].ncol=col;
                pair[i].ComboBox1=NULL;
                pair[i].Edit1=Edit1;
                pair[i].DateTimePicker1=NULL;
                pair[i].Edit1->Visible=false;
     
    }

    void  listview_function::set_pairs(TDateTimePicker *DateTimePicker1,int col)
    {
                paris_number++; //配对数目
                int  i=paris_number;
                pair[i].ncol=col;
                pair[i].ComboBox1=NULL;
                pair[i].Edit1=NULL;
                pair[i].DateTimePicker1=DateTimePicker1;
                pair[i].DateTimePicker1->Visible=false;
     
    }

    void listview_function::exit_paris() //退出的时候
    {
        for(int i=1;i<=paris_number;i++)
            if(pair[i].ncol==ncol_dbclick)
                {
                  if(pair[i].ComboBox1!=NULL)
                    exit_Combox(pair[i].ComboBox1);
                  else if(pair[i].Edit1!=NULL)
                    exit_TEdit(pair[i].Edit1);
                  else if(pair[i].DateTimePicker1!=NULL)
                  exit_TDateTimePicker(pair[i].DateTimePicker1);
            }
    }
    void  listview_function::exit_Combox(TComboBox *ComboBox1)
    {
        ComboBox1->Visible = false;
        if (ncol_dbclick == 0)
            Item->Caption = ComboBox1->Text;
        else
        {
            while(Item->SubItems->Count < ncol_dbclick)
               Item->SubItems->Add("");
            Item->SubItems->Strings[ncol_dbclick-1] =ComboBox1->Text;
        }

    }
    void listview_function::exit_TEdit(TEdit *Edit1)
    {
        Edit1->Visible = false;
        if (ncol_dbclick == 0)
            Item->Caption = Edit1->Text;
        else
        {
            while(Item->SubItems->Count < ncol_dbclick)
               Item->SubItems->Add("");
            Item->SubItems->Strings[ncol_dbclick-1] = Edit1->Text;
        }
    }

    void listview_function::exit_TDateTimePicker(TDateTimePicker *DateTimePicker1)
    {

        DateTimePicker1->Visible = false;
        if (ncol_dbclick == 0)
            Item->Caption =DateTimePicker1->Date;
        else
        {
            while(Item->SubItems->Count < ncol_dbclick)
               Item->SubItems->Add("");
            Item->SubItems->Strings[ncol_dbclick-1] =DateTimePicker1->Date;
        }

    }
    void listview_function::set_activecontrol_ComboBox(TComboBox *ComboBox1)
    {
                    ComboBox1->Visible=true;
                    Form1->ActiveControl= ComboBox1;
                    ComboBox1->SetBounds(Pos.x, Pos.y-1, nWidth, Rect.Height()+2);
                    ComboBox1->Text = ncol_dbclick==0 ? Item->Caption : Item->SubItems->Strings[ncol_dbclick-1];
    }
    void listview_function::set_activecontrol_TEdit(TEdit *Edit1)
    {
                    Edit1->Visible=true;
                    Form1->ActiveControl= Edit1;
                    Edit1->SetBounds(Pos.x, Pos.y-1, nWidth, Rect.Height()+2);
                    Edit1->Text = ncol_dbclick==0 ? Item->Caption : Item->SubItems->Strings[ncol_dbclick-1];
    }
    void listview_function::set_activecontrol_TDateTimePicker(TDateTimePicker *DateTimePicker1)
    {
            DateTimePicker1->Visible = true;
            Form1->ActiveControl  =  DateTimePicker1;
            DateTimePicker1->SetBounds(Pos.x, Pos.y-1, nWidth, Rect.Height()+2);
            try
            {
            DateTimePicker1->Date = ncol_dbclick==0 ? Item->Caption : Item->SubItems->Strings[ncol_dbclick-1];
            }
             catch (Exception &exception)
            {
            }
           
    }
    void __fastcall listview_function::TheTimerOnTimer(TObject *Sender)
    {
            
           MSG *Msg=new MSG();
            //定义消息指针
            WaitMessage();            //等待消息
           if(PeekMessage(Msg, ListView1->Handle, 0, 0, PM_NOREMOVE))
           {
                   if(Msg->wParam==1)
                   {
                       set_paris_activecontrol_unvisable();
                    }
         }

    };

    void listview_function::ontimer()
    {
            TTimer *Timer1= new TTimer(Form1);
            Timer1->Interval=10;
            Timer1->OnTimer=TheTimerOnTimer;
            Timer1->Enabled = true;
    }

    void  listview_function::set_paris_activecontrol_unvisable()
    {

            for(int i=1;i<=paris_number;i++)
          {
                  if(pair[i].ComboBox1!=NULL)
                    pair[i].ComboBox1->Visible=false;
                  else if(pair[i].Edit1!=NULL)
                   pair[i].Edit1->Visible=false;
                  else if(pair[i].DateTimePicker1!=NULL)
                 pair[i].DateTimePicker1->Visible=false;
            }
     

    }
     
     
     
    使用的例子:
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <Buttons.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
            TListView *ListView1;
            TComboBox *ComboBox1;
            TEdit *Edit1;
            TDateTimePicker *DateTimePicker1;

            void __fastcall ListView1DblClick(TObject *Sender);
            void __fastcall ComboBox1Exit(TObject *Sender);
            void __fastcall Edit1Exit(TObject *Sender);
            void __fastcall DateTimePicker1Exit(TObject *Sender);
            void __fastcall FormCreate(TObject *Sender);
    private: // User declarations
    public:  // User declarations
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
     
     
     
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include "class_listview.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    listview_function  a ;  //一个对象
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::ListView1DblClick(TObject *Sender)
    {
               a.right_dbclick();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ComboBox1Exit(TObject *Sender)
    {
                    a.exit_paris();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Edit1Exit(TObject *Sender)
    {
               a.exit_paris();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::DateTimePicker1Exit(TObject *Sender)
    {
              a.exit_paris();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
           
            ComboBox1->Items->Add("1");
            ComboBox1->Items->Add("2");
            ComboBox1->Items->Add("3");
            ComboBox1->Items->Add("4");
            ComboBox1->Items->Add("5");
            ComboBox1->Items->Add("6");

            for(int i=0;i<=10;i++)
            {
                    ListView1->Items->Insert(i);
                    ListView1->Items->Item[i]->Caption="id"+IntToStr(i);
                    ListView1->Items->Item[i]->SubItems->Add("combol"+IntToStr(i));
                    ListView1->Items->Item[i]->SubItems->Add("text"+IntToStr(i));
                    ListView1->Items->Item[i]->SubItems->Add("2006-05-22");
            }
           
            /*****************************************/
            a.init_listview(ListView1,Form1);
            a.set_pairs(ComboBox1,1);
            a.set_pairs(Edit1,2);
            a.set_pairs(DateTimePicker1,3);
            a.ontimer();
            /*****************************************/

    }
    //---------------------------------------------------------------------------
     

    今天调试代码的发现

     
      今天调试了一段代码,发现老是出错,于是单步调试............
     
      最后发现代码并没有错,而是调试的操作不当的问题.
     
      原因如下:
     
      代码中有一个语句 是得到 当前 鼠标的坐标值,
     
     调试的时候,我用鼠标操作了别的东西,所以得到的坐标值就不对了,不是原来的值.
     
     以前有过类似的 错误,没有记录,以至于再犯,现记录于此,铭记心头.
     
     
     
     
     
    May 20

    好久没有写日记了

     
      该死的msn,最近10多天都登陆不上来.
     
     现在已经5月20号,时间真过的快,转眼就要回学校毕业答辩了.
     
     应该开始写毕业论文和日志了.
     
     现在实验室的老师对我可真好呀,什么项目都找我做,这个老师的活还没有做完,那个老师就预定我了,
     
     难道实验室除了我就没有牛人了,呵呵.
     
     回学校一定和同学,朋友,老师 ,我的徒弟们,聚一聚,有可能一辈子再也见不到他们了
     
     
    May 07

    买书

     
          今天买了2本书,<<open gl超级宝典>>和<<加密与解密>>.
     
     
         不光要看会书本的知识,还要必须运用.
     
     
    May 06

    五一

       这个五一没有出去玩,全在实验室工作.
      一方面是实验室的项目,一方面是自己的活.
     
      现在发现要学的东西越来越多了,qt图形函数库,opengl图象处理,linux嵌入式开发.............
     
      暑假自己买块arm板开发.
     
      如果天天用自己会的东西做项目,那么你的知识和能力永远会停留在一个点;要不断学习新知识.
     
     
     现在发现学习新知识,已经不是学习能力的欠缺,而是时间的不够.
     
     
    April 22

    男人 35 岁

      
              男人35 岁 前 是 资本,经验,社会关系的积累;
     
            35岁以后就是自己创业的开始.
    April 21

    郁闷的一天

     
        今天郁闷一天,不过收获还不小,知道了vc编译器的设置是多么的复杂!!
     
       解决了一个问题:如何实现 c语言的 lib库被mfc工程调用 ?
     
      答案如下:
     
     extern "C"
    {
    #include "libXXXX.h"

    }
     
         shard dll
         settings--->link-->input->lgnore->   libc.lib libcmt.lib libcd.lib  libcmtd.lib msvcrtd.lib 
         project->settings--->c++->  use rantime lanbary->     multiyhreaded dll
     
     
    这几个步骤缺一不可,难怪vc这么难学.
     
     
     
        这个问题解决,从明天开始,就可以提高开发速度,在五一前完成所有的任务.
     
     
     
     

    五一前完成任务

        五一前完成任务!!
    April 17

    mysql is just easy!

     
      2天时间搞定了 linux 和 windows下的mysql 的编程,
     
    windows下的客户端可以访问  linux  下的 服务端;
     
     
      linux 的客户端可以访问  windows 下的 服务端;
     
     
       linux :用c语言编写,用的是 mysql api c函数
     
     windows:用vc语言编写,用的是 标准的odbc接口,为了以后移植到orcale
     
     
     
     
    April 15

    学习mysql编程

     
       1:安装 mysql 服务器 win32版本
     
       2:安装 mysql-font 开发工具
      
      3:安装 mysql-odbc-3.51-win32.zip 驱动
    April 05

    IT技能

    技能名称

    熟练程度

    使用时间

    C语言

    熟练

    38个月

    C++语言

    熟练

    32个月

    Visual c++ 6.0

    熟练

    22个月

    Visual Basic 6.0

    熟练

    38个月

    Brland c++ builder 6.0

    熟悉

    8个月

    Sql  server  2000

    熟练

    25个月

    Linux c编程

    熟悉

    5个月

    April 03

    近期学习和工作目标

     
    任务一:测试,每天需要4个小时
     
    任务二:看代码
     
    任务三:学习linux内核源代码
     
    任务四:做毕业设计
     
    任务五:开发美容美发软件
     
    任务六:开发兼职软件
     
    任务七:复习英语六级

    本人参与开发的项目和软件

     

    哈尔滨工业大学(威海)运动会电子计时系统

    系统主要采用视频采集卡的技术,实现A/D的转换,从外界采集图片信息到内存或者硬盘,同时单片机的硬件精确记时技术,使记时精度可达到20MS,使图片的采集和记时同步,成绩处理时,可以向前和向后翻阅,也可以快速向前和快速向后翻阅,找到运动员撞线的图片,实现成绩的准确录入。

     

     

     

    基于激光测距技术的空间定位系统

    系统主要由激光测距仪+数控转台测量目标点与系统坐标原点的距离和角度,数据传送至计算机处理。整个系统由计算机控制,并集成了数字图像处理的的技术,用摄像头进行监视,用游戏手柄控制转台的转动方向和速度,并通过模式匹配算法对目标物进行自动识别并测量。

        

     

     

    交通事故现场勘查系统

    该系统主要利用2个数码相机同时对事故现场拍取几组照片后,利用现场图的绘制功能,使用国家标准图标库,然后先点击图片上的点,再点击现场图对应的点,利用图象的算法就可以得到点的3维坐标值。最后点击现场图任意2个点,距离自动出现,现场打印现场图,并可以保存。

     

     

     

    全国公交车查询系统

    可以实现对中国各大城市的公交车进行查询,公交车的数据只要按固定格式就可以导入到系统中;可以对线路进行查询;对一个站点的所有路线查询;开始地到目的地的查询,显示所有的方案,按距离的大小排序。

     

     

     

    工厂作息管理系统

    主要功能是进行定时的广播,由串口转换可以接到不同的车间和单位;可以设置不广播的日期和节假日;可以自己录入广播的内容;不同的单位和车间可以设置不同的播放内容;可以设定系统播音的方式,按日还是按周。

     

     

     

    美容美发设计以及管理软件

    用摄象头或数码相机对人进行拍照后,从发型库里面选择发型,通过人脸识别的算法,发型自动套在人头上,可以进行合成;可以对发型的放大,缩小,拖放,染发,修剪等。用刷卡机对会员进行管理,

    实现了进销存,会员卡积分,折扣,员工提成,打印;还可以定期发送短信。