Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.068 c
2-1163435060
Jimmy
2006-11-13 19:24
2006.12.03
Экономия ресурсов


6-1153152312
cando
2006-07-17 20:05
2006.12.03
слежка за портом


2-1163712915
DoktorX
2006-11-17 00:35
2006.12.03
Помогите с Memo!


15-1163665533
Layner
2006-11-16 11:25
2006.12.03
Помогите найти компонент - TPanel(TScrollBox..) со свитками


4-1153379764
Misha Uskov
2006-07-20 11:16
2006.12.03
Описание сервиса