如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? |
答題得分者是:jow
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
請問各位先進~
如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? 就是.. 小弟目前已做了DLL 用MDI呼叫DLL後. 會在MDI下方的任務欄裡產生按鍵 但是在開啟別的一般的子FORM後(子FORM也會在任務欄裡產生按鍵) 問題來囉.. 小弟想要按任務欄裡的DLL按鍵... 這裡的語法..請問要如何下呢?? 能否給小弟個方向.. 小弟已經想很久爬文很久了.. 都找不到方法..!! 希望各位先進能指點小弟...在此感謝...!! 編輯記錄
shine0989 重新編輯於 2010-04-12 17:17:45, 註解 請問各位先進~有辦法嗎??‧
|
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
你所謂的任務欄是指?
按鍵是指Button嗎? 是否只是被一般Child Form生成的按鍵覆蓋? ===================引 用 shine0989 文 章=================== 請問各位先進~ 如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? 就是.. 小弟目前已做了DLL 用MDI呼叫DLL後. 會在MDI下方的任務欄裡產生按鍵 但是在開啟別的一般的子FORM後(子FORM也會在任務欄裡產生按鍵) 問題來囉.. 小弟想要按任務欄裡的DLL按鍵... 這裡的語法..請問要如何下呢?? 能否給小弟個方向.. 小弟已經想很久爬文很久了.. 都找不到方法..!! 希望各位先進能指點小弟...在此感謝...!!
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
eaglewolf大大又見面了..感謝您的回覆..^^
是的..!! 我任務欄的按鍵是指Button~ (就是MDI最下方那一欄) 但是我DLL的Button是沒有被Child Form生成的按鍵所覆蓋~ 我開Form 的順序如下↓ (1)先開DLL的Form(此時MDI的任務欄裡就有DLL的Button按鍵) (2)再開Child Form (此時MDI的任務欄裡也會有Child Form的Button按鍵~並且DLL的Form會自動縮小) (3)這時候我想要做的事是~把DLL的Form再呼叫回來!!所以就往MDI的任務欄裡按下DLL的Button按鍵~ <這裡小弟就不會了...到底該如何去下語法呢???> ===================引 用 eaglewolf 文 章=================== 你所謂的任務欄是指? 按鍵是指Button嗎? 是否只是被一般Child Form生成的按鍵覆蓋? ===================引 用 shine0989 文 章=================== 請問各位先進~ 如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? 就是.. 小弟目前已做了DLL 用MDI呼叫DLL後. 會在MDI下方的任務欄裡產生按鍵 但是在開啟別的一般的子FORM後(子FORM也會在任務欄裡產生按鍵) 問題來囉.. 小弟想要按任務欄裡的DLL按鍵... 這裡的語法..請問要如何下呢?? 能否給小弟個方向.. 小弟已經想很久爬文很久了.. 都找不到方法..!! 希望各位先進能指點小弟...在此感謝...!! |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
hi
我還是不懂你所謂的任務欄是指什麼? 可以截取你的畫面po上來嗎? "按下DLL的Button按鍵" 直覺就是寫在該Button的OnClick事件啊 ===================引 用 shine0989 文 章=================== eaglewolf大大又見面了..感謝您的回覆..^^ 是的..!! 我任務欄的按鍵是指Button~ (就是MDI最下方那一欄) 但是我DLL的Button是沒有被Child Form生成的按鍵所覆蓋~ 我開Form 的順序如下↓ (1)先開DLL的Form(此時MDI的任務欄裡就有DLL的Button按鍵) (2)再開Child Form (此時MDI的任務欄裡也會有Child Form的Button按鍵~並且DLL的Form會自動縮小) (3)這時候我想要做的事是~把DLL的Form再呼叫回來!!所以就往MDI的任務欄裡按下DLL的Button按鍵~ <這裡小弟就不會了...到底該如何去下語法呢???> ===================引 用 eaglewolf 文 章=================== 你所謂的任務欄是指? 按鍵是指Button嗎? 是否只是被一般Child Form生成的按鍵覆蓋? ===================引 用 shine0989 文 章=================== 請問各位先進~ 如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? 就是.. 小弟目前已做了DLL 用MDI呼叫DLL後. 會在MDI下方的任務欄裡產生按鍵 但是在開啟別的一般的子FORM後(子FORM也會在任務欄裡產生按鍵) 問題來囉.. 小弟想要按任務欄裡的DLL按鍵... 這裡的語法..請問要如何下呢?? 能否給小弟個方向.. 小弟已經想很久爬文很久了.. 都找不到方法..!! 希望各位先進能指點小弟...在此感謝...!!
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
非常感謝eaglewolf大大的回覆..^^
先不要談任務欄好了.. 就照大大所說的 我用一般的Button來呼叫我先前已開的DLL的Form~!! 請是大大是這樣子下嗎↓ procedure TMainForm.Button1Click(Sender: TObject); begin if WindowState <> wsNormal then WindowState := wsNormal; end; 但是這樣下要怎麼指定我先前已開DLL的Form呢?? 現在問題就出在這裡... 請大大幫忙 ><" ===================引 用 eaglewolf 文 章=================== hi 我還是不懂你所謂的任務欄是指什麼? 可以截取你的畫面po上來嗎? "按下DLL的Button按鍵" 直覺就是寫在該Button的OnClick事件啊 ===================引 用 shine0989 文 章=================== eaglewolf大大又見面了..感謝您的回覆..^^ 是的..!! 我任務欄的按鍵是指Button~ (就是MDI最下方那一欄) 但是我DLL的Button是沒有被Child Form生成的按鍵所覆蓋~ 我開Form 的順序如下↓ (1)先開DLL的Form(此時MDI的任務欄裡就有DLL的Button按鍵) (2)再開Child Form (此時MDI的任務欄裡也會有Child Form的Button按鍵~並且DLL的Form會自動縮小) (3)這時候我想要做的事是~把DLL的Form再呼叫回來!!所以就往MDI的任務欄裡按下DLL的Button按鍵~ <這裡小弟就不會了...到底該如何去下語法呢???> ===================引 用 eaglewolf 文 章=================== 你所謂的任務欄是指? 按鍵是指Button嗎? 是否只是被一般Child Form生成的按鍵覆蓋? ===================引 用 shine0989 文 章=================== 請問各位先進~ 如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? 就是.. 小弟目前已做了DLL 用MDI呼叫DLL後. 會在MDI下方的任務欄裡產生按鍵 但是在開啟別的一般的子FORM後(子FORM也會在任務欄裡產生按鍵) 問題來囉.. 小弟想要按任務欄裡的DLL按鍵... 這裡的語法..請問要如何下呢?? 能否給小弟個方向.. 小弟已經想很久爬文很久了.. 都找不到方法..!! 希望各位先進能指點小弟...在此感謝...!! |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
依你的情形要寫在DLL的form裡
所以你的DLL要提供一個procedure 讓MainForm可以呼叫 或是你的DLL可以有function可以回傳一個Form物件代表透過dll產生的form 那麼可以改成 [code delphi] procedure TMainForm.Button1Click(Sender: TObject); begin if dllForm. WindowState <> wsNormal then dllForm.WindowState := wsNormal; dllForm.BringToFront; end; [/code] ===================引 用 shine0989 文 章=================== 非常感謝eaglewolf大大的回覆..^^ 先不要談任務欄好了.. 就照大大所說的 我用一般的Button來呼叫我先前已開的DLL的Form~!! 請是大大是這樣子下嗎↓ procedure TMainForm.Button1Click(Sender: TObject); begin if WindowState <> wsNormal then WindowState := wsNormal; end; 但是這樣下要怎麼指定我先前已開DLL的Form呢?? 現在問題就出在這裡... 請大大幫忙 ><" ===================引 用 eaglewolf 文 章=================== hi 我還是不懂你所謂的任務欄是指什麼? 可以截取你的畫面po上來嗎? "按下DLL的Button按鍵" 直覺就是寫在該Button的OnClick事件啊 ===================引 用 shine0989 文 章=================== eaglewolf大大又見面了..感謝您的回覆..^^ 是的..!! 我任務欄的按鍵是指Button~ (就是MDI最下方那一欄) 但是我DLL的Button是沒有被Child Form生成的按鍵所覆蓋~ 我開Form 的順序如下↓ (1)先開DLL的Form(此時MDI的任務欄裡就有DLL的Button按鍵) (2)再開Child Form (此時MDI的任務欄裡也會有Child Form的Button按鍵~並且DLL的Form會自動縮小) (3)這時候我想要做的事是~把DLL的Form再呼叫回來!!所以就往MDI的任務欄裡按下DLL的Button按鍵~ <這裡小弟就不會了...到底該如何去下語法呢???> ===================引 用 eaglewolf 文 章=================== 你所謂的任務欄是指? 按鍵是指Button嗎? 是否只是被一般Child Form生成的按鍵覆蓋? ===================引 用 shine0989 文 章=================== 請問各位先進~ 如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? 就是.. 小弟目前已做了DLL 用MDI呼叫DLL後. 會在MDI下方的任務欄裡產生按鍵 但是在開啟別的一般的子FORM後(子FORM也會在任務欄裡產生按鍵) 問題來囉.. 小弟想要按任務欄裡的DLL按鍵... 這裡的語法..請問要如何下呢?? 能否給小弟個方向.. 小弟已經想很久爬文很久了.. 都找不到方法..!! 希望各位先進能指點小弟...在此感謝...!!
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] unit fMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TfrmMain = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); public function GetChildForm(AClassName: string; var f: TForm): Boolean; end; var frmMain: TfrmMain; implementation uses fChild1, fChild2; {$R *.dfm} function TfrmMain.GetChildForm(AClassName: string; var f: TForm): Boolean; var I: Integer; begin f := nil; for I := 0 to MDIChildCount-1 do begin if MDIChildren[I].ClassNameIs(AClassName) then begin f := MDIChildren[I]; Break; end; end; if f = nil then begin if AClassName = 'TfrmChild1' then f := TfrmChild1.Create(Self) else if AClassName = 'TfrmChild2' then f := TfrmChild2.Create(Self) end; Result := f <> nil; end; procedure TfrmMain.Button1Click(Sender: TObject); var f: TfrmChild1; begin if GetChildForm('TfrmChild1',TForm(f)) then begin f.WindowState := wsNormal; f.BringToFront; end; end; procedure TfrmMain.Button2Click(Sender: TObject); var f: TfrmChild2; begin if GetChildForm('TfrmChild2',TForm(f)) then begin f.WindowState := wsNormal; f.BringToFront; end; end; end. [/code] |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝jow大大所提供的範例..
請問大大PO的範例 是呼叫DLL的FORM嗎?? 因為小弟試不出來...><" 應該是小弟太嫩了...唉..!! ===================引 用 jow 文 章=================== [code delphi] unit fMain; interface uses ? Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ? Dialogs, StdCtrls, ExtCtrls; type ? TfrmMain = class(TForm) ??? Panel1: TPanel; ??? Button1: TButton; ??? Button2: TButton; ??? procedure Button1Click(Sender: TObject); ??? procedure Button2Click(Sender: TObject); ? public ??? function GetChildForm(AClassName: string; var f: TForm): Boolean; ? end; var ? frmMain: TfrmMain; implementation uses fChild1, fChild2; {$R *.dfm} function TfrmMain.GetChildForm(AClassName: string; var f: TForm): Boolean; var ? I: Integer; begin ? f := nil; ? for I := 0 to MDIChildCount-1 do ? begin ??? if MDIChildren[I].ClassNameIs(AClassName) then ??? begin ? f := MDIChildren[I]; ? Break; ??? end; ? end; ? if f = nil then ? begin ? if AClassName = 'TfrmChild1' then f := TfrmChild1.Create(Self) ??? else? if AClassName = 'TfrmChild2' then f := TfrmChild2.Create(Self) ? end; ? Result := f <> nil; end; procedure TfrmMain.Button1Click(Sender: TObject); var ? f: TfrmChild1; begin ? if GetChildForm('TfrmChild1',TForm(f)) then ? begin ??? f.WindowState := wsNormal; ??? f.BringToFront; ? end; end; procedure TfrmMain.Button2Click(Sender: TObject); var ? f: TfrmChild2; begin ? if GetChildForm('TfrmChild2',TForm(f)) then ? begin ??? f.WindowState := wsNormal; ??? f.BringToFront; ? end; end; end. [/code] ? |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝eaglewolf大大的回覆..^^
試了許久... 做不出大大說的><" 大大的用法小弟還是不太明白.. 能否再白語一點點..呢..^^" 先感謝您..m(_ _)m ===================引 用 eaglewolf 文 章=================== 依你的情形要寫在DLL的form裡 所以你的DLL要提供一個procedure 讓MainForm可以呼叫 或是你的DLL可以有function可以回傳一個Form物件代表透過dll產生的form 那麼可以改成 [code delphi] procedure TMainForm.Button1Click(Sender: TObject); begin if dllForm. WindowState <> wsNormal then ? ? dllForm.WindowState := wsNormal; dllForm.BringToFront; end; [/code] ===================引 用 shine0989 文 章=================== 非常感謝eaglewolf大大的回覆..^^ 先不要談任務欄好了.. 就照大大所說的 我用一般的Button來呼叫我先前已開的DLL的Form~!! 請是大大是這樣子下嗎↓ procedure TMainForm.Button1Click(Sender: TObject); begin if WindowState <> wsNormal then WindowState := wsNormal; end; 但是這樣下要怎麼指定我先前已開DLL的Form呢?? 現在問題就出在這裡... 請大大幫忙 ><" ===================引 用 eaglewolf 文 章=================== hi 我還是不懂你所謂的任務欄是指什麼? 可以截取你的畫面po上來嗎? "按下DLL的Button按鍵" 直覺就是寫在該Button的OnClick事件啊 ===================引 用 shine0989 文 章=================== eaglewolf大大又見面了..感謝您的回覆..^^ 是的..!! 我任務欄的按鍵是指Button~ (就是MDI最下方那一欄) 但是我DLL的Button是沒有被Child Form生成的按鍵所覆蓋~ 我開Form 的順序如下↓ (1)先開DLL的Form(此時MDI的任務欄裡就有DLL的Button按鍵) (2)再開Child Form (此時MDI的任務欄裡也會有Child Form的Button按鍵~並且DLL的Form會自動縮小) (3)這時候我想要做的事是~把DLL的Form再呼叫回來!!所以就往MDI的任務欄裡按下DLL的Button按鍵~ <這裡小弟就不會了...到底該如何去下語法呢???> ===================引 用 eaglewolf 文 章=================== 你所謂的任務欄是指? 按鍵是指Button嗎? 是否只是被一般Child Form生成的按鍵覆蓋? ===================引 用 shine0989 文 章=================== 請問各位先進~ 如何將MDI的任務欄裡的DLL按鍵再次顯示出來~? 就是.. 小弟目前已做了DLL 用MDI呼叫DLL後. 會在MDI下方的任務欄裡產生按鍵 但是在開啟別的一般的子FORM後(子FORM也會在任務欄裡產生按鍵) 問題來囉.. 小弟想要按任務欄裡的DLL按鍵... 這裡的語法..請問要如何下呢?? 能否給小弟個方向.. 小弟已經想很久爬文很久了.. 都找不到方法..!! 希望各位先進能指點小弟...在此感謝...!! |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
TestDll009.DLL
[code delphi] library TestDll009; uses SysUtils, Classes, Forms, fChild1 in 'UNIT\fChild1.pas' {frmChild1}, fChild2 in 'UNIT\fChild2.pas' {frmChild2}; {$R *.res} function GetChildForm(MDIMainForm: TForm; AClassName: string; var f: TForm): Boolean; var I: Integer; begin f := nil; for I := 0 to MDIMainForm.MDIChildCount-1 do begin if MDIMainForm.MDIChildren[I].ClassNameIs(AClassName) then begin f := MDIMainForm.MDIChildren[I]; Break; end; end; if f = nil then begin if AClassName = 'TfrmChild1' then f := TfrmChild1.Create(MDIMainForm) else if AClassName = 'TfrmChild2' then f := TfrmChild2.Create(MDIMainForm) end; Result := f <> nil; end; exports GetChildForm; begin end. [/code] TestD009.EXE [code delphi] unit fMain; interface uses Classes,Forms, StdCtrls, Controls, ExtCtrls; type TfrmMain = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; function GetChildForm(MDIMainForm: TForm; AClassName: string; var f: TForm): Boolean; external 'TestDll009.dll'; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.Button1Click(Sender: TObject); var f: TForm; begin if GetChildForm(Self,'TfrmChild1',f) then begin f.WindowState := wsNormal; f.BringToFront; end; end; procedure TfrmMain.Button2Click(Sender: TObject); var f: TForm; begin if GetChildForm(Self,'TfrmChild2',f) then begin f.WindowState := wsNormal; f.BringToFront; end; end; end. [/code] |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝 jow 大大的回覆以及範例...
小弟試了.. 好奇怪喔.. 一定是小弟太差了. 我按下Button 後..DLL的Form並沒有開啟耶 ><" 請問 jow 大大.. DLL的Form是要設定什麼嗎??? 還是一般的就OK??? 還是要設 fsMDIChild 以及 wsMaximized ??? 請大大再次的教教小弟.....!! ===================引 用 jow 文 章=================== TestDll009.DLL [code delphi] library TestDll009; uses ? SysUtils, ? Classes, ? Forms, ? fChild1 in 'UNIT\fChild1.pas' {frmChild1}, ? fChild2 in 'UNIT\fChild2.pas' {frmChild2}; {$R *.res} ? function GetChildForm(MDIMainForm: TForm; AClassName: string; var f: TForm): Boolean; ? var ??? I: Integer; ? begin ??? f := nil; ??? for I := 0 to MDIMainForm.MDIChildCount-1 do ??? begin ? if MDIMainForm.MDIChildren[I].ClassNameIs(AClassName) then ? begin ??? f := MDIMainForm.MDIChildren[I]; ??? Break; ? end; ??? end; ??? if f = nil then ??? begin ??? if AClassName = 'TfrmChild1' then f := TfrmChild1.Create(MDIMainForm) ? else? if AClassName = 'TfrmChild2' then f := TfrmChild2.Create(MDIMainForm) ??? end; ??? Result := f <> nil; ? end; exports GetChildForm; begin end. [/code] TestD009.EXE [code delphi] unit fMain; interface uses ? Classes,Forms, StdCtrls, Controls, ExtCtrls; type ? TfrmMain = class(TForm) ??? Panel1: TPanel; ??? Button1: TButton; ??? Button2: TButton; ??? procedure Button1Click(Sender: TObject); ??? procedure Button2Click(Sender: TObject); ? end; ? function GetChildForm(MDIMainForm: TForm; AClassName: string; var f: TForm): Boolean; external 'TestDll009.dll'; var ? frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.Button1Click(Sender: TObject); var ? f: TForm; begin ? if GetChildForm(Self,'TfrmChild1',f) then ? begin ??? f.WindowState := wsNormal; ??? f.BringToFront; ? end; end; procedure TfrmMain.Button2Click(Sender: TObject); var ? f: TForm; begin ? if GetChildForm(Self,'TfrmChild2',f) then ? begin ??? f.WindowState := wsNormal; ??? f.BringToFront; ? end; end; end. [/code] ? |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
jow 大大不好意思..
可否再請問一個問題.. 小弟執行您的範例之後.. 連續開了二個DLL窗體之後.. 當我要關掉其中一個時.. 結果是變成縮小了... 小弟的關掉的語法是 self.Close; 這樣有錯嗎?? 還是是要別種關掉的語法呢?? ===================引 用 jow 文 章=================== 測試程式,提供你參考 http://delphi.ktop.com.tw/download.php?download=upload/4bcd12631a902_TestD009.zip |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |