Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Вниз

Создание компонента в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-53085
bios
2003-02-05 00:20
2003.02.17
f:file; или типа того


7-53309
max2057
2002-12-13 11:23
2003.02.17
Наиболее эффективный способ записи файлов


14-53269
Lancelot
2003-02-02 00:08
2003.02.17
Брюс Уиллис


1-52981
Xok
2003-02-10 12:14
2003.02.17
Как DateTimePicker у присвоить пустое значение?


14-53194
Anatoly Podgoretsky
2003-01-31 07:47
2003.02.17
Именинники 31 января





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский