Taskbar, кнопка Пуск, Системное меню
Code: |
// Это необходимо объявить в секции public в верхней части вашего pas-файла procedure TForm1.IconCallBackMessage( var Mess : TMessage ); message WM_USER + 100;
procedure TForm1.FormCreate(Sender: TObject); var
nid: TNotifyIconData; begin
with nid do begin cbSize := SizeOf(TNotifyIconData); Wnd := Form1.Handle; uID := 1; uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; uCallbackMessage := WM_USER + 100; hIcon := Application.Icon.Handle; szTip := 'Текст всплывающей подсказки'; end; Shell_NotifyIcon(NIM_ADD, @nid); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var
nid: TNotifyIconData; begin
with nid do begin cbSize := SizeOf(TNotifyIconData); Wnd := Form1.Handle; uID := 1; uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; uCallbackMessage := WM_USER + 100; hIcon := Application.Icon.Handle; szTip := 'Текст всплывающей подсказки'; // Все, что указано выше, не является обязательным
end; Shell_NotifyIcon(NIM_DELETE, @nid); end;
procedure TForm1.IconCallBackMessage(var Mess: TMessage); var
sEventLog: string; begin
case Mess.lParam of // Сделайте здесь все что вы хотите. Например, // вызов контекстного меню при нажатии правой кнопки мыши.
WM_LBUTTONDBLCLK: sEventLog := 'Двойной щелчок левой кнопкой'; WM_LBUTTONDOWN: sEventLog := 'Нажатие левой кнопки мыши'; WM_LBUTTONUP: sEventLog := 'Отжатие левой кнопки мыши'; WM_MBUTTONDBLCLK: sEventLog := 'Двойной щелчок мышью'; WM_MBUTTONDOWN: sEventLog := 'Нажатие кнопки мыши'; WM_MBUTTONUP: sEventLog := 'Отжатие кнопки мыши'; WM_MOUSEMOVE: sEventLog := 'перемещение мыши'; WM_MOUSEWHEEL: sEventLog := 'Вращение колесика мыши'; WM_RBUTTONDBLCLK: sEventLog := 'Двойной щелчок правой кнопкой'; WM_RBUTTONDOWN: sEventLog := 'Нажатие правой кнопки мыши'; WM_RBUTTONUP: sEventLog := 'Отжатие правой кнопки мыши'; end; end;
|
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Code: |
procedure TForm1.Timer1Timer(Sender: TObject); begin FlashWindow(Application.Handle, True); end; |
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Code: |
procedure TForm1.Button1Click(Sender: TObject); begin MoveWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), 300, 0, 80, 22, true); end; |
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка Пуск
Code: |
unit TNA;
interface
uses Windows, Messages, SysUtils, Classes, Controls, Forms, ExtCtrls, ShellApi, Menus;
const k_WM_TASKMSG = WM_APP + 100; //die "100" ist ein frei wahlbarer Wert
type TForm1 = class(TForm) TPopupMenu1: TPopupMenu; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDblClick(Sender: TObject); procedure PopupMenuClick(Sender: TObject); private { Private-Deklarationen } tTNA: TNotifyIconData;
procedure WMTaskMsg(var Msg: TMessage); message k_WM_TASKMSG; procedure AppActive; procedure AppDeactivate; procedure ShowIcon; procedure ChangeIcon;
public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.DFM} {$R TNA.RES} //eine Resource mit 2 Icons oder Bitmaps
procedure TForm1.FormCreate(Sender: TObject); begin {la?t die Form schon bei Programmstart verschwinden} Application.ShowMainForm := False;
{Symbol im TNA anzeigen} Self.ShowIcon; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin {Symbol aus dem TNA entfernen} Shell_NotifyIcon(NIM_DELETE, @tTNA); end;
procedure TForm1.FormDblClick(Sender: TObject); begin {lassen wir doch die Form wieder verschwinden ...} Self.AppDeactivate;
{... und andern das Symbol in dem TNA} Self.ChangeIcon; end;
procedure TForm1.PopupMenuClick(Sender: TObject); begin case TPopupMenu(Sender).Tag of
{hier steht dann die Auswahl was getan werden soll} {wenn auf das erschienene Popupmenu geklickt wurde} end; end;
procedure TForm1.WMTaskMsg(var Msg: TMessage); var rCursor: TPoint; begin {wenn die Nachricht aus unserem definierten Bereich kommt dann ...} if Msg.wParam = tTNA.uID then begin {... tu was wenn das Ereignis ein ...} case Msg.lParam of
{... rechter Mausklick ist oder ...} WM_RBUTTONDOWN: begin {aktuelle Cursoposition holen} GetCursorPos(rCursor);
{ACHTUNG!!!!! Der folgende Aufruf ist an dieser Stelle ganz wichtig!!!!} {Erst durch diese API-Funktion wird das Popupmenu dazu bewegt zu verschwinden wenn ein Klick au?erhalb des Popupmenus erfolgt}
SetForegroundWindow(Self.Handle);
{Also, nicht vergessen!!!}
{Das Popupmenu erscheint an der gewunschten Position in dem TNA} TPopupMenu1.Popup(rCursor.x, rCursor.y); end;
{... ein linker doppelter Mausklick ist} WM_LBUTTONDBLCLK: Self.AppActive; end; end; end;
procedure TForm1.AppActive; var hOwner: THandle; begin {Form einblenden} SendMessage(Self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); ShowWindow(Self.Handle, SW_SHOW); SetForegroundWindow(Self.Handle);
{Symbol in der Taskbar einblenden} hOwner := GetWindow(Self.Handle, GW_OWNER); SendMessage(hOwner, WM_SYSCOMMAND, SC_RESTORE, 0); ShowWindow(hOwner, SW_SHOW); end;
procedure TForm1.AppDeactivate; begin {Form ausblenden} ShowWindow(Self.Handle, SW_HIDE);
{Symbol in der Taskbar ausblenden} ShowWindow(GetWindow(Self.Handle, GW_OWNER), SW_HIDE); end;
procedure TForm1.ShowIcon; begin tTNA.cbSize := SizeOf(tTNA); tTNA.Wnd := Self.Handle; tTNA.uID := 24112000; //frei wahlbarer Wert zur Identifizierung tTNA.uCallbackMessage := k_WM_TASKMSG; tTNA.hIcon := LoadIcon(hInstance, 'xxx'); //xxx ist die Bezeichnung eines Icons aus "TNA.res" StrCopy(tTNA.szTip, 'Hallo'); //Hint tTNA.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; {CB Symbol in dem TNA einrichten CE} Shell_NotifyIcon(NIM_ADD, @tTNA); end;
procedure TForm1.ChangeIcon; begin tTNA.cbSize := SizeOf(tTNA); tTNA.hIcon := LoadIcon(hInstance, 'yyy'); //yyy ist die Bezeichnung eines weiteren Icons aus "TNA.res" StrCopy(tTNA.szTip, 'Welt'); //Hint
{CB Symbol im TNA andern CE} Shell_NotifyIcon(NIM_MODIFY, @tTNA); end;
end. |
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Для начала создайте какой-нибудь Bitmap, который вы будете натягивать на кнопку [т.к. такого понятия как "заголовок кнопки ПУСК" в действительности не существует], а та надпись, что находится на стартовой кнопке, является рисунком. Создавая рисунок, учитывайте размеры и то, что левая сторона должна быть "плоской", как у нас на рисунке слева, это связано с особенностями наложения.
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка Пуск
В этой статье я хотел бы описать полезную недокументированную функцию GetTaskmanWindow. Функция GetTaskmanWindow возвращает дескриптор
окна, которое владеет кнопками панели задач. Вот цитата о панели задач из Microsoft MSDN: "Программа Microsoft® для Windows® интерфейс, включающий приложение
панель называется панелью задач. Панель задач может использоваться для выполнения таких задач, как переключение между открытыми Windows и запуск новых приложений..." и "панель задач содержит меню Пуск, кнопки панели задач, контекстное меню и панель состояния...". К сожалению, Win32 API не содержит документированных функций, которые могут быть использованы для доступа к задач, поэтому мы должны снова использовать недокументированный способ.
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Пример из серии "Что можно сделать с рабочим столом". В общем, это обычный трюк с кнопкой "Пуск" (Start).
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка Пуск
Есть ли у кого пример рисования на иконке минимизированного приложения с помощью Delphi?
Когда Delphi-приложение минимизировано, иконка, которая вы видите - реальное главное окно, объект TApplication, поэтому вам необходимо использовать переменную Application. Таким образом, чтобы удостовериться что приложение минимизировано, вызовите IsIconic(Application.Handle). Если функция возвратит True, значит так оно и есть. Для рисования на иконке создайте обработчик события Application.OnMessage. Здесь вы можете проверять наличие сообщения WM_Paint и при его нахождении отрисовывать иконку. Это должно выглядеть приблизительно так:
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка приложения на панели задач
Code: |
procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(Self.Handle, WM_SYSCOMMAND, SC_TASKLIST, 0); end; |
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка Пуск
Итак, если Вам надоело привычное статическое изображение кнопки "Пуск", то предлагаю немного оживить её :) Надеюсь, что это доставит Вам удовольствие.
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка Пуск
Приведенный пример прячет и показывает кнопку "Пуск", а также разрешает и запрещает ее.
- Подробности
- Родительская категория: Taskbar, кнопка Пуск, Системное меню
- Категория: Кнопка Пуск
Страница 2 из 3