Главная страница
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.023 c
14-53285
pochtamt
2003-02-01 12:13
2003.02.17
Как открыть проект в , если сделан он в D6?


3-52715
BlackTiger
2003-01-29 19:19
2003.02.17
Какие компоненты DevExpress (Grid4,cxGrid) дают экспортировать?


3-52767
Соловьев
2003-01-29 18:12
2003.02.17
При добавлении записи не срабатывает тригер?


3-52736
Andriano
2003-01-30 13:30
2003.02.17
ParamByName в FIBDataSet


3-52726
Darts
2003-01-30 10:25
2003.02.17
Halycon - хорош ли?