![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как закрыть нужную форму?
sergeyst © (2007-05-02 14:21:00)Привет всем. Есть несколько различных MDI-форм. При создании любой из них на тулбаре в главной форме создается кнопка, при нажатии на которую отображается соотв. окно. Хочу сделать всплывающее меню для этой кнопки с пунктом "Закрыть", но не знаю как сказать кнопке какая форма ей нужна.
Это создание кнопки
procedure CreatePopupForButton(Sender: TSpeedButton; Form: TForm);
var
mi: TMenuItem;
pm: TPopupMenu;
begin
pm := TPopupMenu.Create(Sender);
Sender.PopupMenu := pm;
mi := TMenuItem.Create(pm);
mi.Caption := 'Закрыть';
mi.OnClick := CloseF;
pm.Items.Add(mi);
Что здесь можно сделать с Form - я не знаю. Подскажите, плиз.
sergeyst (2007-05-02 15:54:00) [1]Ой, MyObject был классом, а не объектом. Теперь работает. Спасибо.
iXT (2007-05-02 15:52:00) [2]Т.Е. я не увидел, как ты создаешь батоны, но это уже второе. Первое, определись, как у тебя определенный батон соответствует определенной форме
sergeyst (2007-05-02 14:45:00) [3]mi.Tag := Integer(Form); - это связал
procedure CloseF(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Pred(MainForm.MDIChildCount) do
if (Sender as TMenuItem).Tag = Integer(MainForm.MDIChildren[i]) then
begin
MainForm.MDIChildren[i].Close;
Exit;
end;
end;
это закрыл, но компилятор говорит:
[Error] LibraryUnit.pas(528): Incompatible types: 'method pointer and regular procedure'
, а если сделать
...
mi.OnClick = MyObject.CloseF;
...
procedure MyObject.CloseF..., то:
Incompatible types: 'TNotifyEvent' and 'Procedure'
Чего надо изменить?
sergeyst (2007-05-02 14:45:00) [4]
> И как они у тебя описанны.
То есть?
iXT (2007-05-02 14:36:00) [5]Все зависит от того, как ты собрался связывать Окно и кнопку (логически). И как они у тебя описанны.