Страница: 1 | 2 |
Вопрос: Уменьшение окна - минимум
Добавлено: 13.09.04 18:14
Автор вопроса: Calhoon | Web-сайт:
Надо сделать так, чтоб при уменьшении окна оно уменьшалось только до определенных размеров, дальше - никак. Кто поможет?
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 13.09.04 18:26
Ну и в чем проблема?
Private Sub Form_Resize()
If Width < 600 Then Width = 600
End Sub
И так же с Height
Номер ответа: 2
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #2
Добавлено: 13.09.04 18:43
Ответ №1 будет провоцировать ошибку при WindowState vbMaximized и vbMinimized. Чтобы избежать ошибки сделай так:
Private Sub Form_Resize()
MinWidth = 4000
MinHeight = 3000
If Me.WindowState = vbNormal Then
If Me.Width < MinWidth Then Me.Width = MinWidth
If Me.Height < MinHeight Then Me.Height = MinHeight
End If
End Sub
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 13.09.04 21:49
Ответ номер 1 и 2 будут мигать... Поэтому самым лучшим остается сабклассинг окна с чем-нибудь подобным WM_SIZING...
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 14.09.04 00:08
Если в CallBack'e обрабатывать WM_SIZING традиционным способом (GetWindowRect+MoveWindow) то мигать будет ещё больше, Если правильным путём (CopyMemory + lParam), то получить указатель на структуру RECT ещё надо умудриться. Во всяком случае, я не смог скопировать данные с адреса в lParam.
CopyMemory VarPtr(R), lParam, 16
CopyMemory R, lParam, 16
- оба варианта не работают, не знаю в чём дело.
А надо ещё и обратно передать данные ((
Так что на данный момент Me.Width = MinWidth наилучший вариант. ...Увы, здесь вам не asm Там нет таких заморочек с CopyMemory
Номер ответа: 5
Автор ответа:
Last_Santa
ICQ: 200700724
Вопросов: 38
Ответов: 329
Web-сайт:
Профиль | | #5
Добавлено: 14.09.04 07:28
Вот без морганий:
http://vbaccelerator.com/home/VB/Code/Libraries/Subclassing/Sophisticated_Control_Over_Window_Sizing_and_Moving/article.asp
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 14.09.04 14:26
Потому и не моргает, что окно в процессе Drag не ресайзится, просто рисуется прямоугольник выделения. Видимо, потому, что не получается нормально ресайзить непосредственно форму. А-ля Win 95. Да и ActiveX ещё в добавок ко всему.
Номер ответа: 7
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #7
Добавлено: 14.09.04 15:04
А что-нить без SSubTimer'a можно?
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 14.09.04 15:37
Можно, работает супер, никаких морганий!!!
Вот только как перевести на VB
.elseif uMsg==WM_SIZING
mov edx,lParam
mov eax, [edx.RECT].left
mov ebx, [edx.RECT].right
sub ebx, eax
cmp ebx, 300
jnl @F
add eax,300
mov [edx.RECT].right,eax
@@:
mov eax, [edx.RECT].top
mov ebx, [edx.RECT].bottom
sub ebx, eax
cmp ebx, 200
jnl @F
add eax,200
mov [edx.RECT].bottom,eax
@@:
return 0
Может как dll оформить, и в ней кусочек CallBack процедуры обрабатывать?
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 14.09.04 15:56
запросто... просто не вызывать оконный CallWindowProc и возвращать ноль... в этом случае все будет ок
Номер ответа: 10
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #10
Добавлено: 14.09.04 16:35
Только вот кому это надо???
Или поковыряться?
Номер ответа: 11
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #11
Добавлено: 14.09.04 16:58
мне. вот был хорощий исходник на octal.narod.ru, но его удалили с хоста... (
Номер ответа: 12
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #12
Добавлено: 14.09.04 16:59
я имею ввиду сайт удалили
Номер ответа: 13
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #13
Добавлено: 14.09.04 17:10
Calhoon, ну-ка говори, нафига стырил название моего редактора и присвоил его своему? Я об Easy Note. НАПИШИ!!!!
Номер ответа: 14
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #14
Добавлено: 14.09.04 18:25
Александр, тебе ещё нужно?
В комплекте маленькая dll (2.5 кб), нормальная, не ActivX. Регистрировать не надо, просто рядом с программой либо в системную папку положить.
Никаких мерцаний.
Номер ответа: 15
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #15
Добавлено: 14.09.04 18:41
http://www.vbcodemagician.dk/tips/forms_resize.htm
Вроде ничё не мерцает...