![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Вообщем SendToBack и BringToFront очень не устраивает, а свойства (целое число - что-то вроде глубины) которое было контролировало Z-положение объектов нету... Или я что-то упустил...
Вообщем нужно воссоздать что-то вроде такого свойства... Чем оно больше, тем выше находится объект... никто не сталкивался с такой проблемой? -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
это определяется порядком в котором контролы лежат в свойстве controls родителя
Добавлено через 48 секунд тебе в рантайме или дизайнтайме поменять нужно? -------------------- Обижено школьников: 8 |
|||
|
||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
bems,
в рантайм.... -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
самый простой способ изменить порядок создания. Если не подходит, то опиши задачу подробнее: по какому принципу нужно изменить z-order
-------------------- Обижено школьников: 8 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
SetWindowPos () - позволяет установить свое окно над указанным другим окном или просто выше всех или ниже всех
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
bems,
так... у нас уже есть созданные в райнтайм контрлы... нужно не изощряясь (т.е. не перекопировывая их) изменить их z-порядок... короче... Допустим, аналогично... мы сохраняем параметры контролов в ini-файл, мы можем менять в рантайм их z-порядок, так вот в ини-файл нужно записать это z-порядок... а затем когда мы будем загржать параметры контролов из ини-файла выгрузить как бы этот z-порядок объекта... что-то типа его свойства.... Чтото вроде этой задачи... -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
хм...
допустим у формы такой массив controls: child0, child1, child2, child3 чтобы поменять местами child1 и child2 ты делаешь
-------------------- Обижено школьников: 8 |
|||
|
||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
bems,
хех... оригинальный способ... ты мень очень выручил... -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
короче копировать контролы не нужно, а нужно сбросить им родителя, а потом установить в новом порядке
Добавлено через 56 секунд Alexeis, а конфликтов с VCL не будет? -------------------- Обижено школьников: 8 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
На самом деле SetWindowPos () работает только при простом перекрытии окон, а не меняет местами родителя и ребенка. VCL за этим не следит. Я понял что задача перетусовать просто наложенные друг на друга окна, а не поменять местами родителей и детей. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
задача была перетусовать не окна... а все что на них находится... т.е. контролы...
-------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
наследники TWinControl тоже окна
-------------------- Обижено школьников: 8 |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
lukas, когда я говорил об окнах я имел ввиду Windows окна. Часть VCL контролов являются окнами, потому допускают обращение к ним напрямую как к Windows окнам.
Например, так я перетусовал 2е из 3х панелек
Добавлено через 4 минуты и 8 секунд bems, при смене z ордера должно посылаться событие типа WM_WINDOWPOSCHANGING, так что родитель будет оповещен о перемещениях. Это сообщение отредактировал(а) Alexeis - 29.8.2007, 17:17 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Alexeis,
да тоже... хороший способ... по крайней мере не будут перерисовываться все контролы... -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Ну один раз все равно будут. Другое дело если нужно производить несколько рокировок для достижения нужной позиции, только тогда будут лишние перерисовки. Кстати тут у функции есть любопытный параметр SWP_NOREDRAW, который можно использовать если будет много всяких перестановок и перекрытий. Типа сделать все операции, а потом все перерисовать, чтобы не было мерцаний. Плохо одно, что что компоненты типа TImage и TSpeenButton не является окнами, потому к ним не удасться применить этот код. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |