Форум: "Основная";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
ВнизZorder форм Найти похожие ветки
← →
Kns (2007-07-25 14:21) [0]Добрый день есть такая задача - сделать делать чтобы формы приложения всегда были в одном продяке (имею в виду zOrder) в независимоти от того получают они фокус или нет.
Как можно это реализовать?
← →
DVM © (2007-07-25 14:31) [1]
> Как можно это реализовать?
WM_WINDOWPOSCHANGING + SetWindowPos() + hWndInsertAfter
← →
Kns (2007-07-25 16:17) [2]Что-то не совсем выходит.
Сделал так : создал проект из трех форм, предположим что Form2 должна всегда лежать за Form1.
тогда в Form2 обявляю
public
{ Public declarations }
procedure ChangeOrder(var msg:TMsg); message WM_WINDOWPOSCHANGING;
end;
procedure TForm2.ChangeOrder(var msg:TMsg);
var ps:^WINDOWPOS;
begin
ps:=Pointer(msg.wParam);
SetWindowPos(ps.hwnd,GetNextWindow(Form1.Handle,GW_HWNDPREV),ps.x,ps.y,ps.cx,ps. cy ,ps.flags);
end;
При таскании form2 начинает все плыть на всех остальных формах и она всерано оказыватся поверх.
← →
Kns (2007-07-25 16:48) [3]Ну кое в чем ошибся WM_WINDOWPOSCHANGING передается какрас перед вызовом SetWindowPos, т.е. в этом случае нельзя вызвать SetWindowPos нужно менять данные в структуре WINDOWPOS.
в идеале вроде такprocedure TForm2.ChangeOrder(var msg:TMsg);
var ps:^WINDOWPOS;
begin
ps:=Pointer(msg.wParam);
ps.hwndInsertAfter:=GetNextWindow(Form1.Handle,GW_HWNDPREV);
end;
Но это почему то тоже не помогает.
← →
DVM © (2007-07-25 17:34) [4]
> SetWindowPos, т.е. в этом случае нельзя вызвать SetWindowPos
можно вызывать, но поставить флаг соответствующий.
Обработку WM_WINDOWPOSCHANGING надо производить ВО ВСЕХ формах
← →
Kns (2007-07-25 17:51) [5]Ага SWP_NOSENDCHANGING!
Спасиб теперь уже получилось почти то что нужно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.05 c