Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сворачивание приложение, кроме одного окошка 
:(
    Опции темы
z-END
Дата 3.3.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Есть приложение, при его минимизации (Application.OnMinimize) приложение "переезжает в трей",
но очень хочется чтобы одна формочка необращала внимание на минимизацию и продолжала работать как ни в чем нибывало... как это осуществить?



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 3.3.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нужно вместо минимизации прятать формы.
PM MAIL   Вверх
z-END
Дата 3.3.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Snowy, это конечно правильно... но я юзаю уже готовый компонент, который использует какраз минимизацию smile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 3.3.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



По другому никак. Разве что второе приложение делать.
Если свернуто приложение, то все формы не видны.
Вывод один - не используй готовый компонент или переправь под свои нужды.
У меня такая же проблема была. Написал свою реализацию и сделал так, как нужно.
Тут же все просто. Никакой компонент нафиг не нужен.
PM MAIL   Вверх
Snowy
Дата 3.3.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вот пример. В нем я сделал только сворачивание главной формы, без сворачивания остальных.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TrayIcon;

type
  TForm1 = class(TForm)
  private
    procedure WMTRAY_MAINICON(var Mes: Messages.TMessage);
                              message WM_TRAYICON + MAIN_ICON;
    procedure OnMinimize(var Mes: Messages.TMessage); message WM_SYSCOMMAND;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnMinimize(var Mes: Messages.TMessage);
begin
  if Mes.WParam = SC_MINIMIZE then
  begin
    Hide;
    ShowWindow(Application.Handle, SW_HIDE);
    AddIcon(MAIN_ICON, Form1.Icon.Handle, Form1.Caption);
  end else inherited;
end;

procedure TForm1.WMTRAY_MAINICON(var Mes: Messages.TMessage);
begin
  case Mes.LParam of
    WM_LBUTTONDBLCLK: begin
                        Show;
                        ShowWindow(Application.Handle, SW_SHOW);
                        SetForegroundWindow(Handle);
                        DeleteIcon(MAIN_ICON);
                      end;
    end;
end;

end.


Вот модуль для работы с иконкой.
Код
unit TrayIcon;

interface

uses Windows, Messages, ShellAPI, Forms;

const
  WM_TRAYICON = WM_APP + 1;
  MAIN_ICON = 1;

procedure AddIcon(ID: byte = MAIN_ICON; IcoN: HIcon = 0; Tip: string = '');
{* Добавляет иконку в трей. На входе:
   ID - id иконки (def = MAIN_ICON);
   IcoN - номер иконки в exe (def = 0) или hIcon нужной иконки
   Tip - Hint на иконе (def = '') }

procedure DeleteIcon(ID: byte = MAIN_ICON);
{* Убивает икону в трее. На входе: ID - id иконки (def - ) }

procedure ModifyIcon(ID: byte = MAIN_ICON; IcoN:HIcon=0;Tip:string='');
{* Изменяет параметры иконы - иконку и/или хинт. На входе то же, что и AddIcon }

implementation

type
  PNotifyIconData = ^TNotifyIconData;
  TNotifyIconData = record
    cbSize: DWORD;
    Wnd: HWND;
    uID: UINT;
    uFlags: UINT;
    uCallbackMessage: UINT;
    hIcon: HICON;
    szTip: array [0..63] of AnsiChar;
  end;

function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall; external 'shell32.dll' name 'Shell_NotifyIconA';

function TaskBarAddIcon(hWindow: HWND; ID: Cardinal; ICON: hIcon;
 CallbackMessage: Cardinal; Tip: PChar): Boolean;
var
  NID: TNotifyIconData;
begin
  FillChar(NID, SizeOf(TNotifyIconData), 0);
  with NID do begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd   := hWindow;
    uID    := ID;
    uFlags := 7; // MESSAGE or ICON or TIP
    uCallbackMessage := CallbackMessage;
    hIcon  := Icon;
    lstrcpyn(szTip, Tip, SizeOf(szTip));
  end;
  Result := Shell_NotifyIcon(0, @NID); // AddIcon
end;

function TaskBarDeleteIcon(hWindow: HWND; ID: Integer): Boolean;
var
  NID: TNotifyIconData;
begin
  FillChar(NID, SizeOf(TNotifyIconData), 0);
  with NID do begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd    := hWindow;
    uID    := ID;
  end;
  Result := Shell_NotifyIcon(2, @NID); // DeleteIcon
end;

function TaskBarModifyIcon(hWindow: HWND; ID: Cardinal; Flags: Cardinal;
 ICON: hIcon; Tip: PChar): Boolean;
var
  NID: TNotifyIconData;
begin
  FillChar(NID, SizeOf(TNotifyIconData), 0);
  with NID do begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd    := hWindow;
    uID    := ID;
    uFlags := Flags;
    hIcon  := Icon;
    lstrcpyn(szTip, Tip, SizeOf(szTip));
  end;
  Result := Shell_NotifyIcon(1, @NID);
end;

procedure AddIcon(ID:byte=MAIN_ICON;IcoN:HIcon=0;Tip:string='');
var
  h: hIcon;
begin
  if IcoN < 10 then
    h := ExtractIcon(hInstance, PChar(ParamStr(0)), IcoN)
  else h := IcoN;
  if h <> 0 then
    TaskBarAddIcon(Application.MainForm.Handle, ID,
                   h, WM_TRAYICON + ID, PChar(Tip));
end;

procedure DeleteIcon(ID: byte = MAIN_ICON);
begin
  TaskBarDeleteIcon(Application.MainForm.Handle, ID);
end;

procedure ModifyIcon(ID: byte = MAIN_ICON; IcoN:HIcon=0;Tip:string='');
const
  NIF_ICON        = $00000002;
  NIF_TIP         = $00000004;
var
  h: hIcon;
begin
  if IcoN < 10 then
    h := ExtractIcon(hInstance, PChar(ParamStr(0)), IcoN)
  else h := IcoN;
  if h <> 0 then
    TaskBarModifyIcon(Application.MainForm.Handle, ID, NIF_ICON,
                      h, PChar(Tip));
end;

end.

Причем иконок может быть много - хоть по одной на каждую форму.
Только ID им разный задавай.
PM MAIL   Вверх
Quadr0
Дата 3.3.2006, 22:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 10:42
  Вверх
Snowy
Дата 4.3.2006, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Quadr0 @ 3.3.2006, 22:25 Найти цитируемый пост)
ShowWindow(Application.Handle, SW_HIDE);
Это же наоборот прячет форму?

Не форму, а Aplication - убираем с панели задач.
PM MAIL   Вверх
z-END
Дата 4.3.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Quadr0, действительно, твой вариант помогает обойти эту проблему, но появляется дургая - если отображается это окно, до даже при минимизированном приложении, оно отображается на панели задач, а этого быть недолжно. т.к. приложение при минимизации переезжает жить в трей.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Yanis
Дата 4.3.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(z-END @ 4.3.2006, 14:14 Найти цитируемый пост)
даже при минимизированном приложении, оно отображается на панели задач, а этого быть недолжно

см. Snowy Дата 4.3.2006, 02:21 (ссылка)


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.