Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как задать окну, чтобы оно рисовалось поверх ос... Добавлено: 13.04.04 01:18  

Автор вопроса:  kolyanoid

Я программирую на другом языке (другом BASIC'е). Решил сделать браузер 3D моделей, используя windows'овский интерфейс (VB) и 3D возможности DarkBASIC'а. Но без умения сделалать так, чтоб окно просмотра 3D (другой проги) рисовалось поверх всех остальных окон, получается ацтой. Помогите плиз :)

Ответить

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

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



Вопросов: 117
Ответов: 1538
 Профиль | | #1 Добавлено: 13.04.04 02:49

Если твой другой Басик допускает использование API, то вот ф-ция, которая может тебе поставить твоё окно поверх всех:

Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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

Только нужно сначала найти хэндл того окна, которое надо перенести наверх.

Ответить

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



Вопросов: 19
Ответов: 60
 Профиль | | #2 Добавлено: 13.04.04 20:25

Ты уж извини, но в VB я только месяца 2 назад разобрался с "HELLO WORLD!!!" :) Поэтому я не совсем понял, что ты имел ввиду :(

"Мой basic" не поддерживает winAPI, но может грузить внешние DLL и юзать их функции в своих целях. А winAPI, насколько я знаю - это DLL

Расскажи пожалуйста по буквам, какую DLL грузить, как называется функция, и какие в неё данные нужно вводить. (ты это уже написал, но я не въехал :))

И ещё. Что такое "хэндл окна"? Единственное, что могу сказать, это то, что у меня 2 проги грузятся одновременно. Сначало ВБшная прога, потом она запускает другую прогу, которую мне и надо заставить рисоваться поверх всего остального.

Ответить

Номер ответа: 3
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #3 Добавлено: 14.04.04 00:41
'На VB это выглядит так:
' если у тебя есть VB, скопируй этот код в форму  и запускай
Option Explicit
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Sub 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)
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim SearchWnd As Long    ' это переменная, куда будешь записывать хэндл - указатель окна
                              ' которое надо перенести наверх
                   
Private Sub Form_Load()
    Dim s As String, a As String
    ' ждем некоторое время, чтобы твой броузер наверняка успел загрузиться
    Sleep 2000  ' 2 сек
    s = "Заголовок"     ' того окна, которое надо наверх
    SearchWnd = FindWindow(vbNullString, s)
    If SearchWnd <> 0 Then               ' если окно появилось
            Me.Caption = SearchWnd       ' посмотришь в заголовке этой проги хэндл искомого окна
            Beep
 ' ставим его наверх
            SetWindowPos SearchWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    End If
End Sub
' код проверн, работает. Смотри, как его приспособить к твоему 'делу

Ответить

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



Вопросов: 19
Ответов: 60
 Профиль | | #4 Добавлено: 16.04.04 00:57

Скажи пожалуйста, как называется та библиотека winAPI??? kernell32.dll??? user32.dll??? А то мне её отдельно грузить надо.

А код сейчас проверю :)

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #5 Добавлено: 16.04.04 02:50

Ну в объявлении функции написано ведь  SetWindowPos Lib "User32"  и Sleep Lib "kernel32" . Только я не понял, зачем тебе их таскать, эти библиотеки, они ж есть в любой Винде?! Просто перед их вызовом их надо задекларировать и всё. Т.е. ты даёшь знать, что будешь использовать те или иные функции, чтобы твой компилятор знал, какие адреса памяти втыкать в код проги вместо названий. И ещё: это объявления для VB, в других языках синтаксис может быть другой. Или ты не под Виндовс пишешь?

 

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 16.04.04 17:54

Не под Windows kernel32.dll & user32.dll работать не будут :)

Если мне не изменяет память, в DarkBasic очень извратный способ вызова функций из DLL - больше похож на LoadLibrary-GetProcAddress-CallWindowProc-FreeLibrary. Там нет деклараций, но таскать библы за собой, действительно, совершенно не обязательно :)

Ответить

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



Вопросов: 19
Ответов: 60
 Профиль | | #7 Добавлено: 18.04.04 15:58

Ну я их не собирался таскать... Просто в DarkBASIC нужно знать имя библиотеки, чтоб её загрузить, если нужно использовать внешние функции DLL в коде.

Вобщем... Всем огромное спасибо, вы мне очень помогли :)

Ответить

Страница: 1 |

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



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