Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi как програмно отработать кнопку свернуть\закрыть

Автор: OOD
Дата сообщения: 03.06.2006 14:23
В общем проблема какая есть одна програма, которая при запуске запускае окно , которое в процессе висит и не закрывается , а закрывается оно только нажатием свернуть\закрыть, но при нажатии свернуть , окно сварачивается на панель задач, а при нажатии кнопки закрыть приложение остаётся в трее, а окно, которое возникло после запуска программы закрывается....
Вопрос как можно отработать програмно нажатие кнопки закрыть, или же как - либо другим способом заставить запускаться программу в трей чтобы не возникало окна вспыхивающегося....

Вот попробовал сделать так:

Код:
ShellExecute(Handle, nil, 'program.exe', nil, nil, SW_HIDE);
Автор: kkRiz
Дата сообщения: 03.06.2006 14:41
Думаю, стоит поглядеть в сторону отсылки сообщений окнам, читать хелп по sendmessage. В общем виде это будет что-то вроде:

Hnd := FindWindow (PChar ('Notepad'), nil);
if Hnd > 0 then
SendMessage (Hnd, WM_CLOSE, 0, 0);
Автор: softech
Дата сообщения: 03.06.2006 14:53
Компонента XTray установлена?OOD
Автор: OOD
Дата сообщения: 03.06.2006 16:54
Попробовал поиграться с методом Perform,
а именно:

Код:
Form1.Perform(WM_CLOSE, 0, 0);
Автор: FireZone
Дата сообщения: 03.06.2006 18:59
OOD
Всех запутал. Ты свою программу не можешь закрыть или чужую? Сформулируй вопрос иначе, расскажи подробно, что уже делал; приведи больше кода, нежели "close", иначе можно долго гадать, где у тебя ошибка. Мож этот close тебе совсем не нужен, а мож ты вызываешь его не оттуда, откуда надо.
Автор: kkRiz
Дата сообщения: 03.06.2006 21:34
2ODD
Если надо закрыть своё приложение, а злостный компонент не дают и как следствие не завершается приложение - то копать Application.terminate А вообще действительно непонятно о чём ты говоришь
Автор: OOD
Дата сообщения: 03.06.2006 23:51
В общем есть программа TwinhanData , она входит в пакет поставляемого ПО с картой для приёма DTV сигнала спутникового тв и интернета.... идет в картах Twinhan DTV SET.

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

раньше в своих приложениях достаточно было прописать close чтобы закрыть текущее своё приложения, но для того чтобы закрыть чужое нужно использовать WM_CLOSE...

попробовал для начала закрыть свою форму новосозданную вот так вот :

Form1.Perform(WM_CLOSE, 0, 0);

ничего не получилось

попробовал как делал ранее через close Тоже не получилось, хотя раньше работало без проблем

Как быть дальше не знаю в чем может быть проблема?

Для начала нужно разобраться почему не закрывается моя вновь созданная форма, а потом уже искать окно с заголовком TwinhanData v1.7.2.0 и отрабатывать нажатик клвиши закрыть....
Автор: kkRiz
Дата сообщения: 04.06.2006 00:02
Своё приложение должно закрывать форму по form.close в любом случае, если конечно, ничего не прописано в onclose.
Автор: kom09
Дата сообщения: 04.06.2006 01:40
OOD

Код: procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Perform(WM_CLOSE, 0, 0);
end;
Автор: kom09
Дата сообщения: 04.06.2006 13:13
В начале темы kkRiz привел работоспособный код как раз для Вашего случая. Чуть-чуть изменю его для понятности:
Код: procedure TForm1.Button1Click(Sender: TObject);
var h: HWND;
begin
h := FindWindow(Nil,'Заголовок окна');
if h <> 0 then SendMessage(h, WM_CLOSE, 0, 0);
end;
Автор: OOD
Дата сообщения: 04.06.2006 17:38
Всё всем больщущее спасибо , всё работает, оказывается, если в пустой форме написать на процедуре FormCreate просто команду:

Код:
сlose;
Автор: kkRiz
Дата сообщения: 04.06.2006 17:53

Цитата:
...в пустой форме написать на процедуре FormCreate просто... то моё приложение на закроеться никак...

Что вполне логично, это всё равно что в onshow/onhide менять видимость формы.

Страницы: 1

Предыдущая тема: как установить ExpressPrinting System


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.