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

Вниз

Как правильно удалить объект созданный в рантайме   Найти похожие ветки 

 
superlamer ©   (2006-11-11 01:21) [0]

Ув. Мастера есть научите. Нужно удалить объект типа TPanel через его попап меню. Как это сделать корректно? Если можно, то приведите небольшой пример.


 
Ketmar ©   (2006-11-11 01:27) [1]

SendMessage(), обработчик.


 
Ketmar ©   (2006-11-11 01:27) [2]

пардон. PostMessage().


 
superlamer ©   (2006-11-11 01:33) [3]

Можно по-подробнее?


 
DrPass ©   (2006-11-11 01:39) [4]

Как ты уже сам наверняка проверил, просто вызвать Free из собственного обработчика некузяво - стек красиво разваливается. Поэтому нужно выйти из обработчика, сначала бросив какое-нибудь сообщение, скажем, форме - чтобы она потом сама и удалила эту панель


 
superlamer ©   (2006-11-11 01:46) [5]


> Как ты уже сам наверняка проверил, просто вызвать Free из
> собственного обработчика некузяво - стек красиво разваливается.

Да уж, с Free не красиво получается.


>  Поэтому нужно выйти из обработчика, сначала бросив какое-
> нибудь сообщение, скажем, форме - чтобы она потом сама и
> удалила эту панель

К сожалению с таким столкнулся впервые. Нельзя ли выше сказанное в код перекинуть?


 
Германн ©   (2006-11-11 02:02) [6]


> К сожалению с таким столкнулся впервые. Нельзя ли выше сказанное
> в код перекинуть?
>

В 2 часа ночи!? В ночное время тариф, ну очень большой! Осилилишь!?

Может дешевле будет прочитать справку по PostMessage? [2]
Для "Основной" в самый раз.


 
MikePetrichenko ©   (2006-11-11 02:09) [7]


> Ув. Мастера есть научите. Нужно удалить объект типа TPanel
> через его попап меню. Как это сделать корректно? Если можно,
>  то приведите небольшой пример.

Где-то я это уже видел :)


 
Германн ©   (2006-11-11 02:21) [8]


> MikePetrichenko ©   (11.11.06 02:09) [7]
>
>
> > Ув. Мастера есть научите. Нужно удалить объект типа TPanel
> > через его попап меню. Как это сделать корректно? Если
> можно,
> >  то приведите небольшой пример.
>
> Где-то я это уже видел :)
>

И не один раз!


 
superlamer ©   (2006-11-11 02:26) [9]

А вот так совсем неправильно будет?

procedure TForm1.Button1Click(Sender: TObject);
var
 pnl: TPanel;
begin
 pnl := TPanel.Create(Self);
 with pnl do
   begin
     Parent := Form1;
     .
     .
     .      
     OnMouseDown := pnlMouseDown;
     PopupMenu := PanelPopupMenu;
   end;
end;

procedure TForm1.pnlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 SelectedPnl := Sender as TPanel;
end;

procedure TForm1.pmDeleteClick(Sender: TObject);
begin
 SelectedPnl.Free;
end;


 
Германн ©   (2006-11-11 02:41) [10]


> superlamer ©   (11.11.06 02:26) [9]
>
> А вот так совсем неправильно будет?
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
>  pnl: TPanel;
> begin
>  pnl := TPanel.Create(Self);
>  with pnl do
>    begin
>      Parent := Form1;
>      .
>      .
>      .      
>      OnMouseDown := pnlMouseDown;
>      PopupMenu := PanelPopupMenu;
>    end;
> end;
>
> procedure TForm1.pnlMouseDown(Sender: TObject; Button: TMouseButton;
>  Shift: TShiftState; X, Y: Integer);
> begin
>  SelectedPnl := Sender as TPanel;
> end;
>
> procedure TForm1.pmDeleteClick(Sender: TObject);
> begin
>  SelectedPnl.Free;
> end;

Дежавю. Ну а реальный код с реальными проблемами
так уж трудно привести? Или религия не позволяет?


 
superlamer ©   (2006-11-11 02:53) [11]


> Дежавю. Ну а реальный код с реальными проблемами
> так уж трудно привести? Или религия не позволяет?

Пробую отдельно, так как никогда такого не делал(совсем в новинку все это мне). Так все таки это будет правильно работать или лучше так?

procedure TForm1.DelPnl(var Res: Byte);
begin
 try
   SelectedPnl.Free;
 except
   Res := 0
 end;
end;

procedure TForm1.pmDeleteClick(Sender: TObject);
begin
 PostMessage(Form1.Handle, WM_MYDELETE,0,0)
end;


 
superlamer ©   (2006-11-11 02:56) [12]

DelPnl объявлена как
procedure DelPnl(var Res: Byte); message WM_MYDELETE;


 
Германн ©   (2006-11-11 03:08) [13]


> superlamer ©   (11.11.06 02:56) [12]

Давай разговаривать конкретно. У тебя код, у нас вопросы/ответы. Только дай "реальный код" и приведи вопросы по нему!


 
superlamer ©   (2006-11-11 03:26) [14]


> Германн ©   (11.11.06 03:08) [13]

как такового кода еще нет, так как не знаю как правильно это реализовать.
теперь конкретно, что нужно сделать: на форме есть определенное кол-во панелей. нужно удалить любую из них выбрав из контекстного меню этой панели пункт "удалить". и вопрос: как это сделать корректно. код, который приводился выше - это варианты того как я себе этот процесс представляю. буду очень благодарен за конкретный пример (за интерес в столь поздний час - отдельное спасибо).


 
Германн ©   (2006-11-11 03:33) [15]


> (за интерес в столь поздний час - отдельное спасибо).
>

Пожалуйста, но лучше бы тебе поспать. И мне тоже.


 
Джо ©   (2006-11-11 05:25) [16]

> Ув. Мастера есть научите. Нужно удалить объект типа TPanel
> через его попап меню. Как это сделать корректно?


// Обработчик OnClick для элемента popup-menu
procedure TForm1.Free1Click(Sender: TObject);
begin
 Panel1.Free
end;


 
Anatoly Podgoretsky ©   (2006-11-11 09:57) [17]

> Ketmar  (11.11.2006 1:27:02)  [2]

Сделать владельцем попап меню форму, а не панель, дальше просто Panel.Free


 
Ketmar ©   (2006-11-11 15:11) [18]

>[17] Anatoly Podgoretsky(c) 11-Nov-2006, 09:57
>Сделать владельцем попап меню форму, а не панель, дальше
>просто Panel.Free
оффтоп: о. наконец-то пост попал по назначению. а то какой-то слепой артиллерист, а не APC. %-)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.045 c
1-1161673010
Чапаев
2006-10-24 10:56
2006.12.03
Про многоязычное приложение... ETM.


15-1163282054
Greenchel
2006-11-12 00:54
2006.12.03
Считывание информации с сайта


2-1163421391
Gloomer
2006-11-13 15:36
2006.12.03
Отображение записей в DBGrid при прокрутке


2-1163284232
Eugem
2006-11-12 01:30
2006.12.03
Как правильно запросить имя пользователя?


2-1163865992
AlexanderMS
2006-11-18 19:06
2006.12.03
Вывод многострочного текста.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский