Форум: "Начинающим";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
ВнизКак прогу убрать в фоновый режим Найти похожие ветки
← →
IOrist (2007-11-09 20:39) [0]Как зделать в Delphi, чтобы при запуске процедуры например
BottonClick программа убралась в фоновый режим, а при окончании
востановилась?
← →
Anatoly Podgoretsky © (2007-11-09 20:44) [1]> IOrist (09.11.2007 20:39:00) [0]
Что значит фоновый? Случайно не невидимый ли?
← →
Dib@zol © (2007-11-09 20:46) [2]> Что значит фоновый? Случайно не невидимый ли?
Ога, невидимый. Как в винраре.
ShowWindow(Form1.Handle, SW_HIDE);
← →
IOrist (2007-11-09 21:46) [3]да именно как в винраре
ShowWindow(Form1.Handle, SW_HIDE);
так мы просто свернем программу, а надо, чтобы она на нажатие кнопки
просто стала работать как процесс, её иконка отображаласть в как его ну там где часы и др поцессы, а по завершению работы ButtonClick восстановилась уже как приложение
также, как в винраре если нажать "Фоновый режим".
← →
Anatoly Podgoretsky © (2007-11-09 21:49) [4]> IOrist (09.11.2007 21:46:03) [3]
Еще более не понятно стало.
То есть ты иконку хочешь добавить что ли?
С восстановлением хуже, Гейтс сделал обрезание попрыгунчикам.
← →
IOrist (2007-11-09 21:55) [5]добавь в архив какой небудь файл, кода будет архивить
нажми "Фоновый режим".
Произойдет то, что как раз мне и нужно.
так быстрее, я врятли обьясню.
← →
Anatoly Podgoretsky © (2007-11-09 22:02) [6]> IOrist (09.11.2007 21:55:05) [5]
У меня нет кнопки "Фоновый режим".
← →
Zeqfreed © (2007-11-09 22:22) [7]Анатолий пытается намекнуть, что «отобразить иконку в трее» и «скрыть окно программы» это две никак не взаимосвязанных операции. Как выполнить вторую уже подсказали, реализацию первой подскажет любой поисковик.
← →
DVM © (2007-11-09 22:24) [8]
> Гейтс сделал обрезание попрыгунчикам.
все равно выпрыгнуть не проблема
← →
Anatoly Podgoretsky © (2007-11-09 22:25) [9]> Zeqfreed (09.11.2007 22:22:07) [7]
Это еще не все, есть еще и кнопка на панели задач. Да и сам термин "фоновый режим" какой то скользкий, но автор не в состоянии объяснить, чего же он хочет. Может в этой конфереции сумеет, с нашей помощью.
← →
IOrist (2007-11-09 22:26) [10]Забудь. Давай по другому.
У меня в прге на нажатие кнопки происходит печать отчетов, которые запрашиваются у удаленного сервера. Отчетов много и печать происходит не 1 сек, а гдето 5 мин.
Прога просто будет выполнять эту процедуру и не на что не реагировать.
Хотелось, чтобы выполнялась та процедура и я параллельно мог бы, скажем, чтото редактировать, изменять данные в Grid"е и т.д.
← →
Anatoly Podgoretsky © (2007-11-09 22:27) [11]
> • «Начинающим» (вспомогательная конференция. если вам
> трудно понять самим, что вам нужно или есть желание и способности
> помогать новичкам — вам сюда)
← →
DVM © (2007-11-09 22:27) [12]
> Хотелось, чтобы выполнялась та процедура и я параллельно
> мог бы, скажем, чтото редактировать, изменять данные в Grid"е
> и т.д.
печать в отдельный поток вынести
← →
Anatoly Podgoretsky © (2007-11-09 22:28) [13]
> Забудь. Давай по другому.
Поток что ли нужен?
← →
Anatoly Podgoretsky © (2007-11-09 22:29) [14]> DVM (09.11.2007 22:24:08) [8]
Гейтс старался, давай не будем ему мешать.
← →
IOrist (2007-11-09 22:31) [15]да наверно.
← →
Anatoly Podgoretsky © (2007-11-09 22:32) [16]> IOrist (09.11.2007 22:31:15) [15]
Еще остается вопрос, чтобы окончательно выяснить твои намеренья, это должно быть сделано с помощью WinAPI или в рамках VCL?
Ветку то разместил в WinAPI
← →
IOrist (2007-11-09 22:38) [17]
> Еще остается вопрос, чтобы окончательно выяснить твои намеренья,
> это должно быть сделано с помощью WinAPI или в рамках VCL?
> Ветку то разместил в WinAPI
я не знаю как создать этот поток, поэтому и обращаюсь.
Если вы считаете, что это можно сделать через поток, то пожалейста объясните
← →
DVM © (2007-11-09 22:47) [18]
> Если вы считаете, что это можно сделать через поток, то
> пожалейста объясните
Для начала ответь на [16]. Ну и еще можно начать читать про TThread в справке.
← →
IOrist (2007-11-09 23:02) [19]я не знаю про WinAPI и VCL
← →
IOrist (2007-11-09 23:11) [20]ой кнечно же c помощью WinAPI
← →
DVM © (2007-11-09 23:16) [21]
> ой кнечно же c помощью WinAPI
А остальная часть твоей программы тоже написана чиста на WinApi ?
Если нет, то зачем поток создаать средствами только API? Тогда уж TThread.
← →
Progs (2007-11-10 14:07) [22]Так чтоли.
Часть кода:
const
WM_NOTIFYTRAYICON = WM_USER + 1;
private
procedure WMTRAYICONNOTIFY(var Msg: TMessage); message WM_NOTIFYTRAYICON;
begin
procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage); // процедуру добавляет пользователь
var
s: string;
P: TPoint;
begin
case Msg.LParam of
WM_MOUSEMOVE: s := "Мышь сдвинута";
WM_LBUTTONDOWN: s := "Левая кнопка нажата";
WM_LBUTTONUP: s := "Левая кнопка отпущена";
WM_LBUTTONDBLCLK: s := "Два раза нажата левая кнопка";
WM_RBUTTONDOWN: s := "Правая кнопка нажата";
WM_RBUTTONUP: Begin
s := "Правая кнопка отпущена";
GetCursorPos(p);
SetForegroundWindow(Application.MainForm.Handle);
PopupMenu1.Popup(P.X, P.Y);
End;
WM_RBUTTONDBLCLK: s := "Два раза нажата правая кнопка";
else s := IntToStr(Msg.LParam);
end;
ListBox1.Items.Add(s);
ListBox1.ItemIndex := ListBox1.Items.Count - 1;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
nidata: TNotifyIconData;
begin
// заполним структуру nidata,
// поля которой определяют значок
// на System Tray
with nidata do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle; // окно (приложение), которое представляет значок
uId := 1; // номер значка (одно приложение может разместить несколько значков)
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; // что надо сделать
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := Application.Icon.Handle;
szTip := "My Icon";
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
end;
procedure TForm1.N1Click(Sender: TObject);
var
nidata: TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uId := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;
end.
А в меню Popup выставляешь необходимые строки и процедуры. Ну а дальше дело техники. Все процедуры находятся в основном разделе implementation
← →
DVM © (2007-11-10 14:25) [23]
> Progs (10.11.07 14:07) [22]
> Так чтоли.
> Часть кода:
Не так. Ты прочитай внимательно всю ветку, выяснили же, что не иконка в области уведомлений ему нужна а многопоточность.
← →
Anatoly Podgoretsky © (2007-11-10 14:41) [24]> DVM (10.11.2007 14:25:23) [23]
В которой он ни бум, бум и маловероятно, что будет бум. Поскольку даже вопрос задать не может, а что же он тогда с ответами будет делать.
← →
IOrist (2007-11-10 14:46) [25]с иконкой разобрался:
ShowWindow(Handle,SW_HIDE);
ShowWindow(application.Handle, SW_HIDE);
FWTrayIcon1.Visible:=true;
//убрать
ShowWindow(Handle,SW_SHOW);
ShowWindow(application.Handle, SW_SHOW);
FWTrayIcon1.Visible:=true;
//восстановить
Осталось тока понять этот TTread
← →
Anatoly Podgoretsky © (2007-11-10 14:54) [26]> IOrist (10.11.2007 14:46:25) [25]
Там ничего сверхестественного нет, начни со чтения справки, по теме Writing multi-threaded applications
← →
Anatoly Podgoretsky © (2007-11-10 14:58) [27]Вообще надо идеологию сменить, ни какие иконки и прятание окон, по твоим показаниям не требуется. Все что нужно, так это запустить поток по выбору из меню, пункт меню запретить до окончания и продолжать работать с программой.
← →
IOrist (2007-11-10 15:03) [28]
> пункт меню запретить до окончания и продолжать работать
> с программой.
да да точно
← →
Anatoly Podgoretsky © (2007-11-10 15:06) [29]> IOrist (10.11.2007 15:03:28) [28]
А раз согласен, то убери иконку и скрытие окна и пользователю будет удобно работать, при необходимости можешь где-то выводить состояние процесса отчета.
← →
IOrist (2007-11-10 15:25) [30]Спасибо Anatoly Podgoretsky ©
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.062 c