Nil'i sahip olarak belirtebilirsiniz, ana öğe kendi öğelerini serbest bırakır.
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
mi: TMenuItem;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
end;
..
procedure TForm1.Button1Click(Sender: TObject);
begin
mi := TMenuItem.Create(nil);
mi.FreeNotification(Self);
PopupMenu1.Items.Add(mi);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PopupMenu1.Free;
end;
procedure TForm1.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (AComponent = mi) and (Operation = opRemove) then
ShowMessage('mi freed');
end;
: O bildirim mekanizmasını kullanabilir eylem görmek için, yeterli değilse
destructor TMenuItem.Destroy;
begin
..
while Count > 0 do Items[0].Free;
..
end;
: doğrulayarak gelince
, en kolay TMenuItem.Destroy
kodu görmektir Öğeyi önce açılır menüye eklemek için Düğme1'e basın. Ardından, Popup'u boşaltmak için Button2'ye basın. Öğe, yok edildiğinde formunuzu bildirir.
Anlaşıldı. Bununla birlikte, bir formun örneğin Form1'i kullanması durumunda * bir sorun olur mu? Form1 Free TMenuItem de tekrar olmaz mıydı? (ilk soruda bahsetmediğim için üzgünüm) – Vlad
@ Vlad - Hayır, bir problem olmayacak. Öğeyi (form veya ana öğe) serbest bıraktıktan sonra, öğe ebeveynlerinin öğelerinden kaldırılacaktır. –
Çok iyi bir cevap için teşekkür ederim! – Vlad