![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно удалить объект созданный в рантайме [D7, WinXP]
superlamer © (2006-11-11 01:21:00)Ув. Мастера есть научите. Нужно удалить объект типа TPanel через его попап меню. Как это сделать корректно? Если можно, то приведите небольшой пример.
Ketmar (2006-11-11 15:11:00) [1]>[17] Anatoly Podgoretsky(c) 11-Nov-2006, 09:57
>Сделать владельцем попап меню форму, а не панель, дальше
>просто Panel.Free
оффтоп: о. наконец-то пост попал по назначению. а то какой-то слепой артиллерист, а не APC. %-)
Anatoly Podgoretsky (2006-11-11 09:57:00) [2]> Ketmar (11.11.2006 1:27:02) [2]
Сделать владельцем попап меню форму, а не панель, дальше просто Panel.Free
Джо (2006-11-11 05:25:00) [3]> Ув. Мастера есть научите. Нужно удалить объект типа TPanel
> через его попап меню. Как это сделать корректно?
// Обработчик OnClick для элемента popup-menu
procedure TForm1.Free1Click(Sender: TObject);
begin
Panel1.Free
end;
Германн (2006-11-11 03:33:00) [4]
> (за интерес в столь поздний час - отдельное спасибо).
>
Пожалуйста, но лучше бы тебе поспать. И мне тоже.
superlamer (2006-11-11 03:26:00) [5]
> Германн © (11.11.06 03:08) [13]
как такового кода еще нет, так как не знаю как правильно это реализовать.
теперь конкретно, что нужно сделать: на форме есть определенное кол-во панелей. нужно удалить любую из них выбрав из контекстного меню этой панели пункт "удалить". и вопрос: как это сделать корректно. код, который приводился выше - это варианты того как я себе этот процесс представляю. буду очень благодарен за конкретный пример (за интерес в столь поздний час - отдельное спасибо).
Германн (2006-11-11 03:08:00) [6]
> superlamer © (11.11.06 02:56) [12]
Давай разговаривать конкретно. У тебя код, у нас вопросы/ответы. Только дай "реальный код" и приведи вопросы по нему!
superlamer (2006-11-11 02:56:00) [7]DelPnl объявлена как
procedure DelPnl(var Res: Byte); message WM_MYDELETE;
superlamer (2006-11-11 02:53:00) [8]
> Дежавю. Ну а реальный код с реальными проблемами
> так уж трудно привести? Или религия не позволяет?
Пробую отдельно, так как никогда такого не делал(совсем в новинку все это мне). Так все таки это будет правильно работать или лучше так?
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;
Германн (2006-11-11 02:41:00) [9]
> 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:26:00) [10]А вот так совсем неправильно будет?
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:21:00) [11]
> MikePetrichenko © (11.11.06 02:09) [7]
>
>
> > Ув. Мастера есть научите. Нужно удалить объект типа TPanel
> > через его попап меню. Как это сделать корректно? Если
> можно,
> > то приведите небольшой пример.
>
> Где-то я это уже видел :)
>
И не один раз!
MikePetrichenko (2006-11-11 02:09:00) [12]
> Ув. Мастера есть научите. Нужно удалить объект типа TPanel
> через его попап меню. Как это сделать корректно? Если можно,
> то приведите небольшой пример.
Где-то я это уже видел :)
Германн (2006-11-11 02:02:00) [13]
> К сожалению с таким столкнулся впервые. Нельзя ли выше сказанное
> в код перекинуть?
>
В 2 часа ночи!? В ночное время тариф, ну очень большой! Осилилишь!?
Может дешевле будет прочитать справку по PostMessage? [2]
Для "Основной" в самый раз.
superlamer (2006-11-11 01:46:00) [14]
> Как ты уже сам наверняка проверил, просто вызвать Free из
> собственного обработчика некузяво - стек красиво разваливается.
Да уж, с Free не красиво получается.
> Поэтому нужно выйти из обработчика, сначала бросив какое-
> нибудь сообщение, скажем, форме - чтобы она потом сама и
> удалила эту панель
К сожалению с таким столкнулся впервые. Нельзя ли выше сказанное в код перекинуть?
DrPass (2006-11-11 01:39:00) [15]Как ты уже сам наверняка проверил, просто вызвать Free из собственного обработчика некузяво - стек красиво разваливается. Поэтому нужно выйти из обработчика, сначала бросив какое-нибудь сообщение, скажем, форме - чтобы она потом сама и удалила эту панель
superlamer (2006-11-11 01:33:00) [16]Можно по-подробнее?
Ketmar (2006-11-11 01:27:00) [17]SendMessage(), обработчик.
Ketmar (2006-11-11 01:27:00) [18]пардон. PostMessage().