Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 12:41   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию Z порядок компонентов и их перекрывание друг друга

допустим у меня на форме есть три TImage...расположение случайно, но есть перекрытия
как мне узнать, что например
1)Image1 перекрывает часть Image2
то есть именно какой Image перекрывает мне и нужно знать...

2)также если они перекрываются все трое (ну вот так бывает)
то как мне определить их порядок перекрытия?
то есть если у нас такой бутерброд
Image1
Image3
Image2
как мне узнать что именно 3 Image под первым лежит?
3)если под Image ничего нет, то как мне это проверить?

заранее спасибо
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.05.2009, 17:16   #2
5naip
Форумчанин
 
Аватар для 5naip
 
Регистрация: 05.10.2007
Сообщений: 536
По умолчанию

если их по очереди выложить на форму, то у нижней TabOrder = 0, и далее 1,2...
соответственно у самого верхнего слоя бутерброда будет самое больше число
у нижнего 0.
rocklistener...
5naip вне форума Ответить с цитированием
Старый 04.05.2009, 17:27   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а если они динамические?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.05.2009, 19:02   #4
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

А если в свойство Image1.Tag прописывать с первого до последнего и при этом делать Image1.SendtoBack;
Сделать специальную процедуру, где сравнивать есть пересечение двух TRect,а их заполнять на основе Image.Top и т.д.
То есть будет A,B,C: TRect;
получается надо проверить A-B; B-C; C-A на наличие пересечений и в это же время проверять значения Image.Tag
---------
Кстати видел такой еще код, только вот странно у Image.handle что так не получается.

Цитата:
Сделать Image1 "выше остальных" можно так:
SetWindowPos( Image1.Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE )

SetWindowPos - это процедура самой Windows (WinAPI);

и вообще вот простая проца, которая выдвигает WinAPI-окно hWin на передний план в пределах родительского окна:
procedure MkTop( hWin: THandle );
begin
SetWindowPos( hWin, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE )
end;


Тогда, чтобы сделать , например такой, порядок копонент: ниже всех Memo1, над ним Image1, над ним Button1,
надо вызвать процу поочереди для компонент именно в этом порядке:
MkTop( Memo1.Handle );
MkTop( Image1.Handle );
MkTop( Button1.Handle );
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.

Последний раз редактировалось ArtInt; 04.05.2009 в 19:05.
ArtInt вне форума Ответить с цитированием
Старый 04.05.2009, 19:07   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вообще есть ли способ узнать Z порядок?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.05.2009, 20:26   #6
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Кстати вот что интересного узнал из статьи в DelphiWorld
Цитата:
Создание порядка компонент - решено
--------------------------------------------------------------------------------


Автор: Jim Fralix

Благодаря Ray Konopka, я обнаружил, что в документации свойство ComponentIndex *не* имеет атрибута "только для чтения". При установке ComponentIndex все существующие компоненты с данным индексом или выше устанавливали ComponentIndex равным предыдущему значению, увеличенному на единицу. Например, если у вас имеются три компонента: CompA, CompB, и CompC с индексами 1, 2 и 3 соответственно, то при добавлении CompD и установке у него ComponentIndex равным 2, порядок компонентов будет следующим: CompA, CompD, CompB, CompC (индексы 1, 2, 3 и 4 соответственно).
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 04.05.2009, 21:25   #7
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вообще есть ли способ узнать Z порядок?
Кажется я докапался как найти z последовательность компонентов на форме. Можно попробовать так. Проверял, вроде бы работает, то есть выводит список от 0 до n последовательности компонентов на форме, а значит кто поверх кого.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
  Control: TControl;
begin
   // выводит все имена всех компонентов, если это Image1 то его индекс будет 4
  for I := 0 to ComponentCount-1 do    // Iterate
  begin
   if Components[i].Name='Image1' then Form1.Components[i].ComponentIndex:=4;
    memo1.Lines.Add(Components[i].Name);
  end;    // for

  //выводит имена компонентов и последовательности его в форме
    for I := 0 to ComponentCount-1 do    // Iterate
  begin
   if Components[i].Name='Image1' then Form1.Components[i].ComponentIndex:=4;
   memo1.Lines.Add(Components[i].Name+'-'+inttostr(Form1.Controls[i].ComponentIndex));
  end;    // for
end;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка в ячейках друг на друга ded- Microsoft Office Excel 3 10.04.2009 15:42
Наложения изображения друг на друга rudakop HTML и CSS 1 16.09.2008 03:03
Можно ли выделять ячейки размещенные вдали друг от друга в StringGrid? aslanbek Общие вопросы Delphi 5 14.03.2008 23:31
Найти в массиве квадратные корни наиболее удаленные друг от друга sher_man Помощь студентам 2 05.12.2007 10:15