Конференція VBStreets - Перегляд теми - Як зробити кнопки плоскими не застосовуючи ковзанку
Весь смак програмування!
- Список форумів‹ Visual Basic‹ Visual Basic 1–6
- Змінити розмір шрифту
- FAQ
- Вхід
Як зробити кнопки плоскими не застосовуючи ковзанку?
Як зробити кнопки плоскими не застосовуючи ковзанку?
Як зробити кнопки плоскими?
Як зробити кнопки плоскими?
Код: Виділити все 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 GetWindow (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_STY End Sub
Як зробити кнопки плоскими?
Як зробити кнопки плоскими?
Код: Виділити все 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 GetWindow (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_STY End Sub
Як зробити кнопки плоскими?
Людині підсовують погань, а він і радий "Спасибі" сказати.
Має бути tmp або BS_FLAT замість tmp + BS_FLAT .
Як зробити кнопки плоскими?
Хакер писав(ла): Людині підсовують погань, а він і радий "Спасибі" сказати.
Має бути tmp або BS_FLAT замість tmp + BS_FLAT .
Хіба від цього, кнопки стануть плоскішими?
Як зробити кнопки плоскими?
Як зробити кнопки плоскими?
Хакер писав(ла): Людині підсовують погань, а він і радий "Спасибі" сказати.
Має бути tmp або BS_FLAT замість tmp + BS_FLAT .
І чого ти весь час такий злий. Ось подивися тут (http://ua.wikipedia.org/wiki/Диз'юнкція), і зверни увагу a + b, a OR b - різниці немає ніякої, крім естетики може бути. Чому ж і в цьому випадку ти знову кажеш, що це "погань", все "криво". не розумію.
Як зробити кнопки плоскими?
Як зробити кнопки плоскими?
Як зробити кнопки плоскими?
просто в дебагері:
А однаковий результат – лише для ступенів двійки
Як зробити кнопки плоскими?
Ну так. А потім людина почне точно так само застосовувати якийсь нитку "складовий" стиль до вікна, у якого вже є один-два цих стилю, і довго буде думати "А чого це у мене ніхрена не працює? Я ж все правильно роблю!".
Знову ж таки, якщо на підставі цього підходу чолом буде написана універсальна процедура для "роблення кнопок плоскими", яку він застосовуватиме перебором до всіх кнопок на формі.
Як зробити кнопки плоскими?
Я не злий. Ну навіть якщо вважати, що я був злий, я не весь час. Або ти помічаєш мене виключно тоді, коли я "злий", або ти просто мало буваєш на форумі. Чому "злий"? Ну не можу я спокійно дивитися, як нічого не підозрюючому підпихають погань, а він заце ще й дякує.
Адже ти сам вигадав, припустив, що його немає? Насправді цей стиль цілком може там бути. Тоді результат непередбачуваний. Це чисто питань функціонування.
А ще питання стилю.
Як зробити кнопки плоскими?
Хакер просто мені заздрить, адже я талановитіший за нього.
Як зробити кнопки плоскими?
Як зробити кнопки плоскими?
На відміну від тебе, я дав людині правильну відповідь на її запитання. Він питав, як зі звичайної кнопки зробити плоску.
Як зробити кнопки плоскими?
А. ось воно що! Млинець. Ну, та я згадав. різниця справді є! Виходить, що у Вікіпедії вказали «+» та «OR» щодо саме Диз'юнкції (логічного додавання)! А в цьому випадку.
a = a + vbAbort – це арифметична операція. a = a Or vbAbort - а це логічна.
Результат буде природно відрізнятися, АЛЕ(!) це НЕ кривизна коду! Уся справа в тому, що коли відбувається логічне додавання, то машина просто підсумовує біти числа і отримує результат: 5 - 101 3 - 011 7 - 111 - ось це і є результат логічного додавання "OR".
А от щодо арифметичних операцій все не так просто. Зараз уже не можу згадати детально, але точно знаю, що в цьому випадку машина виконує цілу серію(!) логічних операцій перш ніж отримає результат 5+3=8. Точно не скажу, але здається, число, що додається, спочатку модифікується машиною в якийсь проміжний код числа за кілька операцій логіки і тільки потім складає і отримує 1000 тобто число 8. Ось вам і розгадка даного артефакту!
До речі, адже ніхто і не звернув уваги, до чого призводить поправка Хакера. Спробуйте виконати tmp = tmp Or BS_FLAT – кнопка станеплоскою і одночасно з цим ЗАБЛОКУЄТЬСЯ!
І ще одне спостереження. Якимось чудовим чином константа BS_FLAT = &H8000 = 32768 в режимі виконання, перетворюється на НЕГАТИВНЕ число «-32768 ». Таким чином tmp + BS_FLAT насправді відбувається tmp - BS_FLAT і виходить H5400A000 . Чому б тоді одразу не записати. Call SetWindowLong(Command1.hWnd, GWL_STYLE, &H5400A000 ) Без попереднього отримання GetWindowLong якщо стиль Button Default!?