首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

高分.关于GDI.怎么画按钮.怎么写按钮事件

2012-02-06 
高分求助.关于GDI.如何画按钮.如何写按钮事件?我要根据数据库的记录来生成对应的按钮数..比如说读出来2条

高分求助.关于GDI.如何画按钮.如何写按钮事件?
我要根据数据库的记录来生成对应的按钮数..

比如说读出来2条记录.然后需要画出2个按钮..

然后分别写上这2个按钮的点击事件...

求解...从未接触过GDI..但是现在手上一个项目..需要根据数据库记录数来画图..

网上搜了下...看到老妖的的一个透明界面制作了..有了初步的了解..

关于这块在BCB上应用的资料真少得可怜...

先放50分求助..完美解决再行加分...绝不食言~

[解决办法]
楼主看看这个

C/C++ code
//---------------------------------------#ifndef Unit1H#define Unit1H//---------------------------------------#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>//---------------------------------------class TForm1 : public TForm{__published:    // IDE-managed Components        TButton *Button1;        TEdit *count;        TLabel *Label1;        void __fastcall Button1Click(TObject *Sender);        void __fastcall FormKeyPress(TObject *Sender, char &Key);private:    // User declarations        ////定义用来释放所有已生成的按钮成员函数        void __fastcall FreeAllButn(void);        ////定义公用的按钮单击响应函数        void __fastcall OnClick(TObject *Sender);        ////定义按钮类对象指针数组        TButton **Buttons;        // 记录已生成按钮数量的成员变量        int BnCount;public:  //// User declarations        // 窗体类的构造函数        __fastcall TForm1(TComponent* Owner);        // 窗体类的析构函数        __fastcall ~TForm1();};//---------------------------------------extern PACKAGE TForm1 *Form1;//---------------------------------------#endif#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::Button1Click(TObject *Sender){  FreeAllButn();    //// 释放所有资源  BnCount = StrToInt(count->Text);  String msg = "将生成"+IntToStr(BnCount)+"个按钮";  ShowMessage(msg);  Buttons = new TButton*[BnCount];  int left,top;  left=20; top=50;       // 当前要创建的按钮的左上角位置  for(int i=0; i<BnCount; i++)  {    Buttons[i] = new TButton(this);    Buttons[i]->Parent=this;    Buttons[i]->Caption=IntToStr(i+1);    Buttons[i]->OnClick=OnClick;     // 设置鼠标单击事件的响应函数    // 根据窗口的宽度布置按钮的位置    if(left+Buttons[i]->Width+10 > this->Width) // 判断一行是否已排满    {      top += Buttons[i]->Height+10;      left = 20;    }    Buttons[i]->Left = left;    Buttons[i]->Top = top;    left += Buttons[i]->Width+10;  }}//---------------------------------------__fastcall TForm1::~TForm1(){   FreeAllButn();     ////在析构函数中释放已生成的所有按钮对象}//---------------------------------------////公用的按钮响应函数void __fastcall TForm1::OnClick(TObject *Sender){  TButton *temp;  temp = (TButton *)Sender;  ShowMessage(temp->Caption);}////---------------------------------------//// 释放所有资源void __fastcall TForm1::FreeAllButn(void){  int i;  for(i=0;i<BnCount;i++)  {      delete Buttons[i];  }}void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key){   if(!(Key>='0' && Key<='9' || Key==8) )   {       ShowMessage("只能输入数字");       Key = 0;   }}//---------------------------------------
[解决办法]
同意楼上的,用VCL快速一些。

[解决办法]
自绘按钮,这方面的资料太少了,网上有这个代码,你搜一下ImFlatButton,继续VCL里面的类


[解决办法]
用listview,贴图处理,自绘button复杂了点。

热点排行