Текущий архив: 2003.02.17;
Скачать: CL | DM;
ВнизСоздание компонента в run-time Найти похожие ветки
← →
Дмитрий К.К. (2003-02-10 14:22) [0]Если я создаю объект динамически следующим образом:
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 удалятся при выходе из процедуры или только при закрытии формы?
← →
Reindeer Moss Eater (2003-02-10 14:34) [1]Я бы сказал, что и при закрытии формы он не обязательно удаляется.
← →
uw (2003-02-10 14:36) [2]При закрытии формы.
← →
Дмитрий К.К. (2003-02-10 14:37) [3]
> Reindeer Moss Eater (10.02.03 14:34)
> Я бы сказал, что и при закрытии формы он не обязательно
> удаляется.
Почему? У него же родитель - форма.
← →
Дмитрий К.К. (2003-02-10 14:39) [4]То есть владелец
← →
Reindeer Moss Eater (2003-02-10 14:39) [5]И что из этого? Закрытие формы еще не означает её уничтожение.
← →
Danilka (2003-02-10 14:39) [6]uw © (10.02.03 14:36)
как они удалится при закрытии формы, если вместо овнера, у них стоит self?
← →
Reindeer Moss Eater (2003-02-10 14:40) [7]Danilka, Self здесь это экземпляр TBookmarksForm.
← →
Дмитрий К.К. (2003-02-10 14:41) [8]
> Reindeer Moss Eater (10.02.03 14:39)
> И что из этого? Закрытие формы еще не означает её уничтожение.
Да-да, признаю... ет просто у меня закрытие означает уничтожение... так значит будет жить, пока форма жива?
← →
Reindeer Moss Eater (2003-02-10 14:42) [9]Безусловно
← →
Danilka (2003-02-10 14:43) [10]Reindeer Moss Eater (10.02.03 14:40)
:))))))
совсем заработался, блин.
привык, селф в самом классе юзать. :)))
← →
Дмитрий К.К. (2003-02-10 14:43) [11]И скока раз нажать на BookmarksSpeedButton, стока и будет создано экземпляров? А как сэкономить память?
← →
Дмитрий К.К. (2003-02-10 14:50) [12]Пытаюсь так:
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
← →
Danilka (2003-02-10 14:52) [13]Дмитрий К.К. © (10.02.03 14:50)
конечно, ведь пока ты выберешь пункт меню, меню у тебя уже будет удалено.
создай его при открытии формы.
а в обработчике нажатия кнопки вызывай только popup
← →
Дмитрий К.К. (2003-02-10 14:52) [14]То есть так:
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;
← →
Дмитрий К.К. (2003-02-10 14:53) [15]
> Danilka © (10.02.03 14:52)
> создай его при открытии формы.
> а в обработчике нажатия кнопки вызывай только popup
Пункты меню создаются динамически (их может и не быть)
← →
Danilka (2003-02-10 15:03) [16]Дмитрий К.К. © (10.02.03 14:53)
дык, тогда в начале процедуры прибивай пункты и создавай заново.
зачем само меню трогать?
← →
Дмитрий К.К. (2003-02-10 15:11) [17]Вот так?
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:16) [18]вроде того.
← →
Дмитрий К.К. (2003-02-10 15:18) [19]А когда вызываем
BookmarksPopupMenu.Items.Clear
это очищает память от всяких AddBook или они продолжают в ней висеть?
← →
Danilka (2003-02-10 15:28) [20]неужели лень в помощи посмотреть?
TMenuItem.Clear
Removes and frees all menu items listed in the Items property.
← →
Дмитрий К.К. (2003-02-10 15:34) [21]
> Danilka © (10.02.03 15:28)
> Removes and frees all menu items listed in the Items property.
Ет я первым делом посмотрел. Просто привычка уточнять.
Страницы: 1 вся ветка
Текущий архив: 2003.02.17;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.011 c