Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 11054
∙ повысить рейтинг »
Роман Селиверстов
Статус: Советник
Рейтинг: 4201
∙ повысить рейтинг »
Предтеча
Статус: Специалист
Рейтинг: 4152
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Basic/VBA

Номер выпуска:1104
Дата выхода:19.11.2015, 15:21
Администратор рассылки:Андреенков Владимир (Профессор)
Подписчиков / экспертов:12 / 8
Вопросов / ответов:3 / 8

Консультация # 62974: Здравствуйте! Подскажите как считывабтся данные из файла ресурсов функцией getresdata (id, тип данных)? (напримае считать музыкальный файл)....


Консультация # 115170: Уважаемые эксперты Вопрос 1)как из макроса в Excel открыть окно для выбора файла и выбрать его 2) Файл имеет расширение типа .001 а мне надо открыть его при помощи Excel. Спасибо...
Консультация # 18469: Уважаемые эксперты! Написал простую прогу на VB, но exe не работает на другом компе без VB, какие компоненты нужны ещё и как можно посмотреть необходимые компоненты для контролов на блоке инструментов? Как можно включить их в exe файл?...

Консультация # 62974:

Здравствуйте! Подскажите как считывабтся данные из файла ресурсов функцией getresdata (id, тип данных)? (напримае считать музыкальный файл).

Дата отправки: 17.11.2006, 09:30
Вопрос задал: Ars 11 www
Всего ответов: 2
Страница онлайн-консультации »


Консультирует PsySex (Профессионал):

Здравствуйте, Ars 11 www!
В частности музыкального файла.
Помещаем в файл ресурсов файла путем Add Custom Resuorce. Вообще в CUSTOM можно кидать любые типы файлов. Затем, когда нужно его проиграть, сохраняем его например во временную директорию и проигрываем. При закрытии проги удаляем свои сохраненные файлы.
Вот подпрограмма сохранения файла на диск из ресурсов.
====================================================
Private Sub Extract(ID As Integer, Path As String)
\'extracting resourses
On Error Resume Next
Dim file() As Byte
file() = LoadResData(ID, "CUSTOM")
Open Path For Binary Access Write As #1
Put #1, , file()
Close #1
End Sub
=====================================================
Параметры: ID-индетификатор ресурса, Path-путь с именем файла для сохранения(c:\temp\muzlo.mus)

Консультировал: PsySex (Профессионал)
Дата отправки: 17.11.2006, 10:37
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Залетин Виталий Викторович (мь:

Здравствуйте, Ars 11 www!
Файл ресурсов как таковой существует только на этапе разработки и компиляции проекта, далее он для работы программы не нужен, поскольку линковщик встраивает его содержимое в исполняемый файл (там есть специальная секция ресурсов).
Чтобы получить данные из ресурсов, их туда, естественно, надо поместить, а потом уже считывать. Ресурсы бывают таких видов:
- Строковой
- Графический
- Бинарный (двоичный), его еще называют Custom (иной, куда пихать можно все)

Далее - ресурсы, с которыми бейсик работать не умеет (хотя при известном извращении можно все):
- Меню
- Диалоги
- Акселераторы (горячие клавиши)

Музыкальный файл - это бинарный файл, который размещается в ресурсах с помощью VB6 Resource Editor, нажав на кнопочку Add Custom Resource с изображением разделенного на 4 части квадратика. Далее в появившемся окне нужно выбрать файл и все! Получившийся раздел имеет имя CUSTOM, но его можно и переименовать. В этот раздел можно добавлять сколько угодно своих бинарных ресурсов.
Чтобы всем этим добром попользоваться, надо использовать функцию загрузки бинарного ресурса, предварительно объявив байтовый массив для его хранения:

Dim arbyMas() As Byte
.
arbyMas = LoadResData(Id, "CUSTOM") \'Загружаем в массив файлик из ресурса
\'Если Вы переименовывали CUSTOM, то укажите свое имя.
\'Id может быть любым - словом без пробелов, цифрой, главное, чтобы не кирилицей

Dim iFile As Integer
iFile = FreeFile

\'Создаем файл и пишем в него содержимое байтового массива
Open "c:\MyFile.mp3" For Binary As #iFile
Put #iFile, ,arbyMas
Close #iFile
Теперь у нас есть файлик, который мы извлекли из ресурса и можем проиграть

Консультировал: Залетин Виталий Викторович (мь
Дата отправки: 18.11.2006, 15:10
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 115170:

Уважаемые эксперты Вопрос
1)как из макроса в Excel открыть окно для выбора файла и выбрать его
2) Файл имеет расширение типа .001 а мне надо открыть его при помощи Excel.
Спасибо

Дата отправки: 21.12.2007, 08:57
Вопрос задал: Larsh
Всего ответов: 2
Страница онлайн-консультации »


Консультирует HookEst:

Здравствуйте, Larsh!
Используйте FileDialog.Filters:

With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
With .Filters
.Clear
.Add "Файл 001", "*.001", 1
.Add "Все Файлы", "*.*", 2
End With
If .Show = -1 Then
\'делайте с файлом что хотите
MsgBox .SelectedItems(1)
End If
End With

Успехов.

Консультировал: HookEst
Дата отправки: 21.12.2007, 09:17
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Черников Игорь Владимирович:

Здравствуйте, Larsh!
Создайте кнопку на любом листе Excel и впишите туда этот код:

Option Explicit
Dim Res1 As Boolean
Dim Dir1 As String, ОдинСимвол As String
Dim Flname As String
Dim Flt1 As String

Private Sub CommandButton1_Click()
Res1 = MyGetFileName(Dir1, Flname, Application.Hwnd)
If Not Res1 Then MsgBox "Файл не выбран, программа завершает работу.", , "Отказ от выбора файла"
End Sub

Затем создайте модуль и впишите туда этот код:
Option Explicit
Private Type OPENFILENAME \' Получить имя файла
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 MyGetFileName(DirStr As String, FileNameStr As String, Optional hwndOwnerArg As Long = 0) As Boolean
Dim pOpenfilename As OPENFILENAME
Dim n As Integer, i As Integer, X As Long, St1 As String, St2 As String, St3 As String
pOpenfilename.lStructSize = Len(pOpenfilename)
pOpenfilename.hwndOwner = hwndOwnerArg
pOpenfilename.lpstrTitle = "Выберите нужный файл"
St1 = "Все файлы" & vbNullChar & "*.*"
pOpenfilename.lpstrInitialDir = DirStr
pOpenfilename.lpstrFilter = St1
pOpenfilename.lpstrFile = LPBuff(512)
pOpenfilename.nMaxFile = 511
pOpenfilename.lpstrFileTitle = LPBuff(512)
pOpenfilename.nMaxFileTitle = 511
pOpenfilename.flags = 16384 Or 2097152 Or 1048576 Or 524288
pOpenfilename.flags = pOpenfilename.flags Or 512
X = GetOpenFileName(pOpenfilename)
If X = 1 Then
MyGetFileName = True
St1 = LP2VB2(pOpenfilename.lpstrFile)
DirStr = Left(St1, pOpenfilename.nFileOffset - 1)
n = -1
St2 = St1
Do
St3 = MyGetLpStr(St2)
n = n + 1
Loop Until St2 = ""
If n >= 1 Then
MsgBox "Выбрано несколько файлов! Программа завершает работу"
End
Else
FileNameStr = Right$(St1, Len(St1) - pOpenfilename.nFileOffset)
End If
Else
MyGetFileName = False
DirStr = ""
FileNameStr = ""
End If
End Function
Private Function LP2VB2(St1) As String
LP2VB2 = Left$(St1, InStr(1, St1, vbNullChar & vbNullChar) - 1) \'здесь формируется полный путь и имя файла
End Function

Private Function LPBuff(n As Integer) As String
LPBuff = String(n, vbNullChar)
End Function
Public Function MyGetDirStr(Str1 As String) As String
Dim i As Integer, i1 As Integer, k As Integer
Dim St1 As String
If Len(Str1) > 0 Then
k = 1
Do
i = InStr(k, Str1, "\")
If i <> 0 Then i1 = i: k = i + 1
Loop While i <> 0
If i1 <> 0 Then
St1 = Left$(Str1, i1)
Else
i = InStr(1, Str1, ":")
If i = 0 Then
St1 = ""
Else
St1 = Left$(Str1, i1) & "\"
End If
End If
Else
St1 = ""
End If
MyGetDirStr = St1
End Function
Private Function MyGetLpStr(St1 As String) As String
Dim i As Variant
i = InStr(1, St1, vbNullChar)
If IsNull(i) Then
MyGetLpStr = ""
St1 = ""
Exit Function
ElseIf i = 0 Then
MyGetLpStr = St1
St1 = ""
Exit Function
Else
MyGetLpStr = Left$(St1, i - 1)
St1 = Right$(St1, Len(St1) - i)
Exit Function
End If
End Function
Public Function NormalizeDir(Str1 As String) As String
If Len(Str1) = 0 Then
NormalizeDir = ""
Exit Function
Else
If Right$(Str1, 1) <> "\" Then
NormalizeDir = Str1 & "\"
Exit Function
Else
NormalizeDir = Str1
Exit Function
End If
End If
End Function

Приятной работы!

Консультировал: Черников Игорь Владимирович
Дата отправки: 21.12.2007, 19:52
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 18469:

Уважаемые эксперты! Написал простую прогу на VB, но exe не работает на
другом компе без VB, какие компоненты нужны ещё и как можно посмотреть необходимые компоненты для контролов на блоке инструментов? Как можно включить их в exe файл?

Дата отправки: 19.03.2005, 08:51
Вопрос задал: Александр А.А.
Всего ответов: 4
Страница онлайн-консультации »


Консультирует Licvidator:

Здравствуйте, Александр А.А.!
Если прога использует компоненты из стандартного набора контролов, то, как правило, больше ничего с собой таскать не надо. В редких случаях может потребоваться библиотека msvbvm60.dll.
Если же программа использует дополнительные dll и осх, то все эти компоненты необходимо включить в состав программы (в сам ехе их не встроить!). Помимо этого, надо будет позаботиться об регистрации (для ActiveX компонентов, native регистрировать не нужно) этих компонентов на машине юзера, обычно я использую DllRegisterServer. Пример:

Private Declare Function RegMSWINSCK Lib "MSWINSCK.OCX" Alias "DllRegisterServer" () As Long
Const ERROR_SUCCES = 0&
Dim RegMSWINSCKCode As Long
Err = 0
RegMSWINSCKCode = RegMSWINSCK()
If Err <> 0 Then
MsgBox "Компонент MSWINSCK.OCX не найден", vbCritical, "TestProgramm"
End
Else
If RegMSWINSCKCode <> ERROR_SUCCES Then
MsgBox "Операция регистрации MSWINSCK.OCX не выполнена", vbCritical, "TestProgramm":
End
End If
End If

Консультировал: Licvidator
Дата отправки: 19.03.2005, 10:11
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Александр Шевченко:

Здравствуйте, Александр А.А.!
Посмотреть dll можно в Project -> References, а ocx в Project -> Components.

Консультировал: Александр Шевченко
Дата отправки: 19.03.2005, 11:43
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует PsySex (Профессионал):

Здравствуйте, Александр А.А.!
1.Для начала нужно определить список подгружаемых модулей вашей прогой. Таких прог не мало в инете, не вспомню конкретно, но предложить могу PROCDUMP прога правда для другого, но модули показывает;-) Так вот из полученного листа определяете нужные файлы. Ну и положив их рядом(или в папку system(system32))с вашем EXE на другом компе все должно работать. Есть одно \'НО\', некоторые dll модули не хотят работать без регистрации в системе. Если будет такая ситуация, зарегистрируйте модули приложением regsvr32.exe.
2. По поводу вложения недостающих компонентов в EXE.
Если конечно на машине нету msvbvm60.dll(говорим о VB6), то данный метод не прокатит, а если какого-нибудб OCX то нормально.
Создаем файл ресурсов и пихаем туда в раздел CUSTOM недостающий компонент. И следующий код на Form_Initialize()
----------------------------------
Private Sub Form_Initialize()
\'путь например такой, и 101 интедификатор ресурса
Extract "c:\windows\system\myocx.ocx", 101
End Sub
Private Sub Extract(toFile As String, ID As Integer)
On Error Resume Next
Dim a() As Byte
a() = LoadResData(ID, "CUSTOM")
Open toFile For Binary Access Write As #1
Put #1, , a()
Close #1
End Sub
---------------------------------
Данная подпрограмма извлечет файл из файла ресурсов и сохранит его на диске в нужном месте, с нужным именем.
Удачи.

Консультировал: PsySex (Профессионал)
Дата отправки: 19.03.2005, 13:59
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Miklucho:

Здравствуйте, Александр А.А.!
любой проге написанной на VB необходима какая-то библиотека, не помню точно названия, кажется vbvbm.dll, первые 2 буквы точно эти, так что поищи в дистрибуттиве по ним. А компоненты можно посмотреть в окне их подключения (Project\Components) - когда выделишь какой-нибудь из них, то в низу этого окошка появится путь к файлу и его имя.
Включай их в комплект распрострнения своей программой и не забудь в коде своей программы регистрировать их программой regsvr32.exe (набери ее в консоли с параметром /? и посмотри).

Консультировал: Miklucho
Дата отправки: 22.03.2005, 08:56
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное