Уважаемые!
Подскажите, пожалуйста, как, зная хэндл окна, изменять его свойства, например, его положение на экране?
Думаю, что это очевидно, но никак не могу найти как это сделать. Прочитал в хелпе, что поменять свойства окна можно только удалив старое и создав новое окно с другими свойствами. Так ли это? Если да, то как обратиться к окну (удалить), зная его хэндл?
Есть еще и второй вопрос. Но сначала предисловие.
Задача такая: нужно передвигать все дочерние окна родительского окна при перемещении последнего по экрану.
Я запоминаю в vector хэндлы всех дочерних окон (они создаются динамически в неопеределенном заранее количестве), а потом при перемещении родительского окна хочу менять координаты всех дочерних окон, беря их хэндлы из vector'а. Это наверно выглядит коряво. Но это первое, что пришло на ум. Хотелось сделать как в JavaScript'e, где окно знает кол-во всех дочерних элементов каждого типа (будь то Label или ListBox и т.д.). Но в Билдере (пишу на нем) такую штуку не знаю. Может подскажите идею как красивее сделать?!
В общем еще раз. Задача такая: нужно передвигать все дочерние окна (немодальные естесьно), перемещая родительское окно. Причем желательно перемещать их в момент удержания кнопки мыши, а не после ее отпускания.
Hello curt_russel, you wrote:
> Уважаемые! > Подскажите, пожалуйста, как, зная хэндл окна, изменять его свойства, > например, его положение на экране?
Вам нужно добраться до соответсвующего класса?
Тогда ищем в Screen.
Иначе смотрим справку по работе с окнами в MSDN.
> Прочитал в хелпе, что поменять свойства окна можно только удалив старое > и создав новое окно с другими свойствами. Так ли это?
Нет.
> Если да, то как обратиться к окну (удалить), зная его хэндл?
SendMessage, SetWindowLong, PostMessage, и т.д.
> В общем еще раз. Задача такая: нужно передвигать все дочерние окна > (немодальные естесьно), перемещая родительское окно. Причем желательно > перемещать их в момент удержания кнопки мыши, а не после ее отпускания.
Обрабатываем событие перемещения главного окна и двигаем дочерние окна как
нам вздумается.
Заводить вектор не нужно. Окно знает про своих детей (есть соответсвующее
свойство у формы)
Hello curt_russel, you wrote:
> Уважаемые! > Подскажите, пожалуйста, как, зная хэндл окна, изменять его свойства, > например, его положение на экране?
Вам нужно добраться до соответсвующего класса?
Тогда ищем в Screen.
Иначе смотрим справку по работе с окнами в MSDN.
> Прочитал в хелпе, что поменять свойства окна можно только удалив старое > и создав новое окно с другими свойствами. Так ли это?
Нет.
> Если да, то как обратиться к окну (удалить), зная его хэндл?
SendMessage, SetWindowLong, PostMessage, и т.д.
> В общем еще раз. Задача такая: нужно передвигать все дочерние окна > (немодальные естесьно), перемещая родительское окно. Причем желательно > перемещать их в момент удержания кнопки мыши, а не после ее отпускания.
Обрабатываем событие перемещения главного окна и двигаем дочерние окна как
нам вздумается.
Заводить вектор не нужно. Окно знает про своих детей (есть соответсвующее
свойство у формы)
Hello curt_russel, you wrote:
> Уважаемые! > Подскажите, пожалуйста, как, зная хэндл окна, изменять его свойства, > например, его положение на экране?
Вам нужно добраться до соответсвующего класса?
Тогда ищем в Screen.
Иначе смотрим справку по работе с окнами в MSDN.
> Прочитал в хелпе, что поменять свойства окна можно только удалив старое > и создав новое окно с другими свойствами. Так ли это?
Нет.
> Если да, то как обратиться к окну (удалить), зная его хэндл?
SendMessage, SetWindowLong, PostMessage, и т.д.
> В общем еще раз. Задача такая: нужно передвигать все дочерние окна > (немодальные естесьно), перемещая родительское окно. Причем желательно > перемещать их в момент удержания кнопки мыши, а не после ее отпускания.
Обрабатываем событие перемещения главного окна и двигаем дочерние окна как
нам вздумается.
Заводить вектор не нужно. Окно знает про своих детей (есть соответсвующее
свойство у формы)
Здравствуйте, curt_russel, Вы писали:
_>Уважаемые! _>Подскажите, пожалуйста, как, зная хэндл окна, изменять его свойства, например, его положение на экране? _>Думаю, что это очевидно, но никак не могу найти как это сделать. Прочитал в хелпе, что поменять свойства окна можно только удалив старое и создав новое окно с другими свойствами. Так ли это? Если да, то как обратиться к окну (удалить), зная его хэндл?
_>Есть еще и второй вопрос. Но сначала предисловие. _>Задача такая: нужно передвигать все дочерние окна родительского окна при перемещении последнего по экрану. _>Я запоминаю в vector хэндлы всех дочерних окон (они создаются динамически в неопеределенном заранее количестве), а потом при перемещении родительского окна хочу менять координаты всех дочерних окон, беря их хэндлы из vector'а. Это наверно выглядит коряво. Но это первое, что пришло на ум. Хотелось сделать как в JavaScript'e, где окно знает кол-во всех дочерних элементов каждого типа (будь то Label или ListBox и т.д.). Но в Билдере (пишу на нем) такую штуку не знаю. Может подскажите идею как красивее сделать?!
_>В общем еще раз. Задача такая: нужно передвигать все дочерние окна (немодальные естесьно), перемещая родительское окно. Причем желательно перемещать их в момент удержания кнопки мыши, а не после ее отпускания.
_>Спасибо.....
SetWindowPos(), дочерние окна будут двигаться вместе с родителем.
Здравствуйте, curt_russel, Вы писали:
Тут много про разные API функции написали,но в принципе можно обойтись малой кровью, если это окно создано с помощью VCL. Тогда можно получить указатель на WinControl и работать с этим окном как с обычной формой. см FindControl.