![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание компонента в run-time [D5, Win95/98, WinME, NT4, Win2k, WinXP]
Дмитрий К.К. © (2003-02-10 14:22:00)Если я создаю объект динамически следующим образом:
procedure TBookmarksForm.BookmarksSpeedButtonClick(Sender: TObject);
var
BookmarksPopupMenu: TPopupMenu;
AddBook: TMenuItem;
Point: TPoint;
begin
GetCursorPos(Point);
BookmarksPopupMenu := TPopupMenu.Create(Self);
AddBook := TMenuItem.Create(Self);
AddBook.Caption := "Add";
AddBook.Tag := 1;
AddBook.OnClick := AddBookClick;
BookmarksPopupMenu.Items.Add(AddBook);
........... (ля-ля-ля)
end;
то объекты BookmarksPopupMenu и AddBook удалятся при выходе из процедуры или только при закрытии формы?
Дмитрий К.К. (2003-02-10 15:34:00) [1]
> Danilka © (10.02.03 15:28)
> Removes and frees all menu items listed in the Items property.
Ет я первым делом посмотрел. Просто привычка уточнять.
Danilka (2003-02-10 15:28:00) [2]неужели лень в помощи посмотреть?
TMenuItem.Clear
Removes and freesall menu items listed in the Items property.
Дмитрий К.К. (2003-02-10 15:18:00) [3]А когда вызываем
BookmarksPopupMenu.Items.Clear
это очищает память от всяких AddBook или они продолжают в ней висеть?
Danilka (2003-02-10 15:16:00) [4]вроде того.
Дмитрий К.К. (2003-02-10 15:11:00) [5]Вот так?
procedure TBookmarksForm.BookmarksSpeedButtonClick(Sender: TObject);
var
AddBook: TMenuItem;
Point: TPoint;
begin
GetCursorPos(Point);
BookmarksPopupMenu.Items.Clear;
AddBook := TMenuItem.Create(Self);
AddBook.Caption := "Add";
AddBook.Tag := 1;
AddBook.OnClick := AddBookClick;
BookmarksPopupMenu.Items.Add(AddBook);
BookmarksPopupMenu.Popup(Point.x, Point.y);
end;
Danilka (2003-02-10 15:03:00) [6]Дмитрий К.К. © (10.02.03 14:53)
дык, тогда в начале процедуры прибивай пункты и создавай заново.
зачем само меню трогать?
Дмитрий К.К. (2003-02-10 14:53:00) [7]
> Danilka © (10.02.03 14:52)
> создай его при открытии формы.
> а в обработчике нажатия кнопки вызывай только popup
Пункты меню создаются динамически (их может и не быть)
Дмитрий К.К. (2003-02-10 14:52:00) [8]То есть так:
procedure TBookmarksForm.BookmarksSpeedButtonClick(Sender: TObject);
var
BookmarksPopupMenu: TPopupMenu;
AddBook: TMenuItem;
Point: TPoint;
begin
GetCursorPos(Point);
BookmarksPopupMenu := TPopupMenu.Create(nil);
AddBook := TMenuItem.Create(nil);
try
AddBook.Caption := "Add";
AddBook.Tag := 1;
AddBook.OnClick := AddBookClick;
BookmarksPopupMenu.Items.Add(AddBook);
{=====}
BookmarksPopupMenu.Popup(Point.x, Point.y);
finally
BookmarksPopupMenu.Free;
AddBook.Free;
end;
end;
Danilka (2003-02-10 14:52:00) [9]Дмитрий К.К. © (10.02.03 14:50)
конечно, ведь пока ты выберешь пункт меню, меню у тебя уже будет удалено.
создай его при открытии формы.
а в обработчике нажатия кнопки вызывай только popup
Дмитрий К.К. (2003-02-10 14:50:00) [10]Пытаюсь так:
procedure TBookmarksForm.BookmarksSpeedButtonClick(Sender: TObject);
var
BookmarksPopupMenu: TPopupMenu;
AddBook: TMenuItem;
Point: TPoint;
begin
GetCursorPos(Point);
BookmarksPopupMenu := TPopupMenu.Create(Self);
AddBook := TMenuItem.Create(Self);
try
AddBook.Caption := "Add";
AddBook.Tag := 1;
AddBook.OnClick := AddBookClick;
BookmarksPopupMenu.Items.Add(AddBook);
{=====}
BookmarksPopupMenu.Popup(Point.x, Point.y);
finally
BookmarksPopupMenu.Free;
AddBook.Free;
end;
end;
но, естественно, при нажатии на пункт меню AddBook - Access Violation
Дмитрий К.К. (2003-02-10 14:43:00) [11]И скока раз нажать на BookmarksSpeedButton, стока и будет создано экземпляров? А как сэкономить память?
Danilka (2003-02-10 14:43:00) [12]Reindeer Moss Eater (10.02.03 14:40)
:))))))
совсем заработался, блин.
привык, селф в самом классе юзать. :)))
Reindeer Moss Eater (2003-02-10 14:42:00) [13]Безусловно
Дмитрий К.К. (2003-02-10 14:41:00) [14]
> Reindeer Moss Eater (10.02.03 14:39)
> И что из этого? Закрытие формы еще не означает её уничтожение.
Да-да, признаю... ет просто у меня закрытие означает уничтожение... так значит будет жить, пока форма жива?
Reindeer Moss Eater (2003-02-10 14:40:00) [15]Danilka, Self здесь это экземпляр TBookmarksForm.
Danilka (2003-02-10 14:39:00) [16]uw © (10.02.03 14:36)
как они удалится при закрытии формы, если вместо овнера, у них стоит self?
Reindeer Moss Eater (2003-02-10 14:39:00) [17]И что из этого? Закрытие формы еще не означает её уничтожение.
Дмитрий К.К. (2003-02-10 14:39:00) [18]То есть владелец
Дмитрий К.К. (2003-02-10 14:37:00) [19]
> Reindeer Moss Eater (10.02.03 14:34)
> Я бы сказал, что и при закрытии формы он не обязательно
> удаляется.
Почему? У него же родитель - форма.
uw (2003-02-10 14:36:00) [20]При закрытии формы.