有關TMainMenu元件 |
尚未結案
|
Dark852
一般會員 發表:14 回覆:19 積分:6 註冊:2004-09-25 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
Dark852
一般會員 發表:14 回覆:19 積分:6 註冊:2004-09-25 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
Dark852
一般會員 發表:14 回覆:19 積分:6 註冊:2004-09-25 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
先前我已經說明過
如果您要建立 TMyMenuItem 繼承TMenuItem
那麼就一定要,在建立一個新的MainMenu來處理
TMyMenuItem 多出來的屬性。 至於原本的MainMenu處理TMenuItem
可以不用管他。 先在主要的困難點,在於IDE設計時 如何在原本選單編輯程式中。
新增的是 TMyMenuItem 而非 TMenuItem 由於涵蓋的範圍太廣。恕我太懶..... :=)
看看別人的成品吧! 因此您不可能在用 TMainMenu --> TmyMenuItem(除非直接修改 Menus.pas)
應該是 TMyMainMenu --> TMyMenuItem
|
Dark852
一般會員 發表:14 回覆:19 積分:6 註冊:2004-09-25 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
Dark852
一般會員 發表:14 回覆:19 積分:6 註冊:2004-09-25 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
GDMichael
一般會員 發表:27 回覆:36 積分:12 註冊:2004-10-13 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
TMainMenu 與 TmenuItem 實在很難劃清。
並且 Delphi 所提供的繼承方法,彈性有限。 我之前是修改PageControl 的 TTabSheet,所以稍稍還有點這方面的概念。
由於 TMainMenu與TmenuItem,實在太難令人繼承了。
所以很多元件,都自己修改 Menus.Pas 並另起爐灶。
像是我之前所言的TIAeverMain這一個元件一樣。 但是像PageControl的TTabSheet,要修改還是比較簡單。 type
TEvPageControlEditor = class(TDefaultEditor)
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end; procedure TEvPageControlEditor.ExecuteVerb(Index: Integer);
Type
TSheetClass = Class of TTabSheet;
var
PageCtl : TEvPageControl;
Page : TTabSheet;
Designer : IFormDesigner; Procedure CreatePageSheet(SheetClass:TSheetClass;Var SheetRef:TTabSheet);
begin
SheetRef := SheetClass.Create(Designer.Form);
try
With SheetRef do
begin
Name := Designer.UniqueName(SheetClass.ClassName);
Parent := PageCtl;
PageControl := PageCtl;
Visible := PageCtl.TabsVisible;
end;
except
SheetRef.Free;
raise
end;
PageCtl.ActivePage := SheetRef;
end;
begin
if Component is TTabSheet
then PageCtl := TTabSheet(Component).PageControl as TEvPageControl
else PageCtl := TEvPageControl(Component); if PageCtl <> nil then
begin
Designer := Self.Designer;
Case Index of
0 :CreatePageSheet(TEvTabSheet,Page);
1 :CreatePageSheet(TEvWallTabSheet,Page);
2,3:begin
Page := PageCtl.FindNextPage(PageCtl.ActivePage,Index = 2, False) as TTabSheet;
if (Page <> nil) and (Page <> PageCtl.ActivePage) then PageCtl.ActivePage := Page
end;
end;
Designer.SelectComponent(Page);
Designer.Modified
end
end; function TEvPageControlEditor.GetVerb(Index: Integer): string;
begin
case Index of
0 : Result := 'New Page';
1 : Result := 'New WallPage';
2 : Result := 'Next Page';
3 : Result := 'Previous Page'
end
end; function TEvPageControlEditor.GetVerbCount: Integer;
begin
Result := 4
end; 我建立編輯器 TEvPageControlEditor 已取代我們在PageControl上
按下右鍵,不是有一POPUPMENU / New Page/NextPage ....選項。 在這裡我們可以看到,在 New Page 項目中
我已經取代原本建立TTabSheet 改為我自己的 TEVTabSheet 由於 TMAINMENU 要修改MenuItem ,可比這個還要難上許多。
所以我建議倒不如 直接套用修改 Menus.pas 到新的物件上。
這樣的出發點,可能容易許多了。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |