Показать сообщение отдельно
  #10  
Старый 08.12.2010, 10:08
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

все, кроме работы с приводом - создание иконки в трее, появление popup-меню при клике на ней и 2 пунтка меню (exe 23кб, иконка в exe 7кб ):
Код:
program CreateWindow;

{$R CreateWindow.res}

uses
  ShellAPI,
  Windows, Messages;

var
  AWndClass: WNDCLASS;
  AWnd: HWND;
  AMsg: TMsg;
  ANotifyIconData: TNotifyIconData;
  AMenu: HMENU;
  curpos: TPoint;

function WindowProc(AWnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
begin
  case Msg of
    WM_CREATE: begin
      ZeroMemory(@ANotifyIconData, SizeOf(ANotifyIconData));
      ANotifyIconData.cbSize:=SizeOf(ANotifyIconData);
      ANotifyIconData.Wnd:=AWnd;
      ANotifyIconData.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE;
      ANotifyIconData.uCallbackMessage:=WM_USER+$1001;
      ANotifyIconData.hIcon:=AWndClass.hIcon;
      ANotifyIconData.szTip:='Medvedev O.V.'#13#10'Severodvinsk, 2010';
      Shell_NotifyIcon(NIM_ADD, @ANotifyIconData);
      AMenu:=CreatePopupMenu;
      AppendMenu(AMenu, MF_STRING, 1, 'Exit');
      AppendMenu(AMenu, MF_STRING, 2, 'About');
      Result:=0;
    end;
    WM_DESTROY: begin
      DestroyMenu(AMenu);
      Shell_NotifyIcon(NIM_DELETE, @ANotifyIconData);
      Result:=0;
    end;
    WM_CLOSE: begin
      PostQuitMessage(0);
      Result:=0;
    end;
    WM_COMMAND: begin
      if HIWORD(wParam)=0 then
      begin
        if (LOWORD(wParam)=1) then PostQuitMessage(0)
        else if (LOWORD(wParam)=2) then MessageBox(0, PChar('Medvedev O.V.'#13#10'Severodvinsk, 2010'), 'About', MB_OK or MB_SYSTEMMODAL);
      end;
      Result:=0;
    end;
    WM_USER+$1001: begin
      case lParam of
        WM_LBUTTONDOWN, WM_RBUTTONDOWN: begin
          GetCursorPos(curpos);
          TrackPopupMenu(AMenu, 0, curpos.X, curpos.Y, 0, AWnd, nil);
        end;
      end;
      Result:=0;
    end;
    else Result:=DefWindowProc(AWnd, Msg, wParam, lParam);
  end
end;

begin
  AWndClass.Style:=0;
  AWndClass.lpfnWndProc:=@WindowProc;
  AWndClass.cbClsExtra:=0;
  AWndClass.cbWndExtra:=0;
  AWndClass.hInstance:=HInstance;
  AWndClass.hIcon:=LoadIcon(HInstance, 'APPICON');
  AWndClass.hCursor:=LoadCursor(0, IDC_ARROW);
  AWndClass.hbrBackground:=HBRUSH(COLOR_WINDOW);
  AWndClass.lpszMenuName:=nil;
  AWndClass.lpszClassName:='TWINAPIFORM';
  RegisterClass(AWndClass);
  AWnd:=CreateWindowEx(
    WS_EX_TOOLWINDOW,
    AWndClass.lpszClassName,
    AWndClass.lpszClassName,
    WS_POPUP,
    0, 0, 0, 0, 0, 0,
    HInstance,
    nil);
  while GetMessage(AMsg, 0, 0, 0) do
  begin
    TranslateMessage(AMsg);
    DispatchMessage(AMsg);
  end;
  DestroyWindow(AWnd);
  UnregisterClass(AWndClass.lpszClassName, HInstance);
  ExitProcess(0);
end.

http://data.cod.ru/78766
архив живет 3 дня!!!
__________________
Пишу программы за еду.
__________________
Ответить с цитированием