HBasic писал(а):С Push Button ковырялся ничего не получилось.Если надо библиотеки какие подключать то расскажите
пожалуйста подробно как это делается.
Option Explicit
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 Const BS_FLAT = &H8000
Private Const GWL_STYLE = (-16)
Private Sub Form_Load()
Dim tmp As Long
tmp = GetWindowLong(Command1.hWnd, GWL_STYLE)
tmp = tmp + BS_FLAT
Call SetWindowLong(Command1.hWnd, GWL_STYLE, tmp)
End Sub
Хакер писал(а):Зачем?
jangle писал(а):HBasic писал(а):С Push Button ковырялся ничего не получилось.Если надо библиотеки какие подключать то расскажите
пожалуйста подробно как это делается.
стиль BS_FLAT
- Код: Выделить всё
Option Explicit
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 Const BS_FLAT = &H8000
Private Const GWL_STYLE = (-16)
Private Sub Form_Load()
Dim tmp As Long
tmp = GetWindowLong(Command1.hWnd, GWL_STYLE)
tmp = tmp + BS_FLAT
Call SetWindowLong(Command1.hWnd, GWL_STYLE, tmp)
End Sub
Хакер писал(а):Человеку подсовывают дрянь, а он и рад "Спасибо" сказать.
Должно быть tmp Or BS_FLAT вместо tmp + BS_FLAT.
Хакер писал(а):Человеку подсовывают дрянь, а он и рад "Спасибо" сказать.
Должно быть tmp Or BS_FLAT вместо tmp + BS_FLAT.
Dim a As Byte
a = vbCenter 'vbCenter = 2
a = a + vbAbort 'vbAbort = 3
Print a
a = a Or vbAbort
Print a
Xcode писал(а):awl100Alex, выполни этот код и поймешь о какой кривизне идет речь.
? 3 + 2
? 3 or 2
alibek писал(а):Xcode писал(а):awl100Alex, выполни этот код и поймешь о какой кривизне идет речь.
Поскольку BS_FLAT является степенью двойки, а у кнопки этого стиля нет, то разницы никакой.
И чего ты все время такой злой???
alibek писал(а):Поскольку BS_FLAT является степенью двойки, а у кнопки этого стиля нет, то разницы никакой.
awl100Alex писал(а):И чего ты все время такой злой???
Вот посмотри здесь ( http://ru.wikipedia.org/wiki/Дизъюнкция ), и обрати внимание a + b, a OR b - разницы нет никакой, кроме эстетики может быть. Почему же и в этом случаи ты опять говоришь, что это "дрянь", все "криво"... не понимаю.
Хакер писал(а):Хакера раздражают твои попытки протолкнуть какую-нибудь дрянь. Например ExitProcess.
Xcode писал(а):awl100Alex, выполни этот код и поймешь о какой кривизне идет речь.
- Код: Выделить всё
Dim a As Byte
a = vbCenter 'vbCenter = 2
a = a + vbAbort 'vbAbort = 3
Print a
a = a Or vbAbort
Print a
awl100Alex писал(а):Результат будет естественно различаться, НО(!) это НЕ кривизна кода!
Все дело в том, что когда происходит логическое сложение, то машина просто суммирует биты числа и получает результат:
awl100Alex писал(а):Кстати, никто ведь и не обратил внимания, к чему приводит поправка Хакера...
Попробуйте выполнить tmp = tmp Or BS_FLAT – кнопка станет плоской и одновременно с этим ЗАБЛОКИРУЕТСЯ!
awl100Alex писал(а):Каким-то чудесным образом константа BS_FLAT = &H8000 = 32768 в режиме выполнения, превращается в ОТРИЦАТЕЛЬНОЕ число «-32768». Таким образом tmp + BS_FLAT на самом деле происходит tmp - BS_FLAT и получается &H5400A000.
Кстати, никто ведь и не обратил внимания, к чему приводит поправка Хакера...
Попробуйте выполнить tmp = tmp Or BS_FLAT – кнопка станет плоской и одновременно с этим ЗАБЛОКИРУЕТСЯ!
alibek писал(а):awl100Alex писал(а):Не неси чушь. Если ты не понимашь, как функционирует OR, то почитай учебник.
awl100Alex писал(а):Каким-то чудесным образом константа BS_FLAT = &H8000 = 32768 в режиме выполнения, превращается в ОТРИЦАТЕЛЬНОЕ число «-32768».
awl100Alex писал(а):a = a + vbAbort – это арифметическая операция.
a = a Or vbAbort – а это логическая.
jangle писал(а):Кстати, никто ведь и не обратил внимания, к чему приводит поправка Хакера...
Попробуйте выполнить tmp = tmp Or BS_FLAT – кнопка станет плоской и одновременно с этим ЗАБЛОКИРУЕТСЯ!
Действительно кнопка блокируется! Вот спрашивается, кто дрянь советует?
jangle писал(а):Действительно кнопка блокируется! Вот спрашивается, кто дрянь советует?
iGrok писал(а):Теперь понятно, откуда ноги растут?
jangle писал(а):iGrok писал(а):Теперь понятно, откуда ноги растут?
Однако, код работает. Кнопка из обычной становится плоской. Пусть даже и не совсем корректным способом.
Видимо это тот случай, когда одна ошибка - нейтрализует предыдущую.
Ага. Нивелирование ошибок не исключено.. Только разве это хорошо?
jangle писал(а):Хакер писал(а):Хакера раздражают твои попытки протолкнуть какую-нибудь дрянь. Например ExitProcess.
В отличие от тебя, я дал человеку правильный ответ на его вопрос. Он спрашивал, как из обычной кнопки сделать плоскую.
HBasic писал(а):Воспользовался вашим советом-работает и не глючит, спасибо.
Только оказалось, что заказчику нужны неплоские кнопки, а нужно так, чтобы они были не кнопками а рисунками, при подводе курсора к которым у них очерчиваються границы, а при нажатии меняеться цвет фона.Придеться делать вручную.Избаловали их этим дизайном, блин.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46