![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прогу убрать в фоновый режим [D7, WinXP]
IOrist © (2007-11-09 20:39:00)Как зделать в Delphi, чтобы при запуске процедуры например
BottonClick программа убралась в фоновый режим, а при окончании
востановилась?
IOrist (2007-11-10 15:25:00) [1]Спасибо Anatoly Podgoretsky ©
Anatoly Podgoretsky (2007-11-10 15:06:00) [2]> IOrist (10.11.2007 15:03:28) [28]
А раз согласен, то убери иконку и скрытие окна и пользователю будет удобно работать, при необходимости можешь где-то выводить состояние процесса отчета.
IOrist (2007-11-10 15:03:00) [3]
> пункт меню запретить до окончания и продолжать работать
> с программой.
да да точно
Anatoly Podgoretsky (2007-11-10 14:58:00) [4]Вообще надо идеологию сменить, ни какие иконки и прятание окон, по твоим показаниям не требуется. Все что нужно, так это запустить поток по выбору из меню, пункт меню запретить до окончания и продолжать работать с программой.
Anatoly Podgoretsky (2007-11-10 14:54:00) [5]> IOrist (10.11.2007 14:46:25) [25]
Там ничего сверхестественного нет, начни со чтения справки, по теме Writing multi-threaded applications
IOrist (2007-11-10 14:46:00) [6]с иконкой разобрался:
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:41:00) [7]> DVM (10.11.2007 14:25:23) [23]
В которой он ни бум, бум и маловероятно, что будет бум. Поскольку даже вопрос задать не может, а что же он тогда с ответами будет делать.
DVM (2007-11-10 14:25:00) [8]
> Progs (10.11.07 14:07) [22]
> Так чтоли.
> Часть кода:
Не так. Ты прочитай внимательно всю ветку, выяснили же, что не иконка в области уведомлений ему нужна а многопоточность.
Progs (2007-11-10 14:07:00) [9]Так чтоли.
Часть кода:
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-09 23:16:00) [10]
> ой кнечно же c помощью WinAPI
А остальная часть твоей программы тоже написана чиста на WinApi ?
Если нет, то зачем поток создаать средствами только API? Тогда уж TThread.
IOrist (2007-11-09 23:11:00) [11]ой кнечно же c помощью WinAPI
IOrist (2007-11-09 23:02:00) [12]я не знаю про WinAPI и VCL
DVM (2007-11-09 22:47:00) [13]
> Если вы считаете, что это можно сделать через поток, то
> пожалейста объясните
Для начала ответь на [16]. Ну и еще можно начать читать про TThread в справке.
IOrist (2007-11-09 22:38:00) [14]
> Еще остается вопрос, чтобы окончательно выяснить твои намеренья,
> это должно быть сделано с помощью WinAPI или в рамках VCL?
> Ветку то разместил в WinAPI
я не знаю как создать этот поток, поэтому и обращаюсь.
Если вы считаете, что это можно сделать через поток, то пожалейста объясните
Anatoly Podgoretsky (2007-11-09 22:32:00) [15]> IOrist (09.11.2007 22:31:15) [15]
Еще остается вопрос, чтобы окончательно выяснить твои намеренья, это должно быть сделано с помощью WinAPI или в рамках VCL?
Ветку то разместил в WinAPI
IOrist (2007-11-09 22:31:00) [16]да наверно.
Anatoly Podgoretsky (2007-11-09 22:29:00) [17]> DVM (09.11.2007 22:24:08) [8]
Гейтс старался, давай не будем ему мешать.
Anatoly Podgoretsky (2007-11-09 22:28:00) [18]
> Забудь. Давай по другому.
Поток что ли нужен?
DVM (2007-11-09 22:27:00) [19]
> Хотелось, чтобы выполнялась та процедура и я параллельно
> мог бы, скажем, чтото редактировать, изменять данные в Grid'е
> и т.д.
печать в отдельный поток вынести
Anatoly Podgoretsky (2007-11-09 22:27:00) [20]
> • «Начинающим» (вспомогательная конференция. если вам
> трудно понять самим, что вам нужно или есть желание и способности
> помогать новичкам — вам сюда)