
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.12.198.162] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Имеется форма со свойством BorderStyle=0
Нужно сделать возможность менять ее размер как при BorderStyle=2 Конекретнее, я не знаю как вычислить текущее расположение курсора относительно frm.Left или frm.Top |
![]() |
Сообщ.
#2
,
|
|
Можно поинтересоваться, для чего это, т.е. какую задачу преследуете ?
|
Сообщ.
#3
,
|
|
|
![]() |
Сообщ.
#4
,
|
|
Элементарное действие, наподобии вот этого Как сделать прилипание формы
Либо посложнее используя API. |
Сообщ.
#5
,
|
|
|
Цитата SCINER @ Элементарное действие, наподобии вот этого Как сделать прилипание формы Спасибо, посмотрю. |
Сообщ.
#6
,
|
|
|
![]() ![]() If Button = vbLeftButton Then Me.MousePointer = 8 SngX = X SngY = Y Call ResizeForm(Me) Else Me.MousePointer = 1 End If ![]() ![]() Public Sub ResizeForm(Frm As Form) On Local Error Resume Next With Frm .Width = .Width + SngX .Height = .Height + SngY End With End Sub 1. Ресайз работает. 2. Не могу ограничить минимальный размер ФОРМЫ. Если сделаю так ![]() ![]() With Frm if .Width>=3000 then .Width = .Width + SngX .Height = .Height + SngY else .Width =3000 endif End With то это не срабатывает. К тому же если я отпущу мышку и размер окажется минимальным, то он даже не даст увеличить размер формы. 3. При уменьшении размера формы остаются следы ее уменьшения. Смотрим скрин. Стираются когда останавливаю мышку. Как избавится от следов и все таки ограничить минимальные размеры. Просто пока я дежу кнопку мыши нажатой он уменьшит Прикреплённая картинка
|
![]() |
Сообщ.
#7
,
|
|
ScaleMode = vbPixels
если не поможет, то скинь проект сюда, поправлю. |
Сообщ.
#8
,
|
|
|
Цитата SCINER @ ScaleMode = vbPixels если не поможет, то скинь проект сюда, поправлю. Проблема в том, что придется все размеры менять под пикселы. Что бы поставить ScaleMode = vbPixels. И тогда вопрос, как это может помочь избавится от следа уменьшения формы? Ведь и то(Pixels) и то(Twip) всего лишь единицы измерения. |
![]() |
Сообщ.
#9
,
|
|
Есть уж баг один.
|
Сообщ.
#10
,
|
|
|
Вот, посмотрите. Там Ресайз при щелчке на правый нижний уголок ток..
Прикреплённый файл ![]() |
Сообщ.
#11
,
|
|
|
Как вариант (просто код не смотрел) в Form_Resize() добавить On Error Resume Next и можно уменьшать до любого размера
![]() |
Сообщ.
#12
,
|
|
|
Делай обычную форму, со свойствами:
BorderStyle = 2 ClipControls = true ControlBox = true, вобщем обычная форма, так как она создается в самом начале. Далее создай обычный модуль и впиши в него это: ![]() ![]() Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Const GWL_STYLE = (-16) Private Const WS_SYSMENU = &H80000 Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const WS_CAPTION = &HC00000 Private Const SWP_FRAMECHANGED = &H20 Private Const SWP_NOREPOSITION = &H200 Private Const SWP_NOZORDER = &H4 Public Function ShowTitleBar(ByVal frmForm As Form, ByVal bState As Boolean) 'On Error Resume Next Dim lStyle As Long Dim tR As RECT GetWindowRect frmForm.hwnd, tR lStyle = GetWindowLong(frmForm.hwnd, GWL_STYLE) If (bState) Then frmForm.Caption = frmForm.Tag If frmForm.ControlBox Then lStyle = lStyle Or WS_SYSMENU End If If frmForm.MaxButton Then lStyle = lStyle Or WS_MAXIMIZEBOX End If If frmForm.MinButton Then lStyle = lStyle Or WS_MINIMIZEBOX End If If frmForm.Caption = "" Then lStyle = lStyle Or WS_CAPTION End If Else frmForm.Tag = frmForm.Caption frmForm.Caption = "" lStyle = lStyle And Not WS_SYSMENU lStyle = lStyle And Not WS_MAXIMIZEBOX lStyle = lStyle And Not WS_MINIMIZEBOX lStyle = lStyle And Not WS_CAPTION End If SetWindowLong frmForm.hwnd, GWL_STYLE, lStyle SetWindowPos frmForm.hwnd, 0, tR.Left, tR.Top, tR.Right - tR.Left, tR.Bottom - tR.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED frmForm.Refresh End Function Public Sub HideTaskWindow(frm As Form) ShowTitleBar frm, False: ShowTitleBar frm, True End Sub Далее в загрузке формы напиши следующее: ![]() ![]() Private Sub Form_Load() HideTaskWindow Me End Sub Думаю такой способ будет лучше, так как у тебя будет при этом видна программа в панели пуск, т.е. ты сможешь сворачивать форму и разворачивать как обычную... |
Сообщ.
#13
,
|
|
|
ХМ.. Спасибо, это действительно помогло. Только тогда у формы появляется свой бордер, который закрывает мой скин, нор думаю это поправимо, если будет смотреться хорошо.
|
Сообщ.
#14
,
|
|
|
Будет олично, не сомневайся. Проверенно...
![]() |
Сообщ.
#15
,
|
|
|
Цитата Будет олично, не сомневайся. Проверенно... Не совсем... При сворачивании он для этой формы выдает эту панель заголовка - пустую. Допустим я дам ей .Caption А вот при разворачивании он остается при ней. Сей заголовок. Так что не все работает как хотелось бы. |