Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Найти вернее окно (форму) среди нескольких одинаковых   Найти похожие ветки 

 
Дмитрий Белькевич   (2012-08-16 14:04) [0]

У приложения есть несколько одинаковых форм (созданных в реалтайме). Стиль форм - fsNormal. Нужно найти самую верхнюю форму (по z order) из них.


 
AV ©   (2012-08-16 14:15) [1]

Screen.ActiveForm ?


 
Дмитрий Белькевич   (2012-08-16 14:29) [2]


> Screen.ActiveForm ?


Уточняю. Ни одна форма из них не активна. Что бы понять, как это выглядит.
В системе два монитора. На одном мониторе - активная форма (главная форма программы). На втором мониторе - 2-3, или больше, одинаковых форм. Нужно найти самую верхнюю из них.


 
Anatoly Podgoretsky ©   (2012-08-16 14:30) [3]

Если же все таки окна то

GetTopWindow function to search all child windows of a parent window and return the handle of the child window that is highest in Z order.

И GetNextWindow function для прохода по списку


 
AV ©   (2012-08-16 14:43) [4]


> Дмитрий Белькевич   (16.08.12 14:29) [2]

т.е. вторую сверху?
тогда, Anatoly Podgoretsky ©   (16.08.12 14:30) [3]
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633509%28v=vs.85%29.aspx


 
Дмитрий Белькевич   (2012-08-17 13:40) [5]

>т.е. вторую сверху?

Уточняю :) окон может быть много разных (в приложении 40 разных форм, что там юзер пооткрывал и где какие окна по мониторам будут расположены - я заранее не знаю). Знаю только, что может быть открыто несколько одинаковых форм одного класса (TForm14) одновременно. Они могут быть открыты как на одном мониторе, так и на разных. Нужно найти все формы такого класса (это знаю как сделать) и найти самую "верхнюю" из них (это не знаю).

Спасибо за ответы и прошу прощения за неполную постановку задачи сразу.


 
AV ©   (2012-08-17 13:49) [6]

ну и?

GetTopWindow - верхнее, если оно in SET - выход
repeat
GetNextWindow,  если оно in SET - выход
until Кончились окна

SET =

> найти все формы такого класса (это знаю как сделать)


 
Дмитрий Белькевич   (2012-08-17 16:19) [7]


> ну и?


Элементарно, Ватсон :) Спасибо, нужно больше отдыхать :)


 
Дмитрий Белькевич   (2012-08-19 12:19) [8]

Сделал так:


function TForm1.GetTopForm14: TForm;
var
Wnd: THandle;

function WindowClassName(Wnd: HWND): string;
var
 Buffer: array [0..255] of char;
begin
 SetString(Result, Buffer, GetClassName(Wnd, Buffer, SizeOf(Buffer) - 1));
end;

begin
Result := nil;
Wnd := GetTopWindow(0);
while (Wnd <> 0) do
begin
 if WindowClassName(Wnd) = "TForm14" then
  Exit(TForm(FindControl(Wnd)));
 Wnd := GetNextWindow(Wnd, GW_HWNDNEXT);
end;
end;


Вопрос. Можно ли как-то найти форму по классу, а не по названию класса?


 
Дмитрий С ©   (2012-08-19 13:34) [9]

var FC: TFormClass;

...
FC := TForm14;

WindowClassName(Wnd) = FC.ClassName :)


 
Дмитрий Белькевич   (2012-08-19 20:53) [10]

Спасибо :)


 
Алибабай   (2012-08-20 21:40) [11]

function TopForm(AClass: TFormClass): TForm;
var
 i: integer;
begin
 for i := 0 to Screen.FormCount - 1 do
 begin
   Result := Screen.Forms[i];
   if Result is AClass then
     Exit;
 end;
 Result := nil;
end;



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
15-1352320203
Юрий
2012-11-08 00:30
2013.03.22
С днем рождения ! 8 ноября 2012 четверг


2-1333615982
webpauk
2012-04-05 12:53
2013.03.22
передача в процедуру массива


2-1331584288
advise
2012-03-13 00:31
2013.03.22
Посоветуйте плз как разбить AVI файл на кадры?


2-1328771126
JohnKorsh
2012-02-09 11:05
2013.03.22
Масштабирование формы при разных разрешениях экрана.


15-1335360956
Программист Максим
2012-04-25 17:35
2013.03.22
Посоветуйте HTML-PHP-CSS-JavaScript редактор.