Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление панели из события одного из её дочерних компонентов [D7, XP]


Страницы:   1 2

Sco ©   (2006-10-18 22:32:00) 

У меня на форме размещёна панелька, на панельке есть кнопка "закрыть", при нажатии на эту кнопку панелька должна исчезнуть из окна и из памяти. Я пробовал реализовать это через
procedure TMayForm.MyButtonClick(Sender: TObject);
begin
// smth
MyButton.parent.destroy;
// smth
end;

Естественно этот способ не заработал так как нельзя вот так просто уничтожить своего родителя. Можно реализовать вот так:
procedure TMyForm.MyButtonClick(Sender: TObject);
begin
// smth
MyTimer.enabled:=true; {Timer.interval=100}
// smth
end;


procedure TMyTimerTimer(sender: TObject);
begin
MyButton.parent.destroy;
end;
Но в этом случае будут незаметные тормоза, да и если система будет сильно висеть то возможны глюки. Вот вопрос - как ещё можно реализовать решение этого вопроса.

Убедительная просьба всем флудерам - обходите эту тему, я создаю темы для того чтобы найти решение проблемы а не для того чтобы слушать ваши бредни.


Ketmar   (2006-10-19 07:06:00) [21]

>[8] MikePetrichenko(c) 19-Oct-2006, 07:01
>Ну что, "мастера", объясните вопрошающему, почему сее
>работает без сообщений и таймера?
потому что грибы качественные.

зыж фигасе. ИШ, оказывается, теперь наглый флудер. а ЮЗ, наверное, ламер-неумёха по этой классификации? игнор-лист пополняется... %-)


MikePetrichenko   (2006-10-19 07:01:00) [22]

И еще в догонку (сонный, мысли теут мееедленно).
Ну что, "мастера", объясните вопрошающему, почему сее работает без сообщений и таймера?


> procedure TfmMain.Button1Click(Sender: TObject);
> var
>  Obj: TOBject;
> begin
>  Obj := TButton(Sender).Parent;
>  TButton(Sender).Parent := TButton(Sender).Parent.Parent;
>
>  Obj.Free;
> end;


MikePetrichenko   (2006-10-19 07:00:00) [23]

В догонку.
Порою посты в данной конференции вгоняют в тупик. Не знаешь, толи плакать, то ли смеяться....


MikePetrichenko   (2006-10-19 06:49:00) [24]


> procedure TMayForm.MyButtonClick(Sender: TObject);
> begin
> // smth
> MyButton.parent.destroy;
> // smth
> end;

Мдя...
Message, Message.
procedure TfmMain.Button1Click(Sender: TObject);
var
 Obj: TOBject;
begin
 Obj := TButton(Sender).Parent;
 TButton(Sender).Parent := TButton(Sender).Parent.Parent;
 Obj.Free;
end;


RASkov   (2006-10-18 23:45:00) [25]

Вот как без сообщений, посылке их... т.е. как ты изначально хотел.
код в шутку написал (дикая мысль:) непроверял. Ну вроде работать должен.

var DelObj: TObject;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 DelObj.Free;
 DelObj:=nil;
 Timer1.Enabled:=False;
end;

procedure DelObject(Obj: TObject);
begin
 if not Assigned(Obj) then Exit;
 DelOdj:=Obj;
 Timer1.Enabled:=True;
end;

procedure TMayForm.MyButtonClick(Sender: TObject);
begin
 DelObject(MyButton.Parent);
end;


Конечно это изврат полнейший и почти не защищен. А вот ругаться не хорошо.
Будишь ворчать только такой изврат и будут присылать(может быть).


Virgo_Style   (2006-10-18 23:13:00) [26]

Sco ©   (18.10.06 22:56) [3]
Помощи от старой ветки не было


> наглый комментарий
> оскорбительный бред
> всяких флудеров
> такого беспредела нигде не видел... чтобы меня так
> нагло оскарбляли...


Теперь, сдается мне, и от новых веток помощи не будет.


Sco   (2006-10-18 22:56:00) [27]

2Percent- большое спасибовсё заработало, теперь обьяснение:
1я не халявщик, то есть большинство людей любят халяву и пользуются ей, я из их числа, но ето не тот случай. Просто у меня базовые знания средних книжек по Делфи, и я реально  не знаю принцип действий перехвата и послыки системных сообщений... поетому после того как мне написали тот вариант, и он не заработал - я спросил что не так, при етом начал штудировать DelphiWorld, прочитал там азы, но мне ето ничего не дало...
2Помощи от старой ветки не было, там собралась толпа флудеров... сижу на куче форумов но такого беспредела нигде не видел... чтобы меня так нагло оскарбляли... флудеры да и только. Тот топик умер поетому я начал новый с более чёткой формулировкой вопроса.
3исходя из ^ и ^^ я сделал выводы - писать сразу как можно более понятное определение вопроса, и не реагировать на всяких флудеров по типу Игоря Шевченко, которые совершенно не задумываются о том что пишут, им лишь бы вставить свой наглый комментарий, по сути все их высказывания - ето оскорбительный бред. Всё настроение испортили.
4буду учить message-s видать пригодятся :)


Percent   (2006-10-18 22:41:00) [28]

Perform(WM_DESTROYPANEL, cardinal(TControl(Sender).Parent), 0);

То есть, конечно же:

PostMessage(Handle, WM_DESTROYPANEL, cardinal(TControl(Sender).Parent), 0);


Percent   (2006-10-18 22:38:00) [29]

я создаю темы для того чтобы найти решение проблемы

На самом деле, ты хочешь, чтобы ее решили за тебя. То есть, ты халявщик. Тебе же в предыдущей ветке все объяснили. Зачем заводишь новую ветку?

const
 WM_DESTROYPANEL = WM_USER + $80;

type
 TForm1 = class(TForm)
 private
   procedure WMDestroyPanel(var Msg: TMessage); message WM_DESTROYPANEL;  
 end;

procedure TMyForm.MyButtonClick(Sender: TObject);
begin
 Perform(WM_DESTROYPANEL, cardinal(TControl(Sender).Parent), 0);
end;

procedure TMyForm.WMDestroyPanel(var Msg: TMessage);
begin
 TWinControl(Msg.WParam).Free;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо