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

如何利用資料庫設定動態的MainMenu下拉選項

答題得分者是:goat
rany
一般會員


發表:15
回覆:26
積分:8
註冊:2007-05-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-12 16:40:41 IP:220.132.xxx.xxx 訂閱
以下問題請各位大大提供思考方向或參考,謝謝!

我要用MainMenu去呼叫其他程式,但是因為程式會陸續開發的緣故,為了不再因為每次新增程式時就得在MainMenu上新增一個Click,所以不知道有沒有方法可以利用關聯的Table維護,當新增一項時程式就會在MainMenu上依照類別自動下拉增加呢?

譬如:
1.MainMenu有三個類別為
>>N1:維護,N2:查詢,N3:轉檔

2.有個管控的Table有以下欄位
>>程式名稱 VARCHAR2(30) ---TEST.EXE
>>顯示名稱 VARCHAR2(50) ---測試
>>類別 VARCHAR2(3) ---N1
>>類別序號 VARCHAR2(2) ---1


當我在管控的Table上新增了一筆(TEST.EXE,測試,N1,1)時,MainMenu上的NI就會多一個下拉為"測試"的Click,可以讓USER 開啟TEST.EXE這支程式。

請問我該如何設定呢?在此先謝謝大家....
編輯記錄
rany 重新編輯於 2008-06-12 16:41:50, 註解 無‧
rany 重新編輯於 2008-06-12 16:43:18, 註解 無‧
rany 重新編輯於 2008-06-12 16:44:28, 註解 無‧
maakite
一般會員


發表:4
回覆:7
積分:7
註冊:2007-04-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-12 18:26:27 IP:116.4.xxx.xxx 訂閱

===================引 用 rany 文 章===================
以下問題請各位大大提供思考方向或參考,謝謝!

我要用MainMenu去呼叫其他程式,但是因為程式會陸續開發的緣故,為了不再因為每次新增程式時就得在MainMenu上新增一個Click,所以不知道有沒有方法可以利用關聯的Table維護,當新增一項時程式就會在MainMenu上依照類別自動下拉增加呢?

譬如:
1.MainMenu有三個類別為
>>N1:維護,N2:查詢,N3:轉檔

2.有個管控的Table有以下欄位
>>程式名稱 VARCHAR2(30) ---TEST.EXE
>>顯示名稱 VARCHAR2(50) ---測試
>>類別 VARCHAR2(3) ---N1
>>類別序號 VARCHAR2(2) ---1


當我在管控的Table上新增了一筆(TEST.EXE,測試,N1,1)時,MainMenu上的NI就會多一個下拉為"測試"的Click,可以讓USER 開啟TEST.EXE這支程式。

請問我該如何設定呢?在此先謝謝大家....
如果每个模块是用EXE去执行的话,想要动态执行EXE
那么:A:需要知道执行EXE的路径,如果是主程序路经,则不需要别外说明.
B:执行的EXE的名字,你已经写入到TABLE里面 TEXT.EXE
C:设定一个函数来执行EXE,把EXE的名字写成动态,然后从TABLE读取相应的EXE程式
D:在MENU中自动列表来自于TABLE的EXE字段.
E: 在MENU的CLICK事件中,读取函数,用于自动执行动态的EXE程序










goat
高階會員


發表:53
回覆:130
積分:134
註冊:2002-06-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-13 15:10:21 IP:203.160.xxx.xxx 訂閱
大概是這樣..試試看...加油!

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
sCaption: string;
aMenuItem: TMenuItem;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'SELECT * FROM Table_Name';
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
sCaption := ADOQuery1.FieldByName('測試').AsString ' ' ADOQuery1.FieldByName('N1').AsString ' ' ADOQuery1.FieldByName('1').AsString;
aMenuItem := TMenuItem.Create(Self);
aMenuItem.Caption := sCaption;
aMenuItem.OnClick := miTreeClick;
miTree.Add(aMenuItem); //MainMenu上面你要加入的那個節點名稱
ADOQuery1.Next;
end;
end;

procedure TForm1.miTreeClick(Sender: TObject);
begin
//根據Menu的Caption,再去抓對應的執行檔名稱去執行就可以了。
end;
[/code]
pceyes
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-06-15 22:30:35 IP:220.141.xxx.xxx 訂閱
請問MainMenu如何能動態產生下拉選單?
http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=17944
寫了一範例程式,讀出Table設定MainMenu見下:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=17955
------
努力會更接近成功
rany
一般會員


發表:15
回覆:26
積分:8
註冊:2007-05-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-06-24 09:40:55 IP:220.132.xxx.xxx 訂閱
SORRY~ 我剛回國,未能於期限內答覆。
也因為對於各位大大詳細的解說還沒有測試,請版主再給我些時間結案喔!!...QQQ
rany
一般會員


發表:15
回覆:26
積分:8
註冊:2007-05-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-06-25 09:40:04 IP:220.132.xxx.xxx 訂閱
因為已於結案期限多日,故先行結案。但仍有些問題想請教,再煩請提供參考~QQQ

1.感謝goat提供了程式碼,可是出現錯誤不知如何修改
[Error] Unit1.pas(136): Undeclared identifier: 'forbidden
[Error] Unit1.pas(137): Undeclared identifier: 'miTree'

以及那個//根據Menu的Caption,再去抓對應的執行檔名稱去執行就可以了是不是像這樣??
procedure TForm1.miTreeClick(Sender: TObject);
begin
qryPROGID.Close;
qryPROGID.SQL.TEXT:='SELECT 程式名稱 FROM IPPFMENU WHERE IMU_NAME =顯示名稱 ';
qryPROGID.Open;
ShellExecute(handle,nil,(pchar('執行檔路徑')),nil,nil,Sw_shownormal);
end;

2.感謝pceyes幫我找到了之前的紀錄,測試後Menu已經可以依照類別看到所有下拉的顯示名稱,但是當我Click時卻沒反應
請問我是哪裡設定有問題嗎?

[code delphi]
procedure TForm1.MenuItemAdd;
var
I:integer;
begin
qryIPPFMENU.Close;
qryIPPFMENU.SQL.TEXT:=' SELECT *FROM IPPFMENU ';
qryIPPFMENU.Open;

setlength(MyMenu,qryIppfMenu.recordcount);
qryIPPFMENU.first;
I:=StrToInt(Copy(qryIPPFMENU.fieldbyname('IMU_KIND').Value,2,1));
while not qryIPPFMENU.Eof do
begin
MyMenu[i]:=TMenuItem.create(Application);
MyMenu[i].Caption:=qryIPPFMENU.fieldbyname('IMU_NAME').Value;
MyMenu[i].Visible:=true;
MyMenu[i].OnClick:= MenuItemClick;

IF qryIPPFMENU.fieldbyname('IMU_KIND').Value='N1' THEN N1.add(MyMenu[i])
ELSE IF qryIPPFMENU.fieldbyname('IMU_KIND').Value='N2' THEN N2.add(MyMenu[i])
ELSE IF qryIPPFMENU.fieldbyname('IMU_KIND').Value='N3' THEN N3.add(MyMenu[i]);
qryIPPFMENU.next;
end;
end;

procedure TForm1.MenuItemClick(Sender: TObject);
VAR
sendexec,SQL:string;
psendexec:pchar;
err,iBit:integer;
begin
iBit:=LENGTH((sender as tMenuItem).caption)-4; //因為顯示名稱會出現快速鍵(P)
qryPROGID.Close;
qryPROGID.SQL.TEST:='SELECT IMU_PROGID FROM IPPFMENU WHERE IMU_NAME =''' COPY((sender as tMenuItem).caption,1,iBit) ''' ';
qryPROGID.Open;

ShellExecute(handle,nil,(pchar('執行檔路徑')),nil,nil,Sw_shownormal);
[/code]
rany
一般會員


發表:15
回覆:26
積分:8
註冊:2007-05-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-06-25 10:01:09 IP:220.132.xxx.xxx 訂閱
因為已經結案的關係所以小妹又另行發表了一個新的問題
再麻請各位大大再給予協助~QQQ....

如以下連結:

動態的MainMenu的設定與開啟執行檔的關聯性
http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=94200
系統時間:2024-04-26 9:31:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!