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

Вниз

Компонент   Найти похожие ветки 

 
Igor_thief ©   (2002-07-16 12:28) [0]

Я делаю компонент, который минимизирует форму в трей. Чтобы загнать компонент в трей, надо перехватить момент минимизации формы. Это просто, если описать обработчик в программе. А как сделать чтобы сам компонент перехватывал момент минимизации формы? А то не очень хочется из основной программы перехватывать момент минимизации и вызывать метод компонента для помещения проги в трей.


 
Сатир   (2002-07-16 16:31) [1]

для этого тебе нужно обрабатывать это событие в самом компоненте, а именно: определяешь, кто является владельцем данного компонента и если вледелец - форма, значит и неё есть событие NoMinimize. Вот и присваиваешь этому событию то, что тебе нужно, напр.:

if Self.Owner is TForm then Owner.OnMinimize:= MoveInTray,

где MoveInTray - процедура, которая отображает форму в трее




 
Сатир   (2002-07-16 18:10) [2]

...и этот кусок кода тебе нужно будет поместить в конструктор данного компонента, но один маленький момент: может получиться побочный эффект, когда в режиме дизайна при сворачивании формы, она будет сворачиваться в трей или выдавать ошибку... или всё будет нормально и без эффектов.
удачи


 
Юрий Зотов ©   (2002-07-16 20:16) [3]

> Сатир

Вы САМИ писали компоненты? И много ли?

Если да, то зачем давать ТАКИЕ советы. А если нет, то зачем вообще их давать?

КОМПОНЕНТЫ НЕ ИМЕЮТ ПРАВА ПОЛЬЗОВАТЬСЯ СОБЫТИЯМИ, ДОСТУПНЫМИ ИХ ЮЗЕРУ. Это аксиома.

Потому что брошу я Ваш компонент на форму и назначу этой форме СВОЙ обработчик OnMinimize (а кто мне запретит? все легально). И этот мой обработчик тут же перекроет Ваш. После чего такой компонент окажется в одном, извините, очень глубоком месте.


> Igor_thief

Вам нужно заместить оконную процедуру формы своей.

1. Введите в компонент приватное поле FWndMethod: TWndMethod и приватный метод
procedure WndMethod(var Message: TMessage);

2. В конструкторе, во-первых, ОБЯЗАТЕЛЬНО проследите, что Owner - это именно TCustomForm (а не что-то другое), и, во-вторых, что таких компонентов на ней еще нет (при невыполнении любого из этих условий прямо в конструкторе возбуждайте Exception - это СТРОГО обязательно).

3. Далее в том же конструкторе запомните старую оконную процедуру и замените ее своей:

with TCustomForm(Owner) do
begin
FWndMethod := WindowProc;
WindowProc := WndMethod;
end;

4. Теперь Ваш компонент будет получать все сообщения, адресованные форме и Вы легко сможете отследить, когда придет WM_SYSCOMMAND с SC_MINIMIZE. Это сообщение обрабатывайте, как Вам нужно, а остальные просто передавайте старой процедуре:
FWndMethod(Message);

5. В деструкторе не забудьте восстановить все назад:
with TCustomForm(Owner) do
if not (csDestroying in ComponentState) then
WindowProc := FWndMethod;


 
Юрий Зотов ©   (2002-07-16 20:17) [4]

> Сатир

Вы САМИ писали компоненты? И много ли?

Если да, то зачем давать ТАКИЕ советы? А если нет, то зачем вообще их давать?

КОМПОНЕНТЫ НЕ ИМЕЮТ ПРАВА ПОЛЬЗОВАТЬСЯ СОБЫТИЯМИ, ДОСТУПНЫМИ ИХ ЮЗЕРУ. Это аксиома.

Потому что брошу я Ваш компонент на форму и назначу этой форме СВОЙ обработчик OnMinimize (а кто мне запретит? все легально). И этот мой обработчик тут же перекроет Ваш. После чего такой компонент окажется в одном, извините, очень глубоком месте.


> Igor_thief

Вам нужно заместить оконную процедуру формы своей.

1. Введите в компонент приватное поле FWndMethod: TWndMethod и приватный метод
procedure WndMethod(var Message: TMessage);

2. В конструкторе, во-первых, ОБЯЗАТЕЛЬНО проследите, что Owner - это именно TCustomForm (а не что-то другое), и, во-вторых, что таких компонентов на ней еще нет (при невыполнении любого из этих условий прямо в конструкторе возбуждайте Exception - это СТРОГО обязательно).

3. Далее в том же конструкторе запомните старую оконную процедуру и замените ее своей:

with TCustomForm(Owner) do
begin
FWndMethod := WindowProc;
WindowProc := WndMethod;
end;

4. Теперь Ваш компонент будет получать все сообщения, адресованные форме и Вы легко сможете отследить, когда придет WM_SYSCOMMAND с SC_MINIMIZE. Это сообщение обрабатывайте, как Вам нужно, а остальные просто передавайте старой процедуре:
FWndMethod(Message);

5. В деструкторе не забудьте восстановить все назад:
with TCustomForm(Owner) do
if not (csDestroying in ComponentState) then
WindowProc := FWndMethod;


 
Юрий Зотов ©   (2002-07-16 20:20) [5]

Приношу извинения за двойной постинг - при передаче слетела связь, я повторил, а оказалось, пройти все же успело.


 
evgeg ©   (2002-07-16 20:24) [6]

> что Owner - это именно TCustomForm (а не что-то другое),

Наверное, вы имели в виду: "TCustomForm или его наследник"?


 
Юрий Зотов ©   (2002-07-16 20:48) [7]

Это одно и то же. Все наследники TCustomForm - это тоже TCustomForm. Имелось в виду обычное IS.


 
Igor_thief ©   (2002-07-17 12:51) [8]

>Юрий Зотов
Большое Вам спасибо за советы. Я непременно воспользуюсь ними и сообщу Вам результат.


 
Сатир   (2002-07-17 16:28) [9]

2Юрий Зотов
а чё так категорично?
...я смотрю, никто не отвечает да и думаю, вставлю свои 5 коп., а Вы сразу и оклеветали.
может, сдают нервы?:-)
с уваженим.


 
Юрий Зотов ©   (2002-07-17 22:04) [10]

Да, пожалуй, переборщил... наверное, и правда нервы... и жара...

Писал я это после просмотра очередной ветки на 30 постингов, из которых нужно было оставить только один (второй по номеру!). Остальные - бред.

Наверное, я чересчур эмоционален, но всегда раздражаюсь, когда вижу такие вещи. Не пойму - вот те 28 человек, которые написали уже ПОСЛЕ правильного, полного и точного ответа - они вообще зачем писали? Ведь ответ-то уже был, зачем мусорить?

Себя показать хотели, что ли? Ох, лучше б не показывали...

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


 
MJH ©   (2002-07-18 02:05) [11]

а зачем собственно КОМПОНЕНТ делать? таких уже милионы!
если интересно - скачай да посмотри


 
Ketmar ©   (2002-07-18 04:55) [12]

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

Satanas Nobiscum!
18-VII-XXXVII A.S.


 
Сатир   (2002-07-18 12:31) [13]

2Юрий Зотов ©
ок, я на Вас не в обиде


 
Сатир   (2002-07-18 12:31) [14]

2Юрий Зотов ©
ок, я на Вас не в обиде, наоборот спасибо, что исправили меня


 
Igor_thief ©   (2002-07-19 12:21) [15]

>MJH © (18.07.02 02:05)
На написании компонентов можно многому научиться!


 
Igor_thief ©   (2002-07-19 12:22) [16]

>MJH © (18.07.02 02:05)
На написании компонентов можно многому научиться! Да и одну задачу можно решать разными путями.



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

Текущий архив: 2002.08.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
1-48132
PONTIY
2002-08-01 11:40
2002.08.15
Проверка каталога на существование


7-48344
sniknik
2002-05-30 11:39
2002.08.15
Програмное выключение ATX в Dos


3-47977
jessis
2002-07-25 10:37
2002.08.15
Help!!!


8-48213
Javlon
2002-04-11 11:53
2002.08.15
OpenGl Создание обекта


1-48195
Evyshka
2002-08-02 15:54
2002.08.15
Kernel32.dll