Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.019 c
1-53089
Chlavik
2003-02-07 00:42
2003.02.17
Asm


1-52896
harismatik
2003-02-08 11:01
2003.02.17
Про дерево


1-53032
Anton
2003-02-10 23:57
2003.02.17
Как выделить две строки в combobox


14-53207
Рустам
2003-01-31 14:24
2003.02.17
TeamSource


3-52718
Ina
2003-01-30 08:19
2003.02.17
отключить индекс FoxPro 2.6