Разницу между ComCtl32.dll в XP и "не XP" известна? С каким пор язык VB обзавёлся виртуальной машиной?Сообщение от Dr.Lion/RSM
Разницу между ComCtl32.dll в XP и "не XP" известна? С каким пор язык VB обзавёлся виртуальной машиной?Сообщение от Dr.Lion/RSM
Не юзай его! Какой смысл таскать за собой ocx, если все, что он делает, можно сделать через API! Если хочеш, могу скинуть пример. Скажи только куда. Кроме того, по умолчанию он есстессно не ставится ни с одной виндой.Сообщение от Dr.Lion/RSM
Нет. Нет никакой виртуальной машины Ты перепутал, наверное, с набором стандартных dll для VB. Они действительно ставятся с виндой и с офисом.Сообщение от Dr.Lion/RSM
По поводу динамических контролов - не вопрос. Буквально вчера решал такую же задачку. Тавай ТЗ - помогу набросать код.
То, что для одних константа, для других только переменная
Кроме того могу написать инсталяху для тулзни.
То, что для одних константа, для других только переменная
Понятия не имею, о какой разнице идет речь! Насчет виртуальной машины: что такое по-твоему msvbvm60.dll ? Если делать инсталяху средствами VB, то в общий пакет он ложит кучу всякого геммороя, в том числе и выше указанную библиотеку, а это значит, что без нее программы на VB не будут работать. Но данная библиотека попадает на комп вместе с виндой (у меня XP без офиса), либо с офисом (это наверняка).Сообщение от icebear
Если знаешь, то напиши мне пример, как можно заюзать это в Visual Basic через Win API. Кусок исходника можешь выложить сдесь. Вот то, что у меня юзается сейчас:Сообщение от Odrick
Private Function GetFileName(BoxName As String) As String
Dialog.Filter = "Файл настройки|*.ini|Текстовый файл|*.txt|Все файлы|*.*"
Dialog.Flags = cdlOFNHideReadOnly
Dialog.DialogTitle = BoxName
Dialog.FileName = ""
Dialog.ShowOpen
Dialog.InitDir = ""
GetFileName = Dialog.FileName
End Function
Напиши, пожалуйста, альтернативу под API.
Какая здесь нафиг инсталяха? Архив с тремя файлами распаковывается в каталог эмуля - и все!Сообщение от Odrick
Автор эмуляторов Nescube, PocketZX.
msvbvm60.dll - всего лиш набор com-серверов, которые реализуют стандартные GUI-элементы VB и основные функции языка. Но это никак не виртуальная машина Так можно любую dll с com-объектами и функциями назвать виртуальной машиной.Сообщение от Dr.Lion/RSM
Это да. Но справедливо только в том случае, если у юзера есть все компоненты, нужные для работы софта. По хорошему это делается так: вылаживается минимальная версия (архив с 3-мя файлами ) и полная инсталяха. Но только сделанная не "стандартными средствами VB" . А дальше пусть каждый качает то, что ему нужно.Сообщение от Dr.Lion/RSM
По поводу диалога выбора файла. Сделай модуль, вставь в него следующий код и пользуй функцию opendlg. Думаю смысл всех параметров ясен Так как здесь юзается чистое API, ничего лишнего типа comdlg32.ocx за собой таскать не прийдеться
Да, посмотрел интерфейс - хотелось бы все-таки что-то в духе списка с ветками настроек слева и странички справа с параметрами. И чтобы каждый параметр редактировался с помощью своего контрола. Так по моему удобнее будет... Но это так, мое мнениеКод:Option Explicit 'Чтоб все объявить явно Public Enum ofnflags 'Флаги API GetOpenFileName OFN_ALLOWMULTISELECT = &H200 OFN_CREATEPROMPT = &H2000 OFN_ENABLEHOOK = &H20 OFN_ENABLETEMPLATE = &H40 OFN_ENABLETEMPLATEHANDLE = &H80 OFN_EXPLORER = &H80000 ' new look commdlg OFN_EXTENSIONDIFFERENT = &H400 OFN_FILEMUSTEXIST = &H1000 OFN_HIDEREADONLY = &H4 OFN_LONGNAMES = &H200000 ' force long names for 3.x modules OFN_NOCHANGEDIR = &H8 OFN_NODEREFERENCELINKS = &H100000 OFN_NOLONGNAMES = &H40000 ' force no long names for 4.x modules OFN_NONETWORKBUTTON = &H20000 OFN_NOREADONLYRETURN = &H8000 OFN_NOTESTFILECREATE = &H10000 OFN_NOVALIDATE = &H100 OFN_OVERWRITEPROMPT = &H2 OFN_PATHMUSTEXIST = &H800 OFN_READONLY = &H1 OFN_SHAREAWARE = &H4000 OFN_SHAREFALLTHROUGH = 2 OFN_SHARENOWARN = 1 OFN_SHAREWARN = 0 OFN_SHOWHELP = &H10 End Enum Private Type OPENFILENAME 'Структура для API GetOpenFileName lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Public Function opendlg(hwnd As Long, Filter As String, FilterIndex As Long, FileName As String, DefaultExt As String, InitDir As String, DialogTitle As String, flags As ofnflags) As String 'Функция вызывает окно выбора файла, возвращает выбранный файл (или пустую строку в случае отмены) Dim iDelim As Long Dim OFN As OPENFILENAME 'Структура для API GetOpenFileName Dim sTemp As String Dim i As Integer Dim retval As Long 'Значение возвращаемое самой API flags = flags And (&H1 Or &H2 Or &H4 Or &H8 Or &H10 Or &H100 Or &H200 Or &H400 Or &H800 Or &H1000 Or &H2000 Or &H4000 Or &H8000 Or &H40000 Or &H80000 Or &H100000 Or &H200000) 'Эти флаги не должны стоять в открытии, сбросить их With OFN 'Длинны структуры .lStructSize = Len(OFN) 'Дескриптор окна .hwndOwner = hwnd 'Коментарии излишни, флаги .flags = flags 'Расширение по умолчанию, тоже нужно хоть и открытие :-( .lpstrDefExt = DefaultExt sTemp = InitDir 'Если не выбрана парка то папка с прогой If sTemp = "" Then sTemp = App.Path .lpstrInitialDir = sTemp sTemp = FileName 'Все заполнить символом chr(0). Надо! .lpstrFile = sTemp & String$(255 - Len(sTemp), 0) .nMaxFile = 255 .lpstrFileTitle = String$(255, 0) .nMaxFileTitle = 255 sTemp = Filter 'Чтоб ни мучится с выписыванием chr(0) в вызов ф-ии For i = 1 To Len(sTemp) If Mid(sTemp, i, 1) = "|" Then Mid(sTemp, i, 1) = vbNullChar End If Next sTemp = sTemp & String$(2, 0) .lpstrFilter = sTemp .nFilterIndex = FilterIndex .lpstrTitle = DialogTitle .hInstance = App.hInstance End With 'Вызов API retval = GetOpenFileName(OFN) 'А все ли ОК? If retval = 0 Then opendlg = "" Else 'первый символ chr(0) iDelim = InStr(OFN.lpstrFile, vbNullChar) 'Удалить лишнии chr(0) If iDelim Then opendlg = Left$(OFN.lpstrFile, iDelim - 1) End If End Function
То, что для одних константа, для других только переменная
Вот это чтоб получить несчастное имя файла, мне нужно эту хреновину вставить? Я так ничего и не понял, что там к чему и как этим пользоваться! Помоему, я где-то когда-то видел Диалог через АПИ, но там было все намного короче и понятней, вот вспомнить бы где видел!Сообщение от Odrick
Автор эмуляторов Nescube, PocketZX.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Вот последняя версия программы. Об изменениях и дополнениях читайте в файле about. Как и обещал, откомпилено в пи код. Жду новых сообщений о глюках!
Автор эмуляторов Nescube, PocketZX.
Ндя... Объясняю: Это код для отдельного модуля. То есть, добавляеш в проект модуль, обзываеш его как-нить OpenDialog.bas и вставляеш туда код. Для того, чтобы вызвать диалог открытия файла в твоем случае делаеш так:
Private Function GetFileName(BoxName As String) As String
GetFileName = opendlg(Me.hwnd, "Файл настройки|*.ini|Текстовый файл|*.txt|Все файлы|*.*", 0, "", "", "", BoxName, OFN_HIDEREADONLY)
End Function
Так понятнее? Или нужно более подробно расписать текст модуля? Давай мыло - напишу подробно с теорией использования API в VB А то что большой модуль - так он и реализует все что нужно в диалоге выбора файла. Могу укоротить его раза в 3. Но тогда он будет несколько убог по функциональности.
То, что для одних константа, для других только переменная
Вот теперь понятно, что я должен вставить в свою программу. В версии 1.3 попробую.Сообщение от Odrick
Вот мыло:[email protected] расталкуй, если можешь, по поводу Win API. Укоротить твой пример не мешало бы, ибо диалог у меня используется только для открытия файла в таком виде, как я тибе приводил пример. Еще, что мне нужно вставить в программу вместо:Сообщение от Odrick
IniName=Dialog.FileName
и как мне быть со строками из моего примера:
...
Dialog.FileName=""
...
Dialog.InitDir=""
...
Автор эмуляторов Nescube, PocketZX.
Рассмотрим внимательно параметры функции:
Public Function opendlg(hwnd As Long, Filter As String, FilterIndex As Long, FileName As String, DefaultExt As String, InitDir As String, DialogTitle As String, flags As ofnflags) As String
Dialog.FileName это аналогичный параметр функции FileName
Dialog.InitDir = параметр InitDir
Так что это все задается во время вызова, а не предварительно как в случае с
CommonDialogControl
Подожди, насколько я понял у тебя есть функция GetFileName, которая возвращает имя выбранного файла?Сообщение от Dr.Lion/RSM
То, что для одних константа, для других только переменная
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)