Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
Дмитрий Белькевич   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.065 c
2-1330668332
Кос
2012-03-02 10:05
2013.03.22
Загрузка файла из списка ComboBox


15-1352449269
tur0k_mag
2012-11-09 12:21
2013.03.22
cxTreeList + поле типа Combobox


15-1350643594
Grimm375
2012-10-19 14:46
2013.03.22
Информировать, какие символы разрешено вводить


15-1345475256
DdiK
2012-08-20 19:07
2013.03.22
нужная программа мигая в трее забирает фокус


15-1351804905
ПростоФАН
2012-11-02 01:21
2013.03.22
Заказ по дельфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский