{With SHAppBarMessage }uses
ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
tabd: TAppBarData;
PosString: string;
begin
FillChar(tabd, SizeOf(TAppBarData), 0);
tabd.cbSize := SizeOf(TAppBarData);
if SHAppBarMessage(ABM_GETTASKBARPOS, Tabd) = 0 then Exit;
with Tabd.rc do
PosString := Format(' (%d, %d);(%d, %d) ', [Left, Top, Right, Bottom]);
case tabd.uEdge of
ABE_LEFT: ShowMessage('Left Position' + PosString);
ABE_TOP: ShowMessage('Top Position' + PosString);
ABE_RIGHT: ShowMessage('Right Position' + PosString);
ABE_BOTTOM: ShowMessage('Bottom Position' + PosString);
end;
end;
Код, предоставленный в этом примере, определяет процедуру, которая использует функцию SHAppBarMessage для получения позиции панели задач (также известной как панель задач) на рабочем столе. Функция SHAppBarMessage является частью Windows Shell API и позволяет коммуницировать с панелью задач.
Вот разбивка того, что код делает:
Он объявляет переменную tabd типа TAppBarData, которая представляет собой структуру данных, используемую функцией SHAppBarMessage для получения информации о панели задач.
Функция FillChar используется для очистки памяти, выделенной для tabd.
Свойство cbSize переменной tabd устанавливается в размер структуры TAppBarData, который необходим функции SHAppBarMessage.
Если вызов функции SHAppBarMessage возвращает ошибку (т.е. 0), код выходит из процедуры.
Позиция панели задач получается с помощью свойства rc переменной tabd, которое содержит координаты прямоугольника панели задач (x, y, ширина и высота).
Позиция форматируется в виде строки (PosString) в формате "(left, top);(right, bottom)".
В зависимости от значения свойства uEdge переменной tabd, которое указывает, находится ли панель задач на левой, верхней, правой или нижней кромке экрана, отображается сообщение с информацией о позиции.
В этом альтернативном решении используется функция GetSystemMetrics, которая предоставляет более контролируемый вывод:
procedureTForm1.Button1Click(Sender:TObject);varLeftEdge,TopEdge:Integer;beginLeftEdge:=GetSystemMetrics(SM_CXEDGE);TopEdge:=GetSystemMetrics(SM_CYEDGE);caseGetSystemMetrics(SM_MEDIANETWORKWIDTH)of0:ShowMessage('Taskbar is at the left edge');1:ShowMessage('Taskbar is at the top edge');2:ShowMessage('Taskbar is at the right edge');3:ShowMessage('Taskbar is at the bottom edge');end;// Display the position as a stringShowMessage(Format('Left: %d, Top: %d',[LeftEdge,TopEdge]));end;
В этом альтернативном решении мы используем функцию GetSystemMetrics для получения информации о позиции панели задач. Константы SM_CXEDGE и SM_CYEDGE указывают координаты левой и верхней кромок панели задач, в то время как SM_MEDIANETWORKWIDTH указывает, на какой кромке находится панель задач (0 = left, 1 = top, 2 = right, 3 = bottom). Затем мы используем оператор case для определения позиции и отображаем ее в сообщении.
Определить позицию панели задач в программе на языке Delphi с помощью функции SHAppBarMessage и формирования структуры TAppBarData.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.