| 小勇's profile挑战自我PhotosBlogLists | Help |
写项目文档 在 9号回去之前,必须把项目的文档写完,概要设计已经写好了,40多页;详细设计写了1/4,写了50多页了,还有用户手册,测试报告和方案与我无关.
加油,努力呀! 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 06 五一 这个五一没有出去玩,全在实验室工作.
一方面是实验室的项目,一方面是自己的活.
现在发现要学的东西越来越多了,qt图形函数库,opengl图象处理,linux嵌入式开发.............
暑假自己买块arm板开发.
如果天天用自己会的东西做项目,那么你的知识和能力永远会停留在一个点;要不断学习新知识.
现在发现学习新知识,已经不是学习能力的欠缺,而是时间的不够.
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 05 IT技能
April 03 近期学习和工作目标任务一:测试,每天需要4个小时
任务二:看代码
任务三:学习linux内核源代码
任务四:做毕业设计
任务五:开发美容美发软件
任务六:开发兼职软件
任务七:复习英语六级 本人参与开发的项目和软件
哈尔滨工业大学(威海)运动会电子计时系统 系统主要采用视频采集卡的技术,实现A/D的转换,从外界采集图片信息到内存或者硬盘,同时单片机的硬件精确记时技术,使记时精度可达到20MS,使图片的采集和记时同步,成绩处理时,可以向前和向后翻阅,也可以快速向前和快速向后翻阅,找到运动员撞线的图片,实现成绩的准确录入。
基于激光测距技术的空间定位系统 系统主要由激光测距仪+数控转台测量目标点与系统坐标原点的距离和角度,数据传送至计算机处理。整个系统由计算机控制,并集成了数字图像处理的的技术,用摄像头进行监视,用游戏手柄控制转台的转动方向和速度,并通过模式匹配算法对目标物进行自动识别并测量。
交通事故现场勘查系统 该系统主要利用2个数码相机同时对事故现场拍取几组照片后,利用现场图的绘制功能,使用国家标准图标库,然后先点击图片上的点,再点击现场图对应的点,利用图象的算法就可以得到点的3维坐标值。最后点击现场图任意2个点,距离自动出现,现场打印现场图,并可以保存。
全国公交车查询系统 可以实现对中国各大城市的公交车进行查询,公交车的数据只要按固定格式就可以导入到系统中;可以对线路进行查询;对一个站点的所有路线查询;开始地到目的地的查询,显示所有的方案,按距离的大小排序。
工厂作息管理系统 主要功能是进行定时的广播,由串口转换可以接到不同的车间和单位;可以设置不广播的日期和节假日;可以自己录入广播的内容;不同的单位和车间可以设置不同的播放内容;可以设定系统播音的方式,按日还是按周。
美容美发设计以及管理软件 用摄象头或数码相机对人进行拍照后,从发型库里面选择发型,通过人脸识别的算法,发型自动套在人头上,可以进行合成;可以对发型的放大,缩小,拖放,染发,修剪等。用刷卡机对会员进行管理, 实现了进销存,会员卡积分,折扣,员工提成,打印;还可以定期发送短信。 |
|
|