Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: VB и ресурсы диалога. Добавлено: 16.12.06 01:36  

Автор вопроса:   | Web-сайт: domkratt.com | ICQ: 278109632 
Решил немного поизвращаться. Писал прогу на асме, и взбрело мне в голову ресурсный файл этой проги добавить к проекту VB. Редактор ресурсов прекрасно распознал его как ресурс диалога. Ну, думаю, обвяжу-ка все это дело. Сделал стандартную обвязку, все дела, DialogBoxParam... Но даже не надеялся, что все это будет работать. И не работает. Можно ли заставить все это дело пахать?

Ответить

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

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



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #1 Добавлено: 16.12.06 08:14
Как пытался делать то?

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #2
Добавлено: 16.12.06 14:20
Да все как в асме, говорю же. Добавил файл с ресурсом диалога, зарегал класс окна, Callback-функцию для обработки сообщений сляпал, вызываю DialogBoxParamA, а она 0 возвращает.
о... надо попробовать посмотреть результат GetLastError

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 16.12.06 16:01
Вот код, который был у меня:
Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (Optional ByVal lpModuleName As String) As Long
Declare Function DialogBoxParam Lib "user32" Alias ";DialogBoxParamA" (ByVal Instance As Long, ByVal TemplateName As String, Optional Parent As Long, Optional ByVal DialogFunc As Long, Optional ByVal InitParam As Long) As Integer

Dim hInstance As Long
Dim dlgName As String

Sub Main()
Dim ret As Long
dlgName = ";DIALOG"
hInstance = GetModuleHandle
ret = DialogBoxParam(hInstance, dlgName, , AddressOf DlgProc)

End Sub

Function DlgProc(hWin As Long, uMsg As Long, wParam As Variant, lParam As Variant)
' тут обработчик сообщений
End Function

Ответить

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



Вопросов: 6
Ответов: 171
 Профиль | | #4 Добавлено: 16.12.06 20:42

DialogBoxParam(BYVAL GetModuleHandle("";),"#1000" , BYVAL %HWND_DESKTOP, BYVAL CODEPTR(cbDLG1),0)=-1 THEN MesBox "Fail"


Где "#1000" номер(ID) диалога в ресурсе
%HWND_DESKTOP = просто ByVal 0

У меня так работает

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #5
Добавлено: 16.12.06 21:24
что-то я не помню в vb функции CODEPTR.... не работает.
Можешь прислать этот рабочий исходник на executioner_[dog]_pisem.net?

Ответить

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



Вопросов: 23
Ответов: 237
 Профиль | | #6 Добавлено: 17.12.06 12:09
Решил немного поизвращаться. Писал прогу на асме, и взбрело мне в голову ресурсный файл этой проги добавить к проекту VB.


Народ нащет извращения, заметил што в "MS Office" эсть
библиетеки написаные на "MS VBasic" и в них окна есть в ресурсе (топто зделаные ресурс едитор).
У миня такой вопросик а што дает што окно будет зделано таким из.. способом помню штота такое тыкал размер екзешника осталса прежним.

Ответить

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



Вопросов: 6
Ответов: 171
 Профиль | | #7 Добавлено: 17.12.06 12:27
Да чет там посылать, вот оно все
сырец:

#COMPILE EXE
#DIM ALL
#INCLUDE "win32api.inc"
#RESOURCE "CreatedViaResourсe4fora.pbr"

%IDD_DLG1 =1000
%IDC_BTN1 =1001
%IDC_STC1 =1002

'---------------------------
CALLBACK FUNCTION cbDLG1() AS LONG
   SELECT CASE AS LONG CBMSG
     CASE %WM_INITDIALOG

     CASE %WM_COMMAND
         SELECT CASE AS LONG CBCTL
             CASE  %IDC_BTN1
                 IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                     ' do something
                     MSGBOX "Блин... работает :)"
                 END IF
         END SELECT
'
     CASE %WM_SYSCOMMAND
        SELECT CASE (CBWPARAM AND &HFFF0)
           CASE %SC_CLOSE
             EndDialog (CBHNDL,0)
             FUNCTION = 0
        END SELECT
  END SELECT
END FUNCTION
'=================
FUNCTION PBMAIN () AS LONG
 'create modal dialog            IDD_DLG1
 IF DialogBoxParam(BYVAL GetModuleHandle("";), BYVAL MAKDWD(%IDD_DLG1,0), BYVAL %HWND_DESKTOP, BYVAL CODEPTR(cbDLG1),0)=-1 THEN ? "Fail"
' или так , тоже самое
' IF DialogBoxParam(BYVAL GetModuleHandle("";),"#1000" , BYVAL %HWND_DESKTOP, BYVAL CODEPTR(cbDLG1),0)=-1 THEN ? "Fail"
END FUNCTION  


и ресурс файл - CreatedViaResourсe4for.rc:

#define IDD_DLG1 1000
#define IDC_BTN1 1001
#define IDC_STC1 1002
#include "Resource.h"
IDD_DLG1 DIALOGEX 6,6,160,130
CAPTION ";DLG-via-resource"
FONT 8,"MS Sans Serif",0,0
STYLE 0x10CB0000
EXSTYLE 0x00010000
BEGIN
  CONTROL "Test",IDC_BTN1,"Button",0x50010000,100,18,54,22
  CONTROL "Press button for",IDC_STC1,"Static",0x50000000,100,5,54,9
END              


Да самое главное - это на повер бэйсике
CODEPTR - это адрес в коде , т.е. с его помощью определяем стартовый адрес колбэковской процедуры.
Как такое на ВБ делается не знаю.

Ответить

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



Вопросов: 6
Ответов: 171
 Профиль | | #8 Добавлено: 17.12.06 12:32
У миня такой вопросик а што дает што окно будет зделано таким из.. способом помню штота такое тыкал размер екзешника осталса прежним


Удобство дает.
Для замены размеров контролов, или новый добавить,
или текст контрола поменять, не надо по всему исходнику шарить, изменил в ресурсах и все.

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #9
Добавлено: 17.12.06 20:10
У миня такой вопросик а што дает што окно будет зделано таким из.. способом помню штота такое тыкал размер екзешника осталса прежним.

API-функции уж точно работают быстрее, чем встроенные функции VB. Да и приложение можно контролировать более тонко. Все сообщения перехватывать.

Ответить

Номер ответа: 10
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #10
Добавлено: 17.12.06 20:12
Да самое главное - это на повер бэйсике

Если честно, то я не имею даже малейшего представления о Power Basic....
Надо бы заняться, видимо...

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #11
Добавлено: 17.12.06 20:12
Да самое главное - это на повер бэйсике

Если честно, то я не имею даже малейшего представления о Power Basic....
Надо бы заняться, видимо...

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 18.12.06 00:19
Не ну на PB понятно - #RESOURCE, а вот VB6 интересно как?

Может надо "по особому" просто компилировать вб проект? :)

Не ну а чё, в ассемблере ж ничего специфического нет в рес файлах, даже в самом коде ничего писать ненадо, просто правельно скомпилировать...

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #13
Добавлено: 18.12.06 00:34
Не ну а чё, в ассемблере ж ничего специфического нет в рес файлах, даже в самом коде ничего писать ненадо, просто правельно скомпилировать...

Интересно, как?))) Я ужо как только не извращался.... Может ресурсы там как-то не так выстроены? может перестроить надо? попробую грохнуть секцию ресурсов и новую прилепить.

Ответить

Страница: 1 |

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



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