|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Форма как панель инструментов Windows
Не могу сделать форму похожую на панель инструментов Windows, т.е.:
1. всегда была сверху (это реализуемо) 2. для других приложений экран как бы уменьшается на высоту этой формы (она у меня расположена по всему верхнему краю) и их заголовки не закрываются моей формой. |
#2
|
||||
|
||||
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
NumLock, большое спасибо за ссылку. Но ты бы не мог объяснить как этим воспользоваться в delphi 7. Извини за тупизм.
|
#4
|
||||
|
||||
Код:
program CreateWindowAPI; uses ShellAPI, Windows, Messages; var AWndClass: WNDCLASS; AWnd: HWND; AMsg: TMsg; AppBarData: TAppBarData; function Rect(Left, Top, Right, Bottom: Integer): TRect; begin Result.Left := Left; Result.Top := Top; Result.Bottom := Bottom; Result.Right := Right; end; function WindowProc(AWnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): Longint; stdcall; begin case Msg of WM_CREATE: begin ZeroMemory(@AppBarData, SizeOf(TAppBarData)); AppBarData.cbSize:=SizeOf(TAppBarData); AppBarData.hWnd:=AWnd; AppBarData.uCallbackMessage:=WM_APP+$101; SHAppBarMessage(ABM_NEW, AppBarData); AppBarData.uEdge:=ABE_TOP; AppBarData.rc:=Rect(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); SHAppBarMessage(ABM_QUERYPOS, AppBarData); AppBarData.rc.Bottom:=AppBarData.rc.Top+100; SHAppBarMessage(ABM_SETPOS, AppBarData); MoveWindow(AWnd, AppBarData.rc.Left, AppBarData.rc.Top, AppBarData.rc.Right-AppBarData.rc.Left, AppBarData.rc.Bottom-AppBarData.rc.Top, False); Result:=0; end; WM_DESTROY: begin SHAppBarMessage(ABM_REMOVE, AppBarData); Result:=0; end; WM_CLOSE: begin PostQuitMessage(0); Result:=0; end; else Result:=DefWindowProc(AWnd, Msg, wParam, lParam); end end; begin AWndClass.Style:=CS_HREDRAW or CS_VREDRAW; AWndClass.lpfnWndProc:=@WindowProc; AWndClass.cbClsExtra:=0; AWndClass.cbWndExtra:=0; AWndClass.hInstance:=HInstance; AWndClass.hIcon:=LoadIcon(0, IDI_APPLICATION); AWndClass.hCursor:=LoadCursor(0, IDC_ARROW); AWndClass.hbrBackground:=GetStockObject(WHITE_BRUSH); AWndClass.lpszMenuName:=nil; AWndClass.lpszClassName:='TWINAPIFORM'; RegisterClass(AWndClass); AWnd:=CreateWindowEx( WS_EX_CLIENTEDGE, AWndClass.lpszClassName, AWndClass.lpszClassName, WS_VISIBLE or WS_SYSMENU or WS_POPUP, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), 0, 0, HInstance, nil); UpdateWindow(AWnd); 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/134679 Пишу программы за еду. __________________ |
#5
|
|||
|
|||
У меня уже готовая форма form1.
В событии create для нее я добавил такой код: Цитата:
Окно не устанавливается в область выделенную для панели. Не подскажете где я недопонимаю. |
#6
|
||||
|
||||
На правах штатного экстрасенса предполагаю, что это может быть из-за того, что стандартная форма создаётся со стандартными параметрами, когда в коде тов. NumLock присутствует фрагмент:
Код:
CreateWindowEx(WS_EX_CLIENTEDGE, ... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
|||
|
|||
Все всем спасибо! Задачу решил. Проблема была вызвана тем, что в коде использовалась установка окна в позицию 0,0, а поскольку размеры активного окна уже уменьшились - окно перемещалось в доступную для других окон область, т.е. ниже чем область панели.
Еще раз большое спасибо экспертам! Сколько проблем люди избежали бы, будь они внимательнее. Например: проверяли наличие туалетной бумаги до, а не после. |
Этот пользователь сказал Спасибо AlexSky771 за это полезное сообщение: | ||
Gareth (25.10.2014)
|