高分求助.关于GDI.如何画按钮.如何写按钮事件?
我要根据数据库的记录来生成对应的按钮数..
比如说读出来2条记录.然后需要画出2个按钮..
然后分别写上这2个按钮的点击事件...
求解...从未接触过GDI..但是现在手上一个项目..需要根据数据库记录数来画图..
网上搜了下...看到老妖的的一个透明界面制作了..有了初步的了解..
关于这块在BCB上应用的资料真少得可怜...
先放50分求助..完美解决再行加分...绝不食言~
[解决办法]
楼主看看这个
//---------------------------------------#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复杂了点。