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

請問如何控制DBNavigator上各個按扭?

答題得分者是:careychen
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-22 15:07:13 IP:210.66.xxx.xxx 未訂閱
其實在站內找了很久,沒有相關的資料…

問題是這樣的,我現在有某一個資料表,要限制這個表只能放50筆資料,如果到了50筆,就不讓使用者新增資料

但是我找不到可以控制DBNavigator1裡button的項目…請問該怎麼做呢?
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-22 16:05:28 IP:220.141.xxx.xxx 訂閱
TNavigateBtn defines values identifying different possible buttons on a TDBNavigator object.
DBCtrls or QDBCtrls
type TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh);
enum TNavigateBtn { nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh };
Each TNavigateBtn value identifies a different button that can appear on a TDBNavigator object. The following table lists all the button types, their corresponding TNavigateBtn values, and the action associated with each button:
First nbFirst Go to the first record
Prior nbPrior Go to the previous record
Next nbNext Go to the next record
Last nbLast Go to the last record
Insert nbInsert Insert a blank record
Delete nbDelete Delete the current record
Edit nbEdit Permit users to edit the current record
Post nbPost Post the current record
Cancel nbCancel Cancel the current edit
Refresh nbRefresh Refresh the data in the dataset

------
努力會更接近成功
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-22 21:47:15 IP:220.139.xxx.xxx 未訂閱
是指當DATASET觸發資料變化的時候,重新定義DBNavigator嗎?

這樣只能增加、減少按鈕。

如果我要nbInsert按鈕變灰色的話...

該怎麼做呢?
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-22 23:11:43 IP:59.126.xxx.xxx 訂閱
不知 GrandRURU 版大有沒有 Infopower 的元件呢?
有的話其實他裡面的 TwwDBNavigator 有你要的功能,可以針對需要的按鈕做 Enabled / Disabled


如果沒有的話,小弟繼承了 TDBNavigator, 加入 EnabledButton 的屬性,
其實都是去 Copy VisibleButton 的屬性來用的,用法和 VisibleButton 的方式一樣


[code delphi]
TExDBNavigator = Class(TDBNavigator)
private
FEnabledButtons: TNavButtonSet;
private
procedure SetEnabled(Value: TNavButtonSet);
public
property EnabledButtons: TNavButtonSet read FEnabledButtons write SetEnabled
default [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete,
nbEdit, nbPost, nbCancel, nbRefresh];
End;
procedure TExDBNavigator.SetEnabled(Value: TNavButtonSet);
var
I: TNavigateBtn;
begin
FEnabledButtons := Value;
for I := Low(Buttons) to High(Buttons) do
Buttons[I].Enabled := I in FEnabledButtons;
Invalidate;
end;
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-07-22 23:30:13, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-07-23 12:51:08 IP:210.66.xxx.xxx 未訂閱
謝謝carechen大的回覆。
我沒有Infopower的元件,我是用BCB6的……
覺得DELPHI轉成BCB6不是一件難事…但,我想我遇到麻煩了! @@

這個繼承功能我寫不出來 (暈死) !
原來不只是簡單的 「:=」改「=」或是「.」改成「->」

還請左右開攻(DELPHI / BCB)的賢達幫忙小翻一下吧~~~~~感激不盡!謝謝!

===================引 用 careychen 文 章===================
不知 GrandRURU 版大有沒有 Infopower 的元件呢?
有的話其實他裡面的 TwwDBNavigator 有你要的功能,可以針對需要的按鈕做 Enabled / Disabled


如果沒有的話,小弟繼承了 TDBNavigator, 加入 EnabledButton 的屬性,
其實都是去 Copy VisibleButton 的屬性來用的,用法和 VisibleButton 的方式一樣

43...
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-07-23 18:24:51 IP:218.210.xxx.xxx 訂閱
HI GrandRURU
以下是 bcb 的語法,你看一下囉, 小弟也是第一次轉 @@" 還真有點 $*^#^!# ,
我卡在 Button[I].Enabled := I in FEnabledButtons; 還好有會 VC 的同事 @@"
跟我說在 C 裡兩個集合的使用方法, 不然我也快暈倒

放在 .h 的
[code cpp]
class TExDBNavigator : public TDBNavigator
{
typedef TDBNavigator inherited;
private:
TNavButtonSet FEnabledButtons;
private:
HIDESBASE void __fastcall SetEnabled(TNavButtonSet Value);
public:
__property TNavButtonSet EnabledButtons = {read=FEnabledButtons,write=SetEnabled,default=1023};
__fastcall TExDBNavigator(TComponent* AOwner);
};
[/code]

放在 .cpp 的
[code cpp]
__fastcall TExDBNavigator::TExDBNavigator(TComponent* AOwner) : TDBNavigator(AOwner)
{
}
void __fastcall TExDBNavigator::SetEnabled(TNavButtonSet Value)
{
TNavigateBtn I;
FEnabledButtons = Value;
for (I = nbFirst; I <= nbRefresh; I=I 1) {
Buttons[I]->Enabled = FEnabledButtons.Contains(I);
}
Invalidate();
}
[/code]


===================引 用 GrandRURU 文 章===================
謝謝carechen大的回覆。
我沒有Infopower的元件,我是用BCB6的……
覺得DELPHI轉成BCB6不是一件難事…但,我想我遇到麻煩了! @@

這個繼承功能我寫不出來 (暈死) !
原來不只是簡單的 「:=」改「=」或是「.」改成「->」

還請左右開攻(DELPHI / BCB)的賢達幫忙小翻一下吧~~~~~感激不盡!謝謝!
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-07-23 18:27:28, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-07-23 18:52:48 IP:203.75.xxx.xxx 未訂閱
實際上修改還是有些問題

BCB沒有TNavButtonSet這個類別 @@
其它的…還在修改中……

大致修改如下,但還沒測試過,只有編譯成功而已。

*.h
[code cpp]
class TExDBNavigator : public TDBNavigator
{
typedef TDBNavigator inherited;
private:
TNavButtonStyle FEnabledButtons;
private:
HIDESBASE void __fastcall SetEnabled(TNavButtonStyle Value);
public:
__property TNavButtonStyle EnabledButtons = {read=FEnabledButtons,write=SetEnabled,default=1023};
__fastcall TExDBNavigator(TComponent* AOwner);
};
[/code]

*.cpp
[code cpp]
__fastcall TExDBNavigator::TExDBNavigator(TComponent* AOwner) : TDBNavigator(AOwner)
{
}
//---------------------------------------------------------------------------
void __fastcall TExDBNavigator::SetEnabled(TNavButtonStyle Value)
{
TNavigateBtn I;
FEnabledButtons = Value;
for (I = nbFirst; I <= nbRefresh; I=I 1) {
Buttons[I]->Enabled = FEnabledButtons.Contains(I);
}
Invalidate();
}
[/code]
編輯記錄
GrandRURU 重新編輯於 2008-07-23 19:01:29, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-07-23 19:00:47 IP:218.210.xxx.xxx 訂閱
你 include DBCtrls.hpp 就行了 這個在 BCB 的資料夾底下 include\VCL\ <== 如果沒有的話......
小弟是用 C Builder 2007 的,我有這個檔...... 或是我傳給你囉
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-07-23 20:41:56, 註解 加入紅色 include DBCtrls.hpp 的部份‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-07-23 19:37:39 IP:203.75.xxx.xxx 未訂閱
請問是什麼檔呢?
目前我已經可以正常編譯了,但還不知道如何控制button的enable跟disable……
程式碼如下:
[code cpp]
class TExDBNavigator : public TDBNavigator
{
typedef TDBNavigator inherited;
private:
TNavButtonStyle FEnabledButtons;
private:
HIDESBASE void __fastcall SetEnabled(TNavButtonStyle Value);
public:
__property TNavButtonStyle EnabledButtons = {read=FEnabledButtons,write=SetEnabled,default=1023};
__fastcall TExDBNavigator(TComponent* AOwner);
};
TExDBNavigator *a;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall TExDBNavigator::TExDBNavigator(TComponent* AOwner) : TDBNavigator(AOwner)
{
}
//---------------------------------------------------------------------------
void __fastcall TExDBNavigator::SetEnabled(TNavButtonStyle Value)
{
TNavigateBtn I;
FEnabledButtons = Value;
for (I = nbFirst; I <= nbRefresh; I=I 1) {
Buttons[I]->Enabled = FEnabledButtons.Contains(I);
}
Invalidate();
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
a = new TExDBNavigator(this);
a->Parent = Form1;
a->Top = 10;
a->Left = 10;
a->Width = 500;
a->Height = 100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//如果我要將nbFirst的按扭變成Disable(灰色)的話請問這邊該如何下指令呢?
}
//---------------------------------------------------------------------------
[/code]
編輯記錄
GrandRURU 重新編輯於 2008-07-23 19:40:02, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-07-23 20:39:37 IP:218.210.xxx.xxx 訂閱
[code cpp]
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//如果我要將nbFirst的按扭變成Disable(灰色)的話請問這邊該如何下指令呢?
// 這是小弟在 help 上看到用來設定 VisibleButtons 的
// 也就是,有列出來的,表示可以動作
a->EnabledButtons = a->EnabledButtons << nbPrior << nbNext << nbDelete
<< nbEdit << nbPost << nbLast << nbInsert << nbCancel << nbRefresh;

}
//---------------------------------------------------------------------------
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-07-23 20:40:27, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-07-23 23:02:02 IP:118.167.xxx.xxx 未訂閱
我終於知道原因了!

以下是CodeGear C Builder 2007 TNavButtonSet的原式
DBCtrls.hpp:
[code cpp]
typedef Set TNavButtonSet;
[/code]

Borland C Builder 6 ………
還真的沒有這個定義!

但是!
它有以下這個……
DBCtrls.hpp:
[code cpp]
typedef Set TButtonSet;
[/code]

看到這邊就豁然開朗了!(笑)
也就是說,在bcb6中只要將原來的TNavButtonSet改成TButtonSet,就可以成功使用carechen大提供的範列!
真是太感謝您了!
謝謝carechen大大不吝提供指導!再次感謝!
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-07-23 23:36:46 IP:218.210.xxx.xxx 訂閱
不客氣,教學相長嘛~~~,為了你的問題,我第一次開 C++ Builder ,
總算是看到了 C Builder ..... 慢的地方,滑鼠一滑到屬性的地方,
畫面就會 hung 住,似乎一直在找他所屬的 NameSpace,
都要過一下子才會動

不過看來你也同時有 BCB6 和 BCB 2007 的樣子哦

不管如何,能解決了你的問題才是令我高興的地方,有機會多交流吧!!
------
價值的展現,來自於你用哪一個角度來看待它!!
shinnuei
一般會員


發表:32
回覆:48
積分:21
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2010-04-20 17:08:28 IP:220.130.xxx.xxx 訂閱
請問如何把 TNavButtonSet 改成 TButtonSet呢?

我在 DBCtrls.hpp 中找不到 TNavButtonSet 這個字串耶...
===================引 用 GrandRURU 文 章===================Borland C Builder 6 ………
還真的沒有這個定義!

但是!
它有以下這個……
DBCtrls.hpp:
[code cpp]
typedef Set TButtonSet;
[/code]

看到這邊就豁然開朗了!(笑)
也就是說,在bcb6中只要將原來的TNavButtonSet改成TButtonSet,就可以成功使用carechen大提供的範列!
真是太感謝您了!
謝謝carechen大大不吝提供指導!再次感謝!
系統時間:2024-03-29 23:40:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!