Windows
Иконка на Tray'е это просто картинка, а не окно какой-либо программы (исследование системы с помощью Microsoft Spy++ for Windows показывает, что это не окно вообще). System Tray отслеживает события мыши над иконкой и, в случае надобности, показывает ToolTip для этой иконки. Так же он отсылает сообщения о всех действиях мыши над иконкой окну, которое поместило иконку на Tray. Таким образом, нельзя поместить программу на Tray. Любая программа может добавить столько иконок на Tray, сколько ей необходимо. При этом главное окно программы не обязано исчезать или минимизироватся - примером может служить Microsoft Internet Mail, помещающая иконку " конверт" на Tray в случае появления новых писем.
- Подробности
- Родительская категория: Windows
- Категория: System tray
Эта программа добавляет файл "File.txt" в "Пуск/Документы".
Code: |
uses ShlOBJ;
procedure TForm1.Button1Click(Sender: TObject); begin SHAddToRecentDocs(SHARD_PATH, PChar('File.txt')); end; |
Автор советов: Даниил Карапетян
e-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Автор справки: Алексей Денисов
e-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
- Подробности
- Родительская категория: Windows
- Категория: Taskbar, кнопка Пуск, Системное меню
Если вы не хотите, чтобы ваше приложение имело иконку в панели задач, добавьте следующие строки в исходный код проекта:
Code: |
Application.CreateHandle; ShowWindow(Application.Handle, SW_HIDE); Application.ShowMainForm := FALSE; |
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Вызовите Windows API функцию SHAddToRecentDocs() передав nil вместо имени файла в качестве параметра.
- Подробности
- Родительская категория: Windows
- Категория: Taskbar, кнопка Пуск, Системное меню
Code: |
procedure WMQueryOpen(var Msg: TWMQueryOpen); message WM_QUERYOPEN;
// ... и ее реализация procedure TMainForm.WMQueryOpen(var Msg: TWMQueryOpen); begin Msg.Result := 0; end; |
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Я хочу представить простой мульти-экран эмулятор, написанный на Delphi.
Он состоит в небольшой форме размещения в правом нижнем углу экрана, прямо над треем, которая состоит из 5 кнопок.
В начале первая кнопка вниз; затем, когда я нажимаю другую кнопку, открывается новый рабочий стол. В этом новом рабочем столе я могу открыть другие программы
и так далее с другими кнопками. Когда я вернусь к одной из кнопок, Я буду видеть только программы, открытые в этом контексте, без других.
Фокус состоит в том, чтобы сделать следующие шаги непосредственно перед нажатием другой кнопки:
- Подробности
- Родительская категория: Windows
- Категория: Taskbar, кнопка Пуск, Системное меню
Дело-то вот в чем: Главным окном программы дельфийской является не главная форма, а окно TApplication, которое имеет нулевые размеры, поэтому его не видно. Именно для него показывается иконка на панели задач. Когда пользователь нажимает кнопку минимизации на главной форме, команда минимизации передается этому окну, и сворачивается именно оно, а для остальных просто делается hide. А так как окно TApplication имеет нулевые размеры, то и анимации никакой не видно.
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Добавить новый пункт меню в системное меню диалога:
Code: |
AppendMenu(GetSystemMenu(Self.Handle,FALSE),MF_ENABLED,1001,'&Help'); |
Автор ответа: Sheff
- Подробности
- Родительская категория: Windows
- Категория: Taskbar, кнопка Пуск, Системное меню
Code: |
procedure TMyForm.CreateParams(var Params :TCreateParams); {override;} begin inherited CreateParams(Params); {CreateWindowEx} Params.ExStyle := Params.ExStyle or WS_Ex_AppWindow; end;
|
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Code: |
program proga2;
uses Windows;
var Wnd: THandle; { объявляем переменные } int: integer;
begin Randomize; { холостой прогон генератора случайных чисел } int := Random(3); { выбор одного варианта из четырёх } case int of 0: { если первый вариант то } begin Wnd := FindWindow('Progman', nil); Wnd := FindWindowEx(Wnd, HWND(0), 'ShellDll_DefView', nil); { прячем трей } ShowWindow(Wnd, sw_hide); end; 1: { если второй вариант то } begin Wnd := FindWindow('Shell_TrayWnd', nil); Wnd := FindWindowEx(Wnd, HWND(0), 'TrayNotifyWnd', nil); Wnd := FindWindowEx(Wnd, HWND(0), 'TrayClockWClass', nil); { прячем часы } ShowWindow(Wnd, sw_hide); end; 2: begin Wnd := FindWindow('Shell_TrayWnd', nil); Wnd := FindWindowEx(Wnd, HWND(0), 'Button', nil); {прячем кнопку "Пуск"} ShowWindow(Wnd, sw_hide); end; 3: begin Wnd := FindWindow('Shell_TrayWnd', nil); Wnd := FindWindowEx(Wnd, HWND(0), 'TrayNotifyWnd', nil); { прячем "Панель задач" } ShowWindow(Wnd, sw_hide); end; end;
end. |
- Подробности
- Родительская категория: Windows
- Категория: Taskbar, кнопка Пуск, Системное меню
Code: |
uses CommCtrl; {©Drkb v.3}
function GetModuleFileNameExW(hProcess:THandle; hModule:HMODULE; lpFilename:PWideChar; nSize:DWORD):DWORD; stdcall; external 'PSAPI.DLL';
const ICON_SMALL2 = 2;
function WindowGetEXE(wnd:HWND):string; var wt:array[0..MAX_PATH-1] of WChar; r:integer; prc:THandle; prcID:cardinal; begin result:=''; if GetWindowThreadProcessID(wnd,prcID)<>0 then begin prc:=OpenProcess(PROCESS_ALL_ACCESS,false,prcID); if prc<>0 then try r:=GetModuleFileNameExW(prc,0,wt,MAX_PATH*2); if r<>0 then result:=wt; finally CloseHandle(prc) end end end;
function WindowGetIcon(wnd:HWND; fSmall:boolean):Cardinal; var defIcon:HICON; r,iType1,iType2: integer; begin defIcon:=LoadIcon(0,IDI_APPLICATION); if fSmall then begin iType1:=ICON_SMALL2; iType2:= GCL_HICONSM; end else begin iType1:=ICON_BIG; iType2:= GCL_HICON; end;
r:=SendMessageTimeOut(wnd,WM_GETICON,iType1,0,SMTO_ABORTIFHUNG or SMTO_NOTIMEOUTIFNOTHUNG, 100, result); if (r=0) then result:=defIcon else begin if (result=0) then result:=GetClassLong(wnd,iType2); if (result=0) then result:=defIcon end; end;
function EnumWindowsProc(wnd:HWND; lParam: LPARAM):BOOL; stdcall; var wn:array[0..MAX_PATH-1] of char; begin result:=true; if IsWindowVisible(wnd) and (GetParent(wnd)=0) and (GetWindow(wnd,GW_OWNER)=0) and ((GetWindowLong(wnd,GWL_EXSTYLE) and WS_EX_TOOLWINDOW)=0) then begin GetWindowText(wnd,wn,MAX_PATH); with Form1.ListView1.Items.Add do begin Caption :=wn; // заголовок SubItems.Add(IntToStr(wnd)); // дескриптор SubItems.Add(WindowGetEXE(wnd)); // exe SubItems.Add(' '); // колонка для большой иконки ImageIndex:=ImageList_AddIcon(Form1.ImageList1.Handle,WindowGetIcon(wnd,true)); // маленькая иконка SubItemImages[2] := ImageList_AddIcon(Form1.ImageList2.Handle,WindowGetIcon(wnd,false)); // большая иконка end; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin ListView1.Clear; ImageList1.Clear; ImageList2.Clear; EnumWindows(@EnumWindowsProc,0); end;
procedure TForm1.FormCreate(Sender: TObject); begin // ImageList1 - 16x16; ImageList2 - 32x32; ListView1.SmallImages:=ImageList1; ListView1.LargeImages:=ImageList2; end; |
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Страница 36 из 42