Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание компонента в run-time [D5, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

Дмитрий К.К. ©   (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]

При закрытии формы.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо