Порядок контролов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Gfif21
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 31.05.2004 (Пн) 7:23

Порядок контролов

Сообщение Gfif21 » 06.12.2004 (Пн) 20:06

У меня проблема: мне необходимо при динамическом создании контролов сделать n штук PictureBox и n штук Label, при этом поместить Label поверх соответствующего PictureBox. Получается же наоборот - PictureBox поверх Label. Как установить нужный мне порядок контролов?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.12.2004 (Пн) 20:31

Методом ZOrder
Изображение

Gfif21
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 31.05.2004 (Пн) 7:23

Сообщение Gfif21 » 06.12.2004 (Пн) 20:46

tyomitch писал(а):Методом ZOrder

Вот у меня в цикле:

Load PictureBox(i)
PictureBox(i).ZOrder (1)
Load Label(i)
Label(i).ZOrder (2)

и компилятор выдает ошибку в выделенной строке: Runtime error '5': Неправильный вызов процедуры или аргумент.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.12.2004 (Пн) 21:02

Код: Выделить всё
Load PictureBox(i)
Load Label(i)
Label(i).ZOrder (0)

Gfif21
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 31.05.2004 (Пн) 7:23

Сообщение Gfif21 » 06.12.2004 (Пн) 21:24

Неа, не работает. Но я чего-то стормозил: надо было с самого начала попробовать заменить PictureBox на Image - вот так все работает.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.12.2004 (Пн) 23:54

Ага, проверил сам, и действительно. Label никак не может быть поверх пикчера.

Наверное потому, что это lightweight-контрол, всё-таки... Как и imagebox...

*) lightweight - значит, что контрол только вызывает api-функцию, а сам не имеет ни hwnd, ни hdc, ни иных признаков окон...

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.12.2004 (Вт) 0:53

А также как и Shape и Line ;)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.12.2004 (Вт) 1:14

Вот лишь бы нафлудить ;-)

Хотя A.A.Z. прав, собственно... :D

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.12.2004 (Вт) 5:24

Amed писал(а):Ага, проверил сам, и действительно. Label никак не может быть поверх пикчера.

Наверное потому, что это lightweight-контрол, всё-таки... Как и imagebox...

*) lightweight - значит, что контрол только вызывает api-функцию, а сам не имеет ни hwnd, ни hdc, ни иных признаков окон...

hDC как раз имеет. Единственный "критерий" lightweight-ности - отсутствие окна.
Lightweight-контролы придумали во времена Win95, когда лишнее окно в системе заметно снижало производительность. Сейчас никакой выгоды от их lightweight-ности нет.

Ещё, не понял фразу "контрол только вызывает api-функцию, а сам не имеет ни hwnd, ни hdc". Как будто бы оконные контролы не вызывают "API-функцию"?
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 07.12.2004 (Вт) 20:01

Имеется в виду, что легкие контролы - это на самом деле не объект, а всего лишь метод (как бы ни парадоксально это звучало).

Насчет времен Win95 - всему есть документальное подтверждение:
MSDN писал(а):Windows 95: The system can support a maximum of 16,364 window handles.

Это - цитата из описания функции CreateWindowEx(). Так что не просто тормозила, а вообще не работала :) .

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.12.2004 (Вт) 20:25

Ennor писал(а):Имеется в виду, что легкие контролы - это на самом деле не объект, а всего лишь метод (как бы ни парадоксально это звучало).

Достаточно парадоксально. Как не объект? Конечно объект! :-)
Как вообще контрол может не быть объектом? :-?
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.12.2004 (Вт) 20:31

Не объект в полном смысле объектности. Скажем так, недообъект :D

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.12.2004 (Вт) 20:43

Неправда, полноценный объект! :twisted:
Только без окна, и всё. :-)
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.12.2004 (Вт) 20:51

Вот в том-то и вопрос, можно ли считать объекты без окна полноценными? :D

Это почти как дом без крыши или стен :)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 07.12.2004 (Вт) 21:26

С точки зрения VB это, безусловно, объекты - ведь CommonDialog, WinSock, Timer тоже вполне себе объекты, и никто не возмущается. Другой вопрос, что эти в рантайме невидимы, а линия видна.

А вот с точки зрения Windows линия - это всего лишь метод по ее отрисовке, а вся ее объектная рубашка - чисто басиковая.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.12.2004 (Ср) 14:53

Amed писал(а):Вот в том-то и вопрос, можно ли считать объекты без окна полноценными? :D

Это почти как дом без крыши или стен :)

Нет, это как дом без окна ;-)

Таймер, действительно - сичтать объектом или нет? У него-то нету ни hWnd, ни hDC - вообще ничего нету. А однако в переменную типа Object ложится безо всяких проблем...
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.12.2004 (Ср) 15:04

2Ennor: с точки зрения Windows вообще нет объектов ;-)
Вот "объекты GDI" есть, а про "объекты Windows" я слышу впервые.
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 08.12.2004 (Ср) 17:57

Ennor писал(а):...
Другой вопрос, что эти в рантайме невидимы, а линия видна.

В общем, я имел в виду именно наличие hWnd.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 30

    TopList  
cron