Страница: 1 |
Страница: 1 |
Вопрос: Рамка изменяющая размеры
Добавлено: 20.09.05 22:52
Автор вопроса: Shark | Web-сайт:
Помогите сделать рамку на форме чтобы ее размер и местоположение можно было изменять мышью. Желательно получить размеры получившейся рамки.
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 20.09.05 23:30
а MDI форма не подойдёт?
Номер ответа: 2
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #2
Добавлено: 21.09.05 09:06
Желательно что нибудь поменьше.
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 21.09.05 11:05
Используй сплиттеры. Полно контролов, есть даже примеры исходников. Пользуйся поиском.
Номер ответа: 4
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #4
Добавлено: 21.09.05 17:26
Как на счет формы на форме? Создать форму, удалить заголовок. Убедиться, что ее удается ресайзить. А потом использовать Api SetParent, чтобы засунуть форму без заголовка в форму-контейнер.
Примечание: еще надо использовать функцию.
Пробуйте: http://vt-dbnz.narod.ru/forms_fun.rar (1.8kb)
Номер ответа: 5
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #5
Добавлено: 21.09.05 17:27
Простите, поторопился, не дописал.
Примечание: еще надо использовать функцию SetWindowLong для установки ее Style на WS_Child.
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 22.09.05 00:27
Victor, нафиг SetParent, MDI форма - тот же контейнер. А далее показал новую форму, а её соответственно можно и ресайзить. А ещё я рамку (Frame) пробовал двигать, если бы получилось - изминение размеров аналогично. Трабла в том что, при высчитывании кордината курсора и прибавлении к этому положения нашекго окна, для того чтобы потом в фрейм передвинуть и попасть в именно в наше окно... ну короче там сдвиг получается, немного не туда фрейм становится, кому интерестно, вот:
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3552
ClientLeft = 48
ClientTop = 360
ClientWidth = 5736
LinkTopic = "Form1"
ScaleHeight = 296
ScaleMode = 3 'Pixel
ScaleWidth = 478
StartUpPosition = 3 'Windows Default
Begin VB.Frame Frame1
Caption = "Frame1"
Height = 1932
Left = 0
TabIndex = 0
Top = 0
Width = 3132
Begin VB.Image Image4
Height = 132
Left = 0
MousePointer = 6 'Size NE SW
Top = 1800
Width = 132
End
Begin VB.Image Image3
Height = 132
Left = -12
MousePointer = 8 'Size NW SE
Top = 84
Width = 132
End
Begin VB.Image Image2
Height = 132
Left = 2988
MousePointer = 6 'Size NE SW
Top = 108
Width = 132
End
Begin VB.Image Image1
Height = 132
Left = 3000
MousePointer = 8 'Size NW SE
Top = 1800
Width = 132
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'Определяет текущую позицию курсора
Private Declare Function GetCursorPos Lib "USER32" (lpPoint As POINTAPI) As Long
'Структура POINTAPI
Private Type POINTAPI
X As Long
Y As Long
End Type
Dim Curs As POINTAPI
Dim flag1 As Boolean 'флаг того что перемещаем
Private Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
flag1 = True
MoveFrame
End If
End Sub
Private Sub MoveFrame()
Do While flag1 = True
DoEvents
GetCursorPos Curs
Frame1.Left = Curs.X - (Me.Left / 16)
Frame1.Top = Curs.Y - (Me.Top / 16)
Me.Caption = "Frame1.Left=" & Frame1.Left & "|" & "Frame1.Top=" & Frame1.Top
Loop
End Sub
Private Sub Frame1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
flag1 = False
End Sub
если эту канитель отладить, по такуму принципу можно двигать image которые по краями фрейма для ресайза. Двигаем например за правый нижний, значит высота растояние от правого верхнего до правого нижнего, а правый нижний двигаем - вот и весь ресайз
Номер ответа: 7
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #7
Добавлено: 22.09.05 10:27
Всем спасибо. Нашел контрол который позволяет изменять все что угодно
Номер ответа: 8
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #8
Добавлено: 22.09.05 21:47
Ну на счет MDI. это не всегда хорошо. Например, на ней сложно рисовать. Но оно надо редко.
А самое, наверно, главное - ее нельзя Show vbModal (если я не ошибаюсь, VB не может показать две MDI формы одновременно).
В моем варианте, правда, тоже есть одна загвоздочка. Невозможно Tab'ом переместить фокус из одной формы в другую. Правда это мало кого волнует.
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 23.09.05 01:30
ошибаешся!
и Show vbModal можно вроде...
2 Shark
Что за контрол?
Номер ответа: 10
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #10
Добавлено: 23.09.05 18:23
Не ошибаюсь. Проверил.
а) не могу создать две mdi формы в проекте. VBE засеривает пункт Add MDIForm
б) написал MDIForm1.Show vbModal. -> Runtime Error '403'
MDI forms cannot be shown modally
Номер ответа: 11
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #11
Добавлено: 23.09.05 18:24
На всякий слкчай уточню: VB6 sp3
Номер ответа: 12
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #12
Добавлено: 23.09.05 21:32
Не знаю откуда скачал называется Resizer. При щелчке меняешь свойство на и появляются вокруг точки которые можно двигать
Номер ответа: 13
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #13
Добавлено: 23.09.05 21:47
видел я тот Resizer, ну рабочий... но и глюкавый, имхо лучше "своё"
-----
а) "не могу создать две mdi..." Слабо динамически создать форму API функциями
б) MDIForm1.Show vbModal также можно организовать API функцией ShowWindow.
Номер ответа: 14
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #14
Добавлено: 09.10.05 00:33
Ну да. Убедил. Но мне слабо MDI форму создать API-шками. Ну, может и не слабо, но надо долго и упорно help копать.
Номер ответа: 15
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #15
Добавлено: 09.10.05 17:51
ну слабо <> невозможно