Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.03.2013, 20:27
orbb orbb вне форума
Прохожий
 
Регистрация: 30.12.2011
Сообщения: 23
Репутация: 10
По умолчанию Иконка в трее

Здрасте ребята , у меня вопрос о запуске програме в трее , писал тоже на асемблер давно , работает , пишу сейчас на делфи 6 , не хочет , есть проблеми. Помогите , покажите ошибки если не лень.
Вот мои пример с пустой форме :
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ShellApi, Menus,AppEvnts;

const
WM_ICONTRAY = WM_USER + 1;
NIF_INFO = 16;
NIF_SHOWTIP = $80;
WM_SHELLNOTIFY = WM_USER+5;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    est11: TMenuItem;
    est21: TMenuItem;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure est11Click(Sender: TObject);
    procedure est21Click(Sender: TObject);
  private
    TrayIconData: TNotifyIconData;
  public
    procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
    procedure MySize(var Msg: TMessage); message WM_SIZE;
  end;



var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  with TrayIconData do
  begin
    cbSize := SizeOf(TrayIconData);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_MESSAGE+NIF_ICON+NIF_TIP+NIF_INFO+NIF_SHOWTIP;
    uCallbackMessage := WM_ICONTRAY;      //WM_ICONTRAY
    hIcon := Application.Icon.Handle;
    StrPCopy(szTip, Application.Title);
    //uVersion:=NOTIFYICON_VERSION_4;
  end;

  Shell_NotifyIcon(NIM_ADD, @TrayIconData);

  //ShowWindow(Handle,SW_HIDE);
  //windows.PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;

procedure TForm1.TrayMessage(var Msg: TMessage);
var p : TPoint;
begin
  case Msg.lParam of
    WM_LBUTTONDOWN: ShowWindow(Handle,SW_RESTORE);
    WM_LBUTTONDBLCLK: ShowWindow(Handle,SW_RESTORE);
    WM_RBUTTONDOWN:
    begin
       SetForegroundWindow(Handle);
       GetCursorPos(p);
       PopUpMenu1.Popup(p.x, p.y);
       PostMessage(Handle, WM_NULL, 0, 0);
    end;
  end;
end;

procedure TForm1.MySize(var Msg: TMessage);
begin
 IF Msg.lParam=SIZE_MINIMIZED Then
   begin
   windows.PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
   //Form1.Hide;
   end;

end;

procedure TForm1.est11Click(Sender: TObject);
begin
//Form1.Show;
//ShowWindow(Handle,SW_RESTORE);
windows.PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
end;

procedure TForm1.est21Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
exitprocess(0);
end;

end.
Ответить с цитированием
  #2  
Старый 15.03.2013, 20:28
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Конкретно, где ошибка.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 15.03.2013, 20:30
orbb orbb вне форума
Прохожий
 
Регистрация: 30.12.2011
Сообщения: 23
Репутация: 10
По умолчанию

в общем прога не хочет минимизироватся, не хочет показатся после клика иконки в трее , воопще (((( и окно видится в таскбаре.
Ответить с цитированием
  #4  
Старый 15.03.2013, 20:48
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Есть готовые компоненты TrayIcon.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 15.03.2013, 20:52
orbb orbb вне форума
Прохожий
 
Регистрация: 30.12.2011
Сообщения: 23
Репутация: 10
По умолчанию

есть да , но когда установлю етот компоненет делфи покинул все осталъе компонентъи установлени от меня , примерно скаип компонент.
Я хочу простои пример на икон в трее если можно.
Ответить с цитированием
  #6  
Старый 15.03.2013, 21:02
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Проблема не в иконке. Работать надо не с хендлом формы, а с хендлом аппликухи, и обрабатывать сбытия аппликухи. Стандартная ошибка начинающих.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #7  
Старый 15.03.2013, 21:10
orbb orbb вне форума
Прохожий
 
Регистрация: 30.12.2011
Сообщения: 23
Репутация: 10
По умолчанию

с хендлом форме работает а с хендлом апликации не хочет.
Ответить с цитированием
  #8  
Старый 15.03.2013, 21:48
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от orbb
...когда установлю етот компоненет делфи покинул все осталъе компонентъи установлени от меня , примерно скаип компонент...
Его можно и не устанавливать - положить в папку с проектом (Cool)Trayicon.pas, прописать его в uses, в var записать TrayIcon: TTrayIcon;, в процедуре создания формы добавить следующее
Код:
...
TrayIcon:= TTrayIcon.Create(TrayIcon);
with TrayIcon do
begin
ToolTip:= 'Моя прога';
Icon:= Application.Icon;
Active:= True;
PopupMenu:= MyPopupMenu;
OnDblClick:= TrayIconOnDblClick;
...
end;
...
а при разрушении формы не забыть сделать это
Код:
TrayIcon.Destroy;
и всё. Зачем лисапет изобретать?
Ответить с цитированием
  #9  
Старый 18.03.2013, 14:52
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Можно сделать намного легче. Прикрепил юнит, пользуйтесь на здоровье.
Код:
uses Tray;
...
var
  TaskBarCreated : Boolean;
const 
  WM_TRAY = WM_USER + 1;
...
function WindowProc(Wnd: HWND; Msg, wParam, lParam: Integer): Integer; stdcall;
begin
  Result := 0;

  case Msg of
    WM_SYSCOMMAND:
    begin
      case LoWord(wParam) of
        // При сворачивании программы
        SC_MINIMIZE:
        begin
          TaskBarCreated := TaskBarAddIcon(Wnd, ID_ICON, WC.hIcon, WM_TRAY, 'Hello!');
          ShowWindow(Wnd, SW_MINIMIZE);
          ShowWindow(Wnd, SW_HIDE);
        end;

        // При восстановлении окна
        SC_RESTORE:
        begin
          if TaskBarCreated then
          begin
            TaskBarDeleteIcon(Wnd, ID_ICON);
            TaskBarCreated := False;
            ShowWindow(Wnd, SW_SHOWNORMAL)
          end
        end;
      end
    end;

    WM_TRAY:
    begin
      case LoWord(lParam) of
        WM_LBUTTONDBLCLK:
        begin
          SetForegroundWindow(Wnd);
          SendMessage(Wnd, WM_SYSCOMMAND, SC_RESTORE, 0);
        end;
      end
    end;

    WM_DESTROY:
    begin
      if TaskBarCreated then
        TaskBarDeleteIcon(Wnd, ID_ICON);
      PostQuitMessage(0);
      Exit
    end
  end;
  Result := DefWindowProc(Wnd, Msg, wParam, lParam)
end;
В юните есть еще функция для вывода хинта с области уведомления.
Вложения
Тип файла: rar Tray.rar (1.2 Кбайт, 76 просмотров)

Последний раз редактировалось M.A.D.M.A.N., 18.03.2013 в 15:46. Причина: Убрал мат
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025