Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Про Z-положение контролов... ... 
V
    Опции темы
lukas
Дата 29.8.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Вообщем SendToBack и BringToFront очень не устраивает, а свойства (целое число - что-то вроде глубины) которое было контролировало Z-положение объектов нету... Или я что-то упустил...

Вообщем нужно воссоздать что-то вроде такого свойства... Чем оно больше, тем выше находится объект... никто не сталкивался с такой проблемой?


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
bems
Дата 29.8.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



это определяется порядком в котором контролы лежат в свойстве controls родителя

Добавлено через 48 секунд
тебе в рантайме или дизайнтайме поменять нужно?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
lukas
Дата 29.8.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



bems, 

в рантайм....  smile вот в том то и дело.... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
bems
Дата 29.8.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



самый простой способ изменить порядок создания. Если не подходит, то опиши задачу подробнее: по какому принципу нужно изменить z-order


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 29.8.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



SetWindowPos () - позволяет установить свое окно над указанным другим окном или просто выше всех или ниже всех


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukas
Дата 29.8.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



bems, 

так... у нас уже есть созданные в райнтайм контрлы... нужно не изощряясь (т.е. не перекопировывая их) изменить их z-порядок... короче... Допустим, аналогично... мы сохраняем параметры контролов в ini-файл, мы можем менять в рантайм их z-порядок, так вот в ини-файл нужно записать это z-порядок... а затем когда мы будем загржать параметры контролов из ини-файла выгрузить как бы этот z-порядок объекта... что-то типа его свойства....

Чтото вроде этой задачи...


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
bems
Дата 29.8.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



хм...

допустим у формы такой массив controls:
child0, child1, child2, child3

чтобы поменять местами child1 и child2 ты делаешь 
Код

child1.parent:=nil;
child2.parent:=nil;
child3.parent:=nil;

child2.parent:=form1;
child1.parent:=form1;
child3.parent:=form1



--------------------
Обижено школьников: 8
PM MAIL   Вверх
lukas
Дата 29.8.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



bems, 

хех... оригинальный способ... ты мень очень выручил...   smile  пасиба... остальное остается только заточить это под себя... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
bems
Дата 29.8.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



короче копировать контролы не нужно, а нужно сбросить им родителя, а потом установить в новом порядке

Добавлено через 56 секунд
Цитата(Alexeis @  29.8.2007,  16:32 Найти цитируемый пост)
SetWindowPos ()



Alexeis, а конфликтов с VCL не будет?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 29.8.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(bems @  29.8.2007,  16:48 Найти цитируемый пост)
Alexeis, а конфликтов с VCL не будет?

  На самом деле SetWindowPos () работает только при простом перекрытии окон, а не меняет местами родителя и ребенка. VCL за этим не следит. Я понял что задача перетусовать просто наложенные друг на друга окна, а не поменять местами родителей и детей.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukas
Дата 29.8.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



задача была перетусовать не окна... а все что на них находится... т.е. контролы... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
bems
Дата 29.8.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(lukas @  29.8.2007,  17:06 Найти цитируемый пост)
задача была перетусовать не окна... а все что на них находится... т.е. контролы...  

наследники TWinControl тоже окна
Цитата(Alexeis @  29.8.2007,  17:04 Найти цитируемый пост)
Я понял что задача перетусовать просто наложенные друг на друга окна, а не поменять местами родителей и детей. 
я тоже так понял, но VCL считает, что з-порядок такой же как и порядок в свойстве controls родителя. После применения SetWindowPos это предположение больше не будет выполняться, в чем я предвижу проблемы



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 29.8.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



lukas, когда я говорил об окнах я имел ввиду Windows окна. Часть VCL контролов являются окнами, потому допускают обращение к ним напрямую как к Windows окнам.

Например, так я перетусовал 2е из 3х панелек 
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetWindowPos(panel2.Handle,
               panel1.Handle, 0, 0, 0, 0,
               SWP_NOSIZE or SWP_NOMOVE);
end;


Добавлено через 4 минуты и 8 секунд
bems, при смене z ордера должно посылаться событие типа WM_WINDOWPOSCHANGING, так что родитель будет оповещен о перемещениях.

Это сообщение отредактировал(а) Alexeis - 29.8.2007, 17:17


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukas
Дата 29.8.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Alexeis, 
да тоже... хороший способ... по крайней мере не будут перерисовываться все контролы... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Alexeis
Дата 29.8.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(lukas @  29.8.2007,  17:32 Найти цитируемый пост)
по крайней мере не будут перерисовываться все контролы...  

  Ну один раз все равно будут. Другое дело если нужно производить несколько рокировок для достижения нужной позиции, только тогда будут лишние перерисовки. Кстати тут у функции есть любопытный параметр SWP_NOREDRAW, который можно использовать если будет много всяких перестановок и перекрытий. Типа сделать все операции, а потом все перерисовать, чтобы не было мерцаний. 
  Плохо одно, что что компоненты типа TImage и TSpeenButton не является окнами, потому к ним не удасться применить этот код.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.