Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Кнопки: VB что, заколдован? Добавлено: 17.06.05 16:37  

Автор вопроса:  Morpheus | Web-сайт: xury.zx6.ru
Всем добрый день!
Короче, вопрос вот в чём: изучая классы всех кнопок в винде, стало мне ясно, что во всех нормальных прогах, мессажах и даже в кнопке Пуск используется класс Button. И только в мои кнопки кто-то подсыпает какую-то грозу :) И вот мне не понятно, возможно ли вообще создать WinXPStyle кнопку, не применяя контролов и ручной рисовки и обойтись апи? Ок, исследования я начал с того, что заменил MsgBox на API MessageBox в надежде увидеть нормальные кнопки. Безуспешно. Как тогда остальные приложения получают нормальные, ХРшные кнопки в мессаджбоксах? потом я решил явно указать класс окна и создать кнопку через CreateWindowEx. Кнопка создалась, класс - Button... но, опять серая и квадратная :( Возможно ли вообще сделать кнопку Хр через апи, классы и стили? Или я что то не так делал? вот мой код создания окна кнопки:



Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const WS_EX_STATICEDGE = 20000
Dim h As Long
Dim w As Long

Private Sub Form_Load()
h = CreateWindowEx(WS_EX_STATICEDGE, "Button", "Push Me", WS_CHILD Or WS_VISIBLE, 10, 10, 100, 50, Me.hWnd, 0, 0, 0)
w = CreateWindowEx(0, "Button", "Push Me", WS_CHILD Or WS_VISIBLE, 200, 10, 100, 50, Me.hWnd, 0, 0, 0)
End Sub



Обе в стиле 98 :(

Ответить

  Ответы Всего ответов: 34  

Номер ответа: 1
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #1
Добавлено: 17.06.05 17:10
Похоже, дело не в вб, или и в вб и в делфях, так как CreateWindowEx в Delpi6 создаёт точно такую же кнопку. может расжиреный стиль надо другой?

Ответить

Номер ответа: 2
Автор ответа:
 bas



Вопросов: 16
Ответов: 30
 Web-сайт: www.klyaksa.net
 Профиль | | #2
Добавлено: 17.06.05 17:59
О! И правда - кнопки то в vb квадратыне получаются, а в блокноте винды круглые. vb6(sp5)
Я тож бы хотел круглые ()

Ответить

Номер ответа: 3
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #3 Добавлено: 17.06.05 18:19
Манифест...
Наверно на этом сайте качал "Пример помещения Манифеста в файл ресурсов"
Там с кругло-кнопками всё, и мсдж-бокс в т.числе.

Ответить

Номер ответа: 4
Автор ответа:
 bas



Вопросов: 16
Ответов: 30
 Web-сайт: www.klyaksa.net
 Профиль | | #4
Добавлено: 17.06.05 19:30
Ага, если exe-ку с манифестом сбацать, то работает (почти - некоторые элементы коряво отображаются). Вот только про эти манифеты бы для VB почитать, чтоб корявость исправить. кто знает где?

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 17.06.05 19:59
В отображении некоторых контролов, в частности бывает черными заливает...

Ответить

Номер ответа: 6
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #6 Добавлено: 17.06.05 20:24
Полагаю про манифест там немного можно вычитать. Думаю манифест - это тока отображение контролов согласно активному стилю в винде и это "чёрное дело" - результат корявых стилей (из-зи [настроек] или [рук программёров] или [мелкософт не любит Frame] - мне думается второе)

Ответить

Номер ответа: 7
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #7
Добавлено: 17.06.05 20:59
Кстити, DrawFrameConrol тоже не работает. или неверные параметры задал я :(

2 bas:

Ну, круглые то это не сложно: CreateEllipticRgn :) кстати, кнопки и правда круглые выходят... даже слишком.

А чё за манифест то? в примерах? в каком разделе? через апи сделан?

Ответить

Номер ответа: 8
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #8 Добавлено: 17.06.05 22:45
*.exe.manifest

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 17.06.05 23:52
а я рисованные (UcserControl) всегда делаю, ну если стиль XP нужен ... Ну это есстно не то

Ответить

Номер ответа: 10
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #10 Добавлено: 18.06.05 03:55
Но есть и плюс: стиль-то не меняется у проги, а то бывает настроешь,накрасишь так классно, винде стиль поменяешь - сразу такое чудовище, бррр....

Ответить

Номер ответа: 11
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #11
Добавлено: 18.06.05 07:03
ну если стиль XP нужен

Ну, вообще то мне не нужен именно стиль ХР, мне нужны кнопки, какими их хочет видеть пользователь, а это уже зависит от оси и от настроек. Ведь если дело происходит в 98 или в 2000 мои нарсованные будут смешновато выглядеть :) у меня вообще в голове не укладывается - как можно вызывать стандартные Winddows API, которые вызывают все проги, а получать другое :-/


ЗЫ: Никакой Манифест на сайте не могу найти чё то :( зато нашёл пару контроллов

Ответить

Номер ответа: 12
Автор ответа:
 SyavX



Вопросов: 25
Ответов: 149
 Профиль | | #12 Добавлено: 18.06.05 09:56
1-й способ
Создаем модуль и стартуем проект с Sub Main
Option Explicit

Private Type tagInitCommonControlsEx
   lngSize As Long
   lngICC As Long
End Type

Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (iccex As tagInitCommonControlsEx) As Boolean
Private Const ICC_USEREX_CLASSES = &H200

'Preventing crashes at shutdown
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Public m_hMod As Long

Public Sub Main()

   ' we need to call InitCommonControls before we
   ' can use XP visual styles.  Here I'm using
   ' InitCommonControlsEx, which is the extended
   ' version provided in v4.72 upwards (you need
   ' v6.00 or higher to get XP styles)
   On Error Resume Next
   ' this will fail if Comctl not available
   '  - unlikely now though!
   Dim iccex As tagInitCommonControlsEx
   With iccex
       .lngSize = LenB(iccex)
       .lngICC = ICC_USEREX_CLASSES
   End With
   InitCommonControlsEx iccex
    
   m_hMod = LoadLibrary("shell32.dll";)
   InitCommonControls

   On Error GoTo 0
   
   ' Now start the application
   frmMain.Show
   
End Sub


2-й способ
Не создаем модуль, а пишем это
Option Explicit

Private Declare Sub InitCommonControls Lib "comctl32" ()

Private Sub Form_Initialize()
    InitCommonControls
End Sub


Бросаем возле exe'шника файл с иминем типа YourProgramName.exe.manifest или засовываем в ехе редактором ресурсов (я исп. Resource Hacker), указываем тип ресурса "24"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <assemblyIdentity name="exe.exe" processorArchitecture="x86" version="5.1.0.0" type="win32"/>
 <description>
  ;Description
 </description>
 <dependency>
  <dependentAssembly>
   <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/>
  </dependentAssembly>
 </dependency>
</assembly>

В папочке Windows (в XP естесственно) их достаточно этих манифестов

Вот и усё...

Ответить

Номер ответа: 13
Автор ответа:
 bas



Вопросов: 16
Ответов: 30
 Web-сайт: www.klyaksa.net
 Профиль | | #13
Добавлено: 18.06.05 12:46
А как избавиться от черноты в фреймах вокруг кнопок и переключателей? Кто-нибудь знает?

Ответить

Номер ответа: 14
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #14 Добавлено: 18.06.05 14:20
Переключатели можно поместить в PictureBox

Ответить

Номер ответа: 15
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 18.06.05 14:45
Да муть ето всё... есть хорошие отлаженные контролы в хр стиле. А проверить какая ось на компе и показать соответственную кнопку вроде не сложно.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам