我的乙個小程式,是這樣的: 將某一目錄底下所有的 *.txt 動態地建立於 某個menuitem下。
例如: c:/test 下有三個.txt , 分別是 aa.txt , bb.txt , cc.txt 。 當使用者點下 " 檔案 " 的功能選單時,會出現
___________________________
檔案(f)
---------------------------
| aa |
| bb |
| cc |
----------
如果又多乙個檔案 dd.txt ,則功能選單就多顯示dd 。
你問的問題...牽涉到的觀念與技術蠻廣的, 包括: 動態產生物件與其事件處理事件的指定, 另外就是找出指定目錄中的所有檔案. 您應該都可以在我的學習筆記(http://www.geocities.com/~wchien)找到相關的說明.
以下是針對這次你問題所提出的例子:
1. form 的設計
object mnumain: tmainmenu
left = 4
top = 4
object mnufile: tmenuitem
caption = '檔案'
shortcut = 0
endend
object button1: tbutton
left = 176
top = 56
width = 75
height = 25
caption = 'refresh menu'
taborder = 0
onclick = button1click
end2. 程式部分
unit unit1;
inte***ce
uses
windows, messages, sysutils, classes, graphics, controls, forms, dialogs,
menus, stdctrls;
type
tform1 = class(tform)
mnumain: tmainmenu;
mnufile: tmenuitem;
button1: tbutton;
procedure formcreate(sender: tobject);
procedure button1click(sender: tobject);
private
fdir: string;
procedure menuclick(sender: tobject);
procedure updatefilemenu;
public
end;
varform1: tform1;
implementation
procedure tform1.formcreate(sender: tobject);
begin
fdir := 'c:/temp/';
updatefilemenu;
end;
procedure tform1.menuclick(sender: tobject);
begin
if sender is tmenuitem then
winexec(pchar('notepad.exe ' + fdir + tmenuitem(sender).caption),
sw_normal);
end;
procedure tform1.updatefilemenu;
vari: integer;
searchrec: tsearchrec;
ifindresult: integer;
mnunew: tmenuitem;
begin
// 先將 file 下的 menuitem 砍光
for i := mnufile.count - 1 downto 0 do
mnufile.items[i].free;
// 逐一搜尋指定目錄的 .txt 檔案
ifindresult := findfirst(fdir + '*.txt', faanyfile, searchrec);
while ifindresult = 0 do
begin
// 動態產生乙個 tmenuitem
mnunew := tmenuitem.create(self);
with mnunew do
begin
caption := searchrec.name; // 以檔案作為 menu 的 caption
onclick := menuclick; // 在這 指定 onclick 事件
end;
mnufile.add(mnunew); // 加到[檔案]這個選單專案下
ifindresult := findnext(searchrec); // 繼續找下乙個 .txt 檔
end;
end;
procedure tform1.button1click(sender: tobject);
begin
updatefilemenu;
end;
end.
MenuItem建立注意事項
01 前幾天在弄那個setvisible的時候,那個getchildbytag需要型別轉換,否則會報錯!於是不經意間,將menuitem項從menu中提出來,後來沒有報錯,但也隨之出現乙個問題就是menuitem不能響應事件。換句話說,它變成了乙個精靈,所以才可以呼叫setvisible方法。02 ...
如何動態建立控制項
分配乙個控制項物件的例項並呼叫其create成員函式。開發者最容易忽略兩件 事 忘記指定ws visble標籤和在棧中分配控制項物件。下例動態地建立乙個下壓按 鈕控制項 in class declaration h file private cbutton m pbutton in class im...
如何釋放動態建立的TXMLDocument
如何動態建立,使用和釋放txmldocument 不出現訪問違例錯誤 如果您需要使用動態建立txmldocument元件,一旦您試圖釋放物件時您也許會得到訪問違例錯誤 access violations 如果txmldocument被作為元件使用,那麼它的生存期由它的所有者控制 您放置元件的窗體 如...