Форум: "Начинающим";
Текущий архив: 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