VBNet
VBMania
Голосование: Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Свежий выпуск.
Читайте! Содержание выпуска
Aslof рекомендует Ищешь фильм? http://subscribe.ru/catalog/rest.cinema.filmforyou Сайт рассылки - http://aslof.balzer.ru/ Citycat by Email Программа Citycat by Email позволяет работать с сервером Subscribe.ru с помощью электронной почты. Теперь Вам не нужно тратить деньги на работу в online и просматривать мегабайты рекламы для того, чтобы подписаться на нужную рассылку! Вам просто необходимо скачать небольшую базу данных по всем рассылкам каталога с нашего сайта, после чего Вы сможете подписываться и отписываться от рассылок, заказывать архивы прошлых выпусков, выполнять поиск по каталогу рассылок и многое другое. Программу Citycat by Email можно бесплатно загрузить с сайта http://sapisoft.h1.ru. наверх Новости сайта VBNet
Последние 20 тем форума на VBNet.Ru: 06:10 / 8 дек. ListView и TreeView вЫзаУт mscomctl.ocx | Хитов: 6 | Ответов: 4 04:02 / 8 дек. БД | Хитов: 7 | Ответов: 1 23:26 / 7 дек. Многопоточность в .Net | Хитов: 3 | Ответов: 0 22:09 / 7 дек. ProgressBar | Хитов: 11 | Ответов: 0 21:05 / 7 дек. HTML | Хитов: 10 | Ответов: 0 17:49 / 7 дек. Всем программёрам!!! | Хитов: 19 | Ответов: 0 16:20 / 7 дек. mciSendString | Хитов: 10 | Ответов: 0 16:20 / 7 дек. mciSendString | Хитов: 3 | Ответов: 0 14:12 / 7 дек. SELECT......... | Хитов: 25 | Ответов: 1 12:43 / 7 дек. listview: item any backcolor | Хитов: 13 | Ответов: 2 11:44 / 7 дек. Как подключит базу к web сайту | Хитов: 23 | Ответов: 3 11:28 / 7 дек. Как убить объект | Хитов: 30 | Ответов: 2 10:11 / 7 дек. Время | Хитов: 30 | Ответов: 5 09:47 / 7 дек. Проблема с Common Dialog | Хитов: 22 | Ответов: 2 04:43 / 7 дек. Профессиональная раскраска RichText | Хитов: 32 | Ответов: 2 04:07 / 7 дек. А как создать макрос удаляющий пустые строки | Хитов: 12 | Ответов: 1 03:45 / 7 дек. Grafika i tekst v odnom faile | Хитов: 53 | Ответов: 14 03:28 / 7 дек. передача между picture (замаялся уже...) | Хитов: 21 | Ответов: 3 02:15 / 7 дек. Счетчики и все такое | Хитов: 20 | Ответов: 1 01:58 / 7 дек. Помогите писать терминалку на VB | Хитов: 20 | Ответов: 3 Последние поступления в Библиотеку кодов: Как отследить скролл мыши (61) Преобразование числа в Украинскую валюту (62) наверх Новости сайта MSDN наверх Новости сайта GotdotNet
Новые статьи: наверх Новости сайта dotSite Новые статьи: Новые примеры: наверх Один момент из жизни форума: Image control Адерес темы: http://vbnet.ru/forum/show.asp?id=28983 Вопрос: Автор вопроса: Emil Revencu Как можно узнать цвет пикселя и вставить пиксель определённого цвета в image control (как POINT и PSET для picturebox)? Ответы: Автор: CyRax Попробуй GetPixel. Автор: Emil Revencu Не могу получить HDC для image, а GETPIXEL этого требует. Автор: Павел Спешу огорчить: у Image нет hWnd, hDC и прочего, потому что это вообще не окно и не контрол. Это т.н. графический контрол, то есть для Windows его не существует вовсе, его самостоятельно рисует VB Runtime функциями GDI. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: SHEFF aka 3BEPb Ответ ожидается по этому адресу Как загружать из файлы .тхт в VB? Например: Number = FreeFile Open "C:\All\My document\My proect\xakep\History.txt" For Output As 1 Print #1, "Money=", Form2.Label32.Caption Print #1, "Life=", Form2.lblhp.Caption Close #1 Вот что получаеться в текстовом файле: Money= 20 Life= 100 Вот и как загрузить эти цифры обратно в Visual Basic? Автор вопроса: SHEFF aka 3BEPb Ответ ожидается по этому адресу Смотрите: MMControl1.DeviceType = "waveaudio" MMControl1.FileName = Form1.Label3.Caption + "\sound\notify.wav" MMControl1.Command = "open" MMControl1.Command = "play" И Вот этот звук звучит тока 1 раз и все :( , что надо сделать чтобы он звучал стока раз скока будет происходить то или иное событие... Автор вопроса: vasili Ответ ожидается по этому адресу Как сделать так чтобы мой проект в access запускался без самого accessa? Автор вопроса: Swift Ответ ожидается по этому адресу Каким образом можно узнать цвет точки на форме, и каким образом его поменять? Автор вопроса: NIK Ответ ожидается по этому адресу Программа на VB обрабатывает множество однотипных текстовых файлов и записывает данные в БД "Access".В общем программа работает нормально, но иногда, особенно когда файлов много, выпадает ошибка: "Couldn'n update: currently locked by user 'Admin' on machine 'NIK'". Как я понял, VB не может добавить запись в таблицу, но "победить" проблему мне так и не удалось. Если кто-нибудь сталкивался c подобной ошибкой, пожалуйста помогите. Автор вопроса: Валерий Алексеевич Ответ ожидается по этому адресу Visual Basic 6. Пожалуйста, подскажите как создать двумерный массив (M x N) и заполнить его нулями и единицами в шахматном порядке. Автор вопроса: Валерий Алексеевич Ответ ожидается по этому адресу Где можно скачать и установить Помощь MSDN для VB6? Автор вопроса: Валерий Алексеевич Ответ ожидается по этому адресу Просьба сообщить, как правильно открыть созданный и сохраненный проект Visual Basic 6.0 для дальнейшего редактирования? При открытии файла Проект.vbg не появляются ни форма проекта, ни модуль. Однако кнопкой Run проект запускается. Почему в проекте отсутствует файл с расширением *.bas? Автор вопроса: Валерий Алексеевич Ответ ожидается по этому адресу Дана задача: Зарплата инженера 5000р., бухгалтера 5400р., техника 3200р. Найти сумму выплачиваемой зарплаты, если на предприятии работает 2 инженера, 3 бухгалтера и 13 техников. Задачу я решил следующим способом. Программа работает. Прошу сообщить правильно ли я ее решил? Приводу текст модуля программы: 'Устанавливаем начальные значения при открытии программы: Private Sub Form_Load() Me.Текст1.Text = 0 'Задаем нулевые значения исходным данным Me.Текст2.Text = 0 'Задаем нулевые значения исходным данным Me.Текст3.Text = 0 'Задаем нулевые значения исходным данным Me.Текст4.Text = 0 'Задаем нулевые значения исходным данным Me.Текст5.Text = 0 'Задаем нулевые значения исходным данным Me.Текст6.Text = 0 'Задаем нулевые значения исходным данным Me.Текст7.Text = 0 'Задаем нулевые значения исходным данным Me.Рамка2.Visible = False 'Скрываем группу Ответа End Sub 'Кнопка Решить задачу: Private Sub Комманда1_Click() Me.Рамка2.Visible = True 'Показываем группу Ответа 'Производим вычисления по расчету суммы зарплаты: Me.Текст7.Text = Me.Текст1.Text * Me.Текст4.Text + Me.Текст2.Text * Me.Текст5.Text + Me.Текст3.Text * Me.Текст6.Text End Sub 'Кнопка Закончить: Private Sub Комманда2_Click() Unload Me 'Закрываем программу End Sub 'Кнопка Заполнить: Private Sub Комманда3_Click() Me.Текст1.Text = 5000 'Устанавливаем значения согласно условию задачи Me.Текст2.Text = 5400 'Устанавливаем значения согласно условию задачи Me.Текст3.Text = 3200 'Устанавливаем значения согласно условию задачи Me.Текст4.Text = 2 'Устанавливаем значения согласно условию задачи Me.Текст5.Text = 3 'Устанавливаем значения согласно условию задачи Me.Текст6.Text = 13 'Устанавливаем значения согласно условию задачи Me.Текст7.Text = 0 'Устанавливаем значения согласно условию задачи Me.Рамка2.Visible = False 'Скрываем группу Ответа End Sub 'Кнопка Очистить: Private Sub Комманда4_Click() Me.Рамка2.Visible = False 'Скрываем группу Ответа Me.Текст1.Text = 0 'Очищаем значения исходных данных Me.Текст2.Text = 0 'Очищаем значения исходных данных Me.Текст3.Text = 0 'Очищаем значения исходных данных Me.Текст4.Text = 0 'Очищаем значения исходных данных Me.Текст5.Text = 0 'Очищаем значения исходных данных Me.Текст6.Text = 0 'Очищаем значения исходных данных Me.Текст7.Text = 0 'Очищаем значения исходных данных End Sub Автор вопроса: Данила Ответ ожидается по этому адресу Ребят, качните кто-нибудь нормальный контрол дерева. Я уже запарился с микрософтовским. Мне нужно-то всего-то 4 функции: добавить ветку с ИД и названием, удалить ветку, получить ИД ветки и найти ИД. Пока в стандартном это сделаешь, мылом покроешься. Автор вопроса: Andrey Ответ ожидается по этому адресу Я уже задавал вопрос, и все же... как в DataReport динамически добавить Label, ну и вообще какие либо объекты, или если такое не возможно, то где это возможно? Автор вопроса: BaKs Ответ ожидается по этому адресу Как написать прогу ( типа смотрелки фоток), чтобы при открытии каждой новой фотки размер формы ( ну в общем всей проги), становился равен размеру фотки. Я пробовал всякие autosize и windowState но что-то не получается. Автор вопроса: KeeL Ответ ожидается по этому адресу Как сделать чтобы моя программа грузилась вместе с каким-нибудь файлом? Автор вопроса: Александр Ответ ожидается по этому адресу Как определить температуру BIOS (процессора, м.платы, винта). И вообще возможно ли это на vb6. Если можно кусок кода. Ответы: Вопрос: Как в VB отсортировать массив чисел? Ответ: Автор ответа: Andruew Есть такой способ : Метод Пузырька: Весь масив перебирается снизу вверх, если елемент больше предыдущего, то они меняются местами. В конце концов у нас получится отсортированый по убыванию массив. Вопрос: Как на VBA занести определенную информацию в определенные места документа WORD? То есть как бы заполнить шаблон. Ответ: Автор ответа: OAN Примерно так: 1. Сделай выгрузку данных в таблицу или текстовый файл (для устранения проблем с кодировкой используй юникод-CP1200). 2. Создай шаблон Ворда 3. Используй Слияние (MailMerge) документа с указанием в качестве источника данных ранее созданный файл. 4. Расставь поля данных в шаблоне. 5. Сохрани шаблон. Для получения результата достаточно подменить новыми значениями файл данных и выполнить Слияние в новый документ. Практически все пункты легко реализовываются в VBA. Вопрос: Как записать текст в файл *.txt через VB? Ответ: Автор ответа: интернет dim a as integer dim txt,fil as string a=freefile fil="Имя.txt" open fil for output as a txt="Пиши что хочешь" print #a,txt close a Вопрос: В папке есть куча рисунков с расширением bmp и jpg, а могут быть и не только рисунки. Рисунки не индексированы. С помощью CommonDialog открываю первый рисунок, который заносится в Picture. Подскажите, пожалуйста, как мне передать в CommonDialog1.FileName следующий рисунок, чтобы отобразить его в Picture. Такая штука есть в ACDTree и в XP-шном просмотрщике. Ответ: Автор ответа: интернет Необходимо поставить CD1.filter="*.jpg,*.bmp",тогда будут видны только рисунки. Для перехода к следующему рисунку необходимо выполнить CD1.ListIndex=CD1.ListIndex+1, CD1.Name автоматически примет имя следующего файла. А общее количество файлов находится CD1.ListConter-1 Вопрос: В ообщем мне нужно сканировать процессы (из под Win2_k). И у определенного процеса изнать путь исполняемого файла (приложения). Вопрос: Как узнать расположение (полный путь к ) файла, через его процесы Ответ: Автор ответа: Сан Саныч Данный пример учитывает версию ОС Код для модуля: 'declares of the API functions,constants,types and functions Public Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long Public Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long Public Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long Public Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long Public Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long Public Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer Public Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * 260 End Type Public Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Public Const PROCESS_QUERY_INFORMATION = 1024 Public Const PROCESS_VM_READ = 16 Public Const MAX_PATH = 260 Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 Public Const SYNCHRONIZE = &H100000 Public Const PROCESS_ALL_ACCESS = &H1F0FFF Public Const TH32CS_SNAPPROCESS = &H2& Public Const hNull = 0 Function StrZToStr(s As String) As String StrZToStr = Left$(s, Len(s) - 1) End Function Public Function getVersion() As Long Dim osinfo As OSVERSIONINFO Dim retvalue As Integer osinfo.dwOSVersionInfoSize = 148 osinfo.szCSDVersion = Space$(128) retvalue = GetVersionExA(osinfo) getVersion = osinfo.dwPlatformId End Function Код формы (на ней LstBox) Private Sub Form_Load() List1.Clear Select Case getVersion() Case 1 Dim f As Long Dim sname As String Dim hSnap As Long Dim proc As PROCESSENTRY32 hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) If hSnap = hNull Then Exit Sub proc.dwSize = Len(proc) f = Process32First(hSnap, proc) Do While f sname = StrZToStr(proc.szExeFile) List1.AddItem sname f = Process32Next(hSnap, proc) Loop Case 2 Dim cb As Long Dim cbNeeded As Long Dim NumElements As Long Dim ProcessIDs() As Long Dim cbNeeded2 As Long Dim NumElements2 As Long Dim Modules(1 To 200) As Long Dim lRet As Long Dim ModuleName As String Dim nSize As Long Dim hProcess As Long Dim i As Long cb = 8 cbNeeded = 96 Do While cb <= cbNeeded cb = cb * 2 ReDim ProcessIDs(cb / 4) As Long lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded) Loop NumElements = cbNeeded / 4 For i = 1 To NumElements hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i)) If hProcess <> 0 Then lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2) If lRet <> 0 Then ModuleName = Space(MAX_PATH) nSize = 500 lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize) List1.AddItem Left(ModuleName, lRet) End If End If lRet = CloseHandle(hProcess) Next End Select End Sub Вопрос: Подскажите, пожалуйста, какой самый быстрый (по производительности) способ склеить два,три,.... файла средствами VB. Ответ: Автор ответа: C...R...a...S...H Самый быстрый способ (наверное) это загрузить файлы в три массива as binary сделать свое черное дело по обьединению и залить обратно куда хочеш. Вопрос: Я сделал БД на Visual Basic, но она не работает на других компьютерах. Т.е. БД присоедена у меня по одному адресу, а на другом компьютере по другому. Ответ: Автор ответа: Данила Используй относительный адрес (app.path), либо запрашивай путь. Вопрос: Вышлите пример какой-нибудь маленькой БД (желательно с комментариями). Например, содержащую информацию о студентах, их адреса, телефоны. Ответ: Автор ответа: Данила В Аксэсе, компоненте офиса, есть учебные базы. Вопрос: Есть хороший код: Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Const WM_SETHOTKEY = &H32 Private Const WM_SHOWWINDOW = &H18 Private Const HK_SHIFTA = &H141 'Shift + A Private Const HK_SHIFTB = &H142 'Shift + B Private Const HK_CONTROLA = &H241 'Control + A Private Const HK_ALTZ = &H45A Private Sub Form_Load() 'Позволить узнать windows какая горячая клавиша в вашем приложении erg& = SendMessage(Me.hwnd, WM_SETHOTKEY, HK_ALTZ, 0) If erg& <> 1 Then MsgBox "You need another hotkey", vbOKOnly, "Error" 'Сказать windows что делать при нажатии на hotkey 'в данном случае - показать окно программы erg& = DefWindowProc(Me.hwnd, WM_SHOWWINDOW, 0, 0) End Sub Как Вы поняли, он позволяет активировать Ваше приложение при нажатии HOTKEY. Но, если я, допустим, хочу не активировать приложение, а выпонить другую процедуру, то где мне эту код этой самой процедуры писать?. И второй вопрос: Какая константа Ctrl+8? (Или по-возможности список всех констант). Ответ: Автор ответа: C...R...a...S...H If erg& <> 1 Then MsgBox "You need another hotkey", vbOKOnly, "Error" 'Сказать windows что делать при нажатии на hotkey 'в данном случае - показать окно программы '''''''''''''''''''''' ''Код пишется тут '''''''''''''''''''''' erg& = DefWindowProc(Me.hwnd, WM_SHOWWINDOW, 0, 0) End Sub Список всех констант можеш найти в API Text Viewer Вопрос: Хотел узнать как добавлять музыку или звуки в VB? Ответ: Автор ответа: Memphis Данный код я взял на какой-то странице в интернете (к сожалению, я не помню автора). Он использует DirectSound (один из компонентов DirectX) для вывода звуков. Этот метод хорош тем, что позволяет создавать несколько звуковых буферов и выводить их одновременно. Но в данном примере используется только один буфер. Если нужно добавить звуковые буферы, просто добавьте переменные dsbuffer2, dsbuffer3, ..., dsbufferX и работайте с ними так же, как и с dsbuffer1. Dim dx As New DirectX7 Dim ds As DirectSound Dim dsbuffer1 As DirectSoundBuffer Private Sub InitSound(sSound As String) On Local Error Resume Next Set ds = dx.DirectSoundCreate("") ' включаем DirectSound If Err.Number <> 0 Then MsgBox "Error occured: [" & Err.Number & "]: " & Err.Description Exit Sub End If ds.SetCooperativeLevel Me.hWnd, DSSCL_NORMAL Dim bufferDesc As DSBUFFERDESC 'необходимые переменные для Dim waveFormat As WAVEFORMATEX 'организации простого wave-буфера bufferDesc.lFlags = DSBCAPS_CTRLPAN 'ставим флажок буферу, что будем _ ' баловаться с PAN-звуком, т.е. с плавным звуком. Set dsbuffer1 = ds.CreateSoundBufferFromFile(sSound, bufferDesc, waveFormat) If Err.Number <> 0 Then ' Что делать, если файл не существует или повреждён. MsgBox "Ошибка загрузки файла: [" & Err.Number & "]: " & Err.Description Exit Sub End If End Sub Private Sub PlayPanned(Buffer As DirectSoundBuffer, Position As Integer, Times As CONST_DSBPLAYFLAGS) On Error Resume Next Buffer.SetPan Position Buffer.Play Times End Sub Private Sub StopSound(Buffer As DirectSoundBuffer) On Error Resume Next Buffer.Stop End Sub Затем в том месте, где нужно проиграть звук (например, при нажатии на кнопку) вставляем следующие строки: InitSound SoundName ' SoundName - полный путь к звуковому WAV-файлу PlayPanned dsbuffer1, 0, DSBPLAY_DEFAULT Для того, чтобы проигрывание файла повторялось непрерывно, нужно вместо DSBPLAY_DEFAULT поставить DSBPLAY_LOOPING. Для того, чтобы остановить проигрывание файла, нужно в точке, где необходимо совершить остановку (например, тоже на кнопку), прописать следующее: StopSound dsbuffer1 Вопрос: Как добавлять в *.txt строки из VB? Ответ: Автор ответа: Данила Open "c:\temp\fillist.in" For Output As #1 Print #1, путь Reset Вопрос: Как загружать файлы из .txt в VB? Ответ: Автор ответа: Данила Open "c:\temp\fillist.in" For Input As #1 Line Input #1, строка1 Reset Ответ: Автор ответа: Memphis В своё время я столкнулся с той же самой проблемой, в связи с чем переворошил кучу литературы, перечитал статьи в MSDN, связанные с этим вопросом, и решил создать собственный класс, который бы облегчил мне жизнь в области загрузки/чтения/записи TXT-файлов. '------------------------------------------------------------------ ' File.cls '------------------------------------------------------------------ ' Модуль класса '------------------------------------------------------------------ ' Автор: Дёнин Никита Сергеевич ' Дата создания: 13 октября 2002 года ' Файл был взят из проекта SHADOW HTML editor version 1.1.0 RE ' Модификация: 16 ноября 2002 года '------------------------------------------------------------------ ' Класс файла '------------------------------------------------------------------ ' Свойства: '------------------------------------------------------------------ ' sFileContent - свойство для чтения/записи; это текст, считанный ' из открытого файла ' sFileName - свойство только для записи; имя открываемого файла '------------------------------------------------------------------ ' Методы: '------------------------------------------------------------------ ' OpenFile - метод без параметров. Просто открывает файл ' и читает данные из него ' SaveFile - метод имеет строковый параметр vData; ' этот параметр является текстом, который должен быть ' записан в редактируемый файл '------------------------------------------------------------------ Option Explicit Private sFileContent As String ' внутренняя переменная текста файла Private sFileName As String ' внутренняя переменная имени файла Public Sub OpenFile() ' метод открытия файла Open sFileName For Binary As #1 sFileContent = Space(LOF(1)) Get #1, , sFileContent Close #1 ' закрытие файла End Sub Property Get FileContent() As String ' свойство для чтения FileContent = sFileContent ' передача текста файла за пределы класса во внешнюю программу End Property Property Let FileContent(vData As String) ' свойство для записи sFileContent = vData ' запись текста файла в локальную переменную End Property Public Sub SaveFile() ' метод для сохранения файла Open sFileName For Binary As #1 Put #1, , sFileContent Close #1 End Sub Property Let FileName(vData As String) ' свойство только для записи (параметр - имя файла) sFileName = vData ' запись имени файла в локальную переменную класса End Property Private Sub Class_Terminate() sFileContent = "" sFileName = "" End Sub Ответ: Автор ответа: C...R...a...S...H Загрузка инфы dim str as string dim strCMD as string dim strValue as string open "xxx.xxx" for input as #1 do EOF(#1) 'точно непомню но вроде пока не достигнут конец файла line input #1, str 'читает первую строку файла strCMD=left(str,instr(1,str,"=")) 'считываем имя команды strValue=trim(right(str,len(str)-instr(1,str,"="))) 'значение select case strCMD case "Money": case "Life": end select loop Вопрос: Вобщем, считаю себе достаточно старым программером на VB (когда-то у меня был свой сайт посвященный этому вопросу www.vbland.narod.ru, но я его прикрыл... времени как то не было), начинал еще лет 10 назад на QB. Последствия одной проблемы меня выбивает из коллеи... Если и вы не дадите ответ на мой вопрос - пойду за мыло и веревкой :))) Реализую систему плугинов для определенной программы. Так как этим уже занимался, был уверен проблем не возникнет. Написал (поддержка OCX, DLL в директории) - все работает более чем прекрасно. Новые плугины - регистрируются - старые работают. 20:00 по Киевскому времени. Решаю переработать алгоритм. Хочу, чтобы плугины были сбиты не в одной папке, а в Plugins\[Название плугина], т.е. чтобы при загрузке программа пробегала по всем папкам и добавляла плугины. 20:30 все сделал. Адреса файлов возвращает... но не хочет регистрировать новые плугины. Часа три мучаюсь... не хочет. Лезу в инет за помощью - нифига не нахожу: все используют одну апиху регистрации. У меня ничего не работает (вернее новые подключаемые модули не регистрируются - старые работают). Иду в Windows\System запускаю regsvr32.exe и регистрирую по очереди новые плугины. Написало - "зарегистрировано успешно". Запускаю - не работает. Утро вечера мудренее - иду спать. Утром с чистой головой сажусь писать. Еще часа четыре страдаю - не пашет. Ошибок синтаксических\логических нет. String с путями к плугинами, флаги и все остальное возвращаются в нормальной форме. Два раза переставлял Винду (первоначально Me, потом 98 se2, потом 2000 Server) - не пашет. Что делать?! Кто ответит: бутылка виртуального пива. Ответ: Автор ответа: Anatoliy Zhukov 1-e regsvr32.exe WSEGDA daje isli i nichego ne sdelaet, pishet chto wsyo proshlo horosho :) !!! 2-e pishi POLNIY put' k plagini, i w KAWICH'KAH wot tak "...." naprimer: Shell "regsvr32.exe ""c:\MyPlugIn\Chto to.dll""" (obrati wnimanie na probel ;) ) Ответ: Автор ответа: Данила А ты попробуй их разрегистрировать, а потом опять зарегистрировать. Если поможет, сообщи - приятно удивлюсь. Ответ: Автор ответа: Сан Саныч Плагины как я понял пишешь тоже на ВБ? Ну тогда лови код который работает в моей проге давно и успешно. Плагины храняться в папке Plugins Исходники плагинов можешь поглядеть на моем сайте: http://apexsun.narod.ru/progs/noterepad/plugins/ Dim arrPlugins() As Object Dim mm() As String, Jk3 As Long If DirFiles(mm, MePath & "Plugins\", "*.npg") Then ReDim arrPlugins(UBound(mm)) As Object For I = 0 To UBound(mm) On Error GoTo Handler TMP1 = LCase(mm(I)) TMP1 = Left$(TMP1, Len(TMP1) - 4) & ".Data" Set arrPlugins(I) = CreateObject(TMP1) TMP1 = arrPlugins(I).InitPlugin(hwnd) .... NextPlug: Jk3 = 0 Next Exit Sub Handler: 'Если плагин не зарегистрирован - зарегистрируем! Reg MePath & "Plugins\" & mm(I), True DoEvents Jk3 = Jk3 + 1 If Jk3 < 10 Then 'чтоб не парить прогу если плагин не регистрируется Resume Else GoTo NextPlug End If End If Код для модуля: Private Declare Function CreateThread Lib "kernel32" (anyThread As Any, ByVal lngSize As Long, ByVal lngStart As Long, ByVal lngValue As Long, ByVal lngFlags As Long, lngThread As Long) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal lngModule As Long, ByVal strName As String) As Long Private Declare Function FreeLibrary Lib "kernel32" (ByVal lngModule As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal lngHandle As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal lngHandle As Long, ByVal lngTime As Long) As Long Public 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 Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Public Type WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cFileName As String * 260 cAlternate As String * 14 End Type Public Sub Reg(ByVal DLLforRegistre As String, Optional ByVal RegorUnreg As Boolean = True) Dim Hnd As Long, HnnD As Long HnnD = LoadLibrary(DLLforRegistre) Hnd = CreateThread(ByVal 0, 0, ByVal GetProcAddress(HnnD, IIf(RegorUnreg, "DllRegisterServer", "DllUnregisterServer")), ByVal 0, 0, 0) WaitForSingleObject Hnd, 10000 CloseHandle Hnd FreeLibrary HnnD End Sub Public Function DirFiles(Files() As String, Optional ByRef Path As String, Optional ByRef Pattern As String = "") As Boolean If Len(Pattern) = 0 Then Pattern = "*.*" If Len(Path) = 0 Then Path = MePath If Right$(Path, 1) <> "\" Then Path = Path & "\" Dim wfd As WIN32_FIND_DATA, H As Long, I As Long, k As Long On Error Resume Next H = FindFirstFile(Path & Pattern, wfd) If H > 0 Then ReDim Files(0) As String Files(0) = TrimNulls(wfd.cFileName) I = IIf(Len(Files(0)) > 0, 1, 0) Do wfd.cFileName = String(260, 0) k = FindNextFile(H, wfd) If k = 0 Then Exit Do ReDim Preserve Files(I) As String Files(I) = TrimNulls(wfd.cFileName) I = I + 1 Loop End If FindClose H DirFiles = IIf(I > 0, True, False) End Function Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
||||||||
Выпуск подготовили: |
Сурменок Павел |