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

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

Как прогу убрать в фоновый режим [D7, WinXP]


Страницы:   1 2

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]


>     • «Начинающим» (вспомогательная конференция. если вам
> трудно понять самим, что вам нужно или есть желание и способности
> помогать новичкам — вам сюда)


Страницы:   1 2

Наверх

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