全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1311
推到 Plurk!
推到 Facebook!

請問Class問題?

尚未結案
jim1247
一般會員


發表:8
回覆:20
積分:5
註冊:2003-01-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-21 18:14:36 IP:211.75.xxx.xxx 未訂閱
以下程式碼是用Delphi寫的 可否有先進幫忙轉成BCB? 自己試了很次一直有問題 我是初學者 請指教 type TButtonGroup = class(TGroupBox) private Button1: TButton; Button2: TButton; Button3: TButton; procedure OnClick(Sender: TObject); public constructor Create(Owner: TComponent); override; destructor Destroy; override; end; constructor TButtonGroup.Create(Owner: TComponent); begin inherited; Button1 := TButton.Create(Self); Button2 := TButton.Create(Self); Button3 := TButton.Create(Self); Button1.Parent := Self; Button2.Parent := Self; Button3.Parent := Self; Button1.Name := 'Button7'; Button2.Name := 'Button8'; Button3.Name := 'Button9'; Button1.Top := 25; Button2.Top := Button1.Top Button1.Height 10; Button3.Top := Button2.Top Button2.Height 10; Button1.Left := 28; Button2.Left := 28; Button3.Left := 28; Button2.Enabled := False; Button3.Enabled := False; Button1.OnClick := OnClick; Button2.OnClick := OnClick; Button3.OnClick := OnClick; end; destructor TButtonGroup.Destroy; begin Button1.Free; Button2.Free; Button3.Free; inherited; end; procedure TButtonGroup.OnClick(Sender: TObject); begin Button1.Enabled := False; Button2.Enabled := False; Button3.Enabled := False; if Sender = Button1 then Button2.Enabled := True; if Sender = Button2 then Button3.Enabled := True; if Sender = Button3 then Button1.Enabled := True; end; procedure TForm1.FormShow(Sender: TObject); begin BG := TButtonGroup.Create(Self); BG.Parent := Self; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin BG.Free; end;
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-24 08:54:31 IP:211.23.xxx.xxx 未訂閱
請參考: 【發表】BCB6 及 Delphi 7 常用語法對照表 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39320 並多多利用本站搜尋功能。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Anpinos Middle Earth http://anpino.hp.infoseek.co.jp/ -------------------------------
jim1247
一般會員


發表:8
回覆:20
積分:5
註冊:2003-01-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-24 10:47:34 IP:211.75.xxx.xxx 未訂閱
感謝anpino大大的回應 但還是沒解決我現在的問題 看完後大都是動態建立物件和事件 但我的問題是如何做成一個Class ex:我想要建立一個GroupBox且含有Button 並且有自己的方法 試了很久不知要怎麼在建立物件時自動幫他設預設值 第一篇有個Create和Destory方法不過是Delphi的 BCB我不知要如何做到 還請那位大大多多指導..謝謝 :) PS:如果不是用Class方式..在FormShow時我已可以動態建立沒問題
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-24 11:05:42 IP:221.169.xxx.xxx 未訂閱
jim1247:僅供參考:
於Form1拉一Button名稱設為CButton1(用於產生動態Button)。
Unit1.h
private:        // User declarations
  TList    *Button_List; // 元件區
  void __fastcall OnClick(TObject *Sender);
Unit1.cpp
#include 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Button_List = new TList;   // h檔Public TList    *Button_List;
}
void __fastcall TForm1::CButton1Click(TObject *Sender)
{
  CButton1->Enabled=false;
  TButton *Button1;
  TButton *Button2;
  TButton *Button3;
  Button1 = new TButton(this);
  Button2 = new TButton(this);
  Button3 = new TButton(this);
  Button1->Parent = this;
  Button2->Parent = this;
  Button3->Parent = this;
  Button1->Name = "Button7";
  Button2->Name = "Button8";
  Button3->Name = "Button9";
  Button1->Top = 25;
  Button2->Top = Button1->Top   Button1->Height   10;
  Button3->Top = Button2->Top   Button2->Height   10;
  Button1->Left= 28;
  Button2->Left= 28;
  Button3->Left= 28;
  Button2->Enabled = false;
  Button3->Enabled = false;
  Button1->OnClick = OnClick;
  Button2->OnClick = OnClick;
  Button3->OnClick = OnClick;
  Button_List->Add(Button1);
  Button_List->Add(Button2);
  Button_List->Add(Button3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnClick(TObject *Sender)
{
  TButton *pButton;
  for (int iCount = Button_List->Count - 1; iCount >= 0; iCount--) {
    pButton =(TButton *) Button_List->Items[iCount];
    pButton->Enabled = false;
  }
  for (int iCount = Button_List->Count - 1; iCount >= 0; iCount--) {
    pButton =(TButton *) Button_List->Items[iCount];
    if ((TButton *) Sender == pButton) {
      if (iCount == Button_List->Count - 1)
        pButton =(TButton *) Button_List->Items[0];
      else
        pButton =(TButton *) Button_List->Items[iCount 1];
      pButton->Enabled = true;
    }
  }
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  // 清除元件暫存
  for (int iCount = 0; iCount < Button_List->Count; iCount  )  {
    delete (TComponent *) Button_List->Items[iCount];
  }
  delete Button_List;  
}
//---------------------------------------------------------------------------    請參考!
Andy Chang
------
Andy Chang
jim1247
一般會員


發表:8
回覆:20
積分:5
註冊:2003-01-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-25 09:34:34 IP:211.75.xxx.xxx 未訂閱
可能我寫的不夠清楚@@ 不然就是我領悟力太差>< 再重新說一次好了    我想建立一個新的class 這個class叫TButtonGroup,是繼承自TGroupBox 內容為GroupBox裡面還有3個Button 有自己定義的onclick事件    我的問題是要如何在new此新calss時 會自動幫這個TButtonGroup裡的全部物件做初始化動作? ex: TButtonGroup *BG; BG = new TButtonGroup(this); //在建立時即會把BG裡的Button也初始化 BG->Parent = Form1;          //且包括BG的Top,Left等設定也初始化    以下是我原來的Code,有錯請指正 Unit1.h #ifndef Unit1H #define Unit1H    #include  #include #include #include <Forms.hpp> class TForm1 : public TForm { __published: void __fastcall FormShow(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: public: __fastcall TForm1(TComponent* Owner); }; class TButtonGroup : public TGroupBox { __published: TButton *Button1; TButton *Button2: TButton *Button3; void __fastcall OnClick(TObject *Sender); private: public: __fastcall TButtonGroup(TComponent* Owner); }; } extern PACKAGE TForm1 *Form1; #endif Util1.cpp #include #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TButtonGroup *BG; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } __fastcall TButtonGroup::TButtonGroup(TComponent* Owner) : TGroupBox(Owner) { } void __fastcall TForm1::FormShow(TObject *Sender) { BG = new TButtonGroup(this); BG->Parent = Form1; } void __fastcall TButtonGroup::OnClick(TObject *Sender) { Button1->Enabled = false; //因Button1,Button2,Button3都還沒new Button2->Enabled = false; //所以這個function會Error Button3->Enabled = false; if(Sender==Button1) Button2->Enabled = true; if(Sender==Button2) Button3->Enabled = true; if(Sender==Button3) Button1->Enabled = true; } void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { delete BG; } 請大大指教 一直麻煩大大 m(_ _)m
jim1247
一般會員


發表:8
回覆:20
積分:5
註冊:2003-01-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-25 10:03:48 IP:211.75.xxx.xxx 未訂閱
後來我自己跑去問人又試了一下 知道問題在那了QQ __fastcall TButtonGroup::TButtonGroup(TComponent* Owner) : TGroupBox(Owner) { //這是建構函式 我一直不知道QQ Button1 = new TButton(this); Button2 = new TButton(this); Button3 = new TButton(this); Button1->Parent = this; Button2->Parent = this; Button3->Parent = this; Button1->OnClick = OnClick; Button2->OnClick = OnClick; Button3->OnClick = OnClick; Button1->Height = 20; Button2->Height = 20; Button3->Height = 20; Button1->Width = 80; Button2->Width = 80; Button3->Width = 80; Button1->Top = 10; Button2->Top = 60; Button3->Top = 110; Button1->Left = 10; Button2->Left = 10; Button3->Left = 10; Button1->Caption = "Button1"; Button2->Caption = "Button2"; Button3->Caption = "Button3"; Button1->Enabled = true; Button2->Enabled = false; Button3->Enabled = false; } void __fastcall TForm1::FormShow(TObject *Sender) { BG = new TButtonGroup(this); BG->Parent = Form1; BG->Top = 10; BG->Left = 10; BG->Width = 400; BG->Height = 300; BG->Caption = ""; } 改成以上這樣就可正常運作 :) 謝謝之前大大的幫忙 m(_ _)m
系統時間:2024-04-27 10:01:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!