Как приделать линейки к дочерней форме?

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

Как приделать линейки к дочерней форме?

Сообщение jangle » 19.08.2014 (Вт) 13:23

Есть MDI форма и у нее по-центру дочерняя форма. Нужно к краям дочерней приделать линейки, как на картинке.
Как такое можно реализовать?

Безымянный.png
Безымянный.png (6.88 Кб) Просмотров: 3417

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как приделать линейки к дочерней форме?

Сообщение The trick » 19.08.2014 (Вт) 14:16

В неклиентской области?
Если да, то обрабатывай сообщение WM_NCCALCSIZE и расширяй неклиентскую область, потом в WM_NCPAINT отрисовывай линейки.
viewtopic.php?f=15&t=45323
Если нужно эту линейку сделать отдельным окном, то тут множество вариантов. Можно задействовать регионы и вырезать отверстие по форме окна (получив его у дочернего окна через GetWindowRgn) внутри формы-линейки, использовать слоеные окна с таким же эффектом, либо использовать окно со стилем WS_EX_TRANSPARENT.
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как приделать линейки к дочерней форме?

Сообщение Хакер » 19.08.2014 (Вт) 15:41

jangle, тебе кто-нибудь когда-нибудь говорил, что ты любишь задавать непонятные вопросы?

По твоему тексту непонятно, что именно ты хочешь. И по твоей картинке. Ты был бы молодец, если бы на твоей картинке были MDI-окно и дочернее окно (с заголовками и всеми атрибутами). Ты был бы ещё большим молодцом, если бы привёл две картинки: с normal и maximized состояними дочернего окна. Но ты не поступил как молодец, ты приложил просто непонятную картину.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.08.2014 (Вт) 16:19

Кривоус Анатолий писал(а):В неклиентской области?

А что, на родительской форме рисовать нельзя?

Хакер писал(а):если бы на твоей картинке были MDI-окно и дочернее окно (с заголовками и всеми атрибутами).

Насколько я понимаю, на катринке внутренняя область родительского окна, а белый прямоугольник - это дочернее окно с BorderStyle = None. B вокруг него надонарисовать линейки.
Правда я не понимаю, зачем вообще MDI в таком случае - я бы постарался контролом обойтись, а не формой. Хотя, может быть вариант, что есть и другие виды дочерних окон.
В общем, я бы попытался на родительской форме порисовать, если это возможно, конечно. Вроде бы кажется лучшим вариантом.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re:

Сообщение The trick » 19.08.2014 (Вт) 16:21

Qwertiy писал(а):А что, на родительской форме рисовать нельзя?

А я разве такое говорил? Конечно можно.
Задача описана поверхностно. Может он хочет чтобы с дочерней формой двигалась линейка и линейка была частью дочернего окна (неклиентской) вроде рамки?
UA6527P

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как приделать линейки к дочерней форме?

Сообщение jangle » 19.08.2014 (Вт) 16:35

Вот такое приложение хочу реализовать. MDI - форма, и дочерняя форма с BorderStyle = None. И чтобы по краям дочерней формы шли
линейки

Безымянный.png
Безымянный.png (22.67 Кб) Просмотров: 3400

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.08.2014 (Вт) 16:38

Кривоус Анатолий писал(а):Может он хочет чтобы с дочерней формой двигалась линейка

Ну так родительское может и само линейкой пошевелить, не?

Кривоус Анатолий писал(а):и линейка была частью дочернего окна (неклиентской) вроде рамки

Вот как-то я у этого варианта плюсов не вижу... Если только что-то связанное с перемещение окна, да и то не факт.
А то ведь странно, если она начнёт над другими окнами рисоваться. По крайней мере, для меня (в роли пользователя) это было бы неожиданно, если бы вдруг попалось :)

jangle писал(а):Вот такое приложение хочу реализовать.

О! Я правильно догадался :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как приделать линейки к дочерней форме?

Сообщение jangle » 19.08.2014 (Вт) 16:41

И второй вопрос в догонку, хотелось бы чтобы тень была от дочерней формы, как здесь

Безымянный2.png
Безымянный2.png (16.77 Кб) Просмотров: 3399

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re:

Сообщение The trick » 19.08.2014 (Вт) 17:11

Qwertiy писал(а):Ну так родительское может и само линейкой пошевелить, не?

Для чего родителю шевелить, если это часть дочернего окна? Так можно и все окно "по частям" перемещать, только смысл? А если их несколько будет? Несколько линеек или одна? ТС не сказал.
Qwertiy писал(а):Вот как-то я у этого варианта плюсов не вижу... Если только что-то связанное с перемещение окна, да и то не факт.
А то ведь странно, если она начнёт над другими окнами рисоваться. По крайней мере, для меня (в роли пользователя) это было бы неожиданно, если бы вдруг попалось :)
Как раз и выглядит логично, активировал форму - активировалась линейка, хотя ТС может и не нужно такое поведение, тогда ему следовало сделать как в Ворде, по краям родительской формы линейку.
Вот такое приложение хочу реализовать. MDI - форма, и дочерняя форма с BorderStyle = None. И чтобы по краям дочерней формы шли линейки
Можешь делать как я подсказал, только линии длинные нужно рисовать на самой MDI-parent форме. Таким же способом можно сделать и тень, если окна не будут перекрываться.
Для перекрывающихся окон можно использовать стиль WS_EX_TRANSPARENT и отрисовывать тень вручную.
Насколько я понял ты делаешь какой-то визуальный редактор. Для этого логичней делать все вручную, как например в CorelDraw, а не использовать MDI дочерние формы для представления сущностей.
UA6527P

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.08.2014 (Вт) 17:25

Кривоус Анатолий писал(а):Как раз и выглядит логично, активировал форму - активировалась линейка

А сбоку у тебя ещё одно окно (причём панель, т. е. нормальное с заголовком, такое как слева на скриншоте 2010 Word'а) и линейка спокойненько так рисуется поверх него из-за того, что она принадлежит активному окну.
Не знаю как остальных, но меня бы эта ситуация удивила.
Кстати, если так действительно надо, то можно даже поместить линейку в клиентскую область формы (она всё равно без границ), а избыточную часть сделать прозрачной (не знаю как именно в VB6 делается TransparencyColor).

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re:

Сообщение The trick » 19.08.2014 (Вт) 17:28

Qwertiy писал(а):
Кривоус Анатолий писал(а):Как раз и выглядит логично, активировал форму - активировалась линейка

А сбоку у тебя ещё одно окно (причём панель, т. е. нормальное с заголовком, такое как слева на скриншоте 2010 Word'а) и линейка спокойненько так рисуется поверх него из-за того, что она принадлежит активному окну.

А кто сказал что оно MDIchild? Сколько я видел программ, там панель инструментов не является дочерней MDI формой. Получается имеем несколько документов и у каждого своя панели инструментов и обрезается клиентской областью MDI формы? Что-то нелогично.
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как приделать линейки к дочерней форме?

Сообщение Хакер » 19.08.2014 (Вт) 17:32

Зачем тут вообще MDI — ума не приложу.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.08.2014 (Вт) 17:37

Кривоус Анатолий писал(а):А кто сказал что оно MDIchild? Сколько я видел программ, там панель инструментов не является дочерней MDI формой.

Да, похоже, я был неправ. Но над другими такими же формами рисоваться будет.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как приделать линейки к дочерней форме?

Сообщение jangle » 20.08.2014 (Ср) 17:00

Хакер писал(а):Зачем тут вообще MDI — ума не приложу.


У меня редактор работает с формой, поэтому решил использовать MDI интерфейс

Безымянный.png
Безымянный.png (16.51 Кб) Просмотров: 3369

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как приделать линейки к дочерней форме?

Сообщение Хакер » 20.08.2014 (Ср) 19:34

jangle писал(а):У меня редактор работает с формой, поэтому решил использовать MDI интерфейс

Мысль не ясна.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 21.08.2014 (Чт) 9:20

Хакер писал(а):Мысль не ясна.

Подозреваю, что нашёлся готорый код, где этикетка представлена формой. Поэтому вместо переделки формы на usercontrol он решил применить MDI и оставить форму...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как приделать линейки к дочерней форме?

Сообщение jangle » 21.08.2014 (Чт) 9:22

У меня есть дизайнер компонентов, позволяет добавлять в рантайме различные контролы на форму, перемещать, изменять размеры и т.д. Очень удобная штука. Но она работает только на VB-форме, на picturebox`e работать не будет. Поэтому мне нужна отдельная форма, на которой будет разрабатываться дизайн этикетки, путем размещения контролов с текстом, картинками и штрихкодами, а затем скриншот этой формы будет отправлять на печать, в принтер этикеток.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как приделать линейки к дочерней форме?

Сообщение Хакер » 21.08.2014 (Чт) 9:36

jangle писал(а):Но она работает только на VB-форме, на picturebox`e

А для UserControl-ов?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

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

    TopList