如何共用PopupMenu菜单! |
尚未結案
|
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
引言: TEdit(Sender).Text := 'xyz'; 这样也不行, 它下一句end;就停下来了,说是内存问题.若那個是 TEdit 不會錯丫,除非你自己其他部份出錯。 引言: 其它的XXXX(sender)则没有这种用法. 我想用一种通用的办法,也不要case,因为菜单的项多,不够效率.那便用絕招罷 : uses typInfo if IsPublishedProp(Sender,'Text') then SetPropValue(Sender,'Text','xyz')); 不過若你自己的程式其他碼錯也是會出錯的啦。你想想找 typInfo 的資料到 Google 找 RTTI 罷。 |
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
你到底有沒試過???? 我說的方式凡是有 Text 這個屬性的元件都可設,沒 Text 屬性的元件當然不可設啦但也不會出錯。
無論是 TEdit, TComboBox 等都可設
如用 Caption 即 TLable, TPanel, TButton, TForm, 等所有有 Caption 屬性的都可設
同樣道理亦可設其他不同元件共通的屬性。 你還想甚樣 ? 要完全不寫程式碼,你心想電腦甚樣運行就甚樣運行嗎? 你是否看 Matrix 太多了以為自己是 The One 罷 發表人 -
|
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
Justmade版主 :
你误会了. 我看了其它的高手,他用的是BC,他说可以,但我不用BC,没法试,也没法用他说的方法. +++++++++++++++++++++++++++++++++++++++++++
我有多个同样的frame,想共用一个菜单,
怎样才能对发生事件的组件操作?
例如:
frame里有一个shelllistview组件,这个shelllistview共用PopupMenu菜单是form1里的PopupMenu1,
form1里动态产生几同样的frame,我想在shelllistview里弹出菜单,
操作相应的shelllistview来打开PopupMenu1里的path,path是
放在PopupMenu1的一个子菜单的hint里(我还没想到path放在哪里更好).
我这样说,清楚了吗? DT520 @>>>-->>---------一路风尘一路歌!!
|
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
我测试出错!!
测试环境:win2k server,delphi7.
程式如下:
设置:
//edit1.PopupMenu :=PopupMenu1;
//edit1.OEMConvert :=false; unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
PopupMenu1: TPopupMenu;
Button1: TButton;
test1: TMenuItem;
procedure test1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.test1Click(Sender: TObject);
begin
TEdit(Sender).Text := 'xyz';
end;//这一句出错! end. DT520 @>>>-->>---------一路风尘一路歌!!
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
對不起,是我錯。 Sender 在這個情況是 MenuItem 而非 Edit1 所以轉成 :
TEdit(ActiveControl).Text := 'xyz';
便可 我亦試過多放幾個 Panel 及 TEdit 並將所有 TEdit 的 popupmenu 設 PropUpMenu1,在所有不同地方的 TEdit 都可行。我也試過 ShellListView 也可行。 如你想安全點,可改成
if ActiveControl is TShellListView then
TShellListView(ActiveControl).AlphaSort;
|
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
|
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
在frame中测试通不过!!! 测试环境:win2k server,delphi7. TShellListView(ActiveControl).AlphaSort;//
[Error] Unit2.pas(28): Undeclared identifier: 'ActiveControl' 在form中TShellListView(ActiveControl).AlphaSort不提示出错,但很多属性不见了(等于不用).(可能是我不会用.) 对于tedit,TButton可以.但右键不会改变ActiveControl. 所以if 这一句不能省. Justmade版主 :
想想办法!! 操作相应的shelllistview来打开PopupMenu1里的path,path是
放在PopupMenu1的一个子菜单的hint里(我还没想到path放在哪里更好). DT520 @>>>-->>---------一路风尘一路歌!!
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
在 Frame 裡 Form 的 Active Control 應是變成 Frame 而不是 Frame 裡的 Control
那改用 Screen.ActiveControl 罷
procedure TForm1.MenuItem1Click(Sender: TObject); begin TShellListView(Screen.ActiveControl).Root := 'C:\'; end;用TShellListView(ActiveControl) 不會有屬性不見了,你是只用了一次次後沒加 TShellListView 罷,每次用都要加的否則 Delphi 不知他是 ShellListView 甚知可用甚麼屬性。 |
dt520
一般會員 發表:11 回覆:61 積分:14 註冊:2003-05-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |