Если ваши формы получены от общего предка (а не по умолчанию TForm
), например TMyBaseForm
, что означает TForm1 = class(TMyBaseForm)
, это можно сделать легко. В мероприятии TMyBaseForm.OnShow
вы можете перебирать элементы управления, и если вы найдете или TMemo
, вы можете установить их свойство PopupMenu
динамически.
Другой способ заключается в использовании Screen.OnActiveFormChange
(Screen.OnActiveControlChange
пожары слишком поздно, если вы щелкните правой кнопкой мыши на активном управлении - EDIT: Это верно только с D5) в вашей основной обработчик формы событий, чтобы захватить активную форму и перебирать в Screen.ActiveForm
управления и установить TEdit
или TMemo
свойство PopupMenu
для пользовательских MyPopupMenu
:
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveFormChange := ActiveFormChange;
end;
procedure TForm1.ActiveFormChange(Sender: TObject);
begin
CustomEditControlsNormalize(Screen.ActiveForm);
end;
type
TCustomEditAccess = class(TCustomEdit);
procedure TForm1.CustomEditControlsNormalize(F: TForm);
var
I: Integer;
begin
if not Assigned(F) then Exit;
for I := 0 to F.ComponentCount - 1 do
if F.Components[I] is TCustomEdit then
TCustomEditAccess(F.Components[I]).Popupmenu := MyPopupMenu;
end;
чтобы определить, какие TCustomEdit
управления вызваны т он POPUPMENU всплывающих относятся к MyPopupMenu.PopupComponent
(в MyPopupMenu.OnPopup
случае):
procedure TForm1.MyPopupMenuPopup(Sender: TObject);
begin
if MyPopupMenu.PopupComponent is TCustomEdit then
begin
FEditPopupControl := TCustomEdit(MyPopupMenu.PopupComponent);
Caption := FEditPopupControl.Name; // debug :-P
end;
end;
EDIT:Screen.OnActiveControlChange
была моя первая мысль. Я тестировал его в D5. если Edit1 сфокусирован, и я нажимаю правой кнопкой мыши на Edit2, он сначала всплывает по умолчанию, только тогда он становится активным элементом управления. Я наконец испытал это с D7 и D2009. оба работают отлично. Это выпуск D5 только, поэтому Justmade's answer, безусловно, лучшее решение, чем использование Screen.OnActiveFormChange
.
Почему бы не просто подкласс TEdit и TMemo и поделиться им с контекстным меню? –
Если вы показали, как это сделать, @Warren, я ожидаю, что это попадет в сферу приемлемых ответов на этот вопрос. –