VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Доска почёта: Sergey Y. Tkachev Кононенко Роман Kirill Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Хотелось бы сказать Вам кое-что насчёт раздела Вопрос/Ответ. Пожалуйста, на присылайте ответы с аттачами. Такие ответы не принимаются.
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Проверить наличие дискеты или CD-Rom'а в устройстве Добавьте на форму элемент DriveListBox и элемент CommandButton. Добавьте следующий код. Запустите программу. Выбирая в элементе DriveListBox любое устройство (дисковод или привод CD-Rom) и нажимая на кнопку вы узнаете, находится ли дискетка или лазерный диск в устройстве. 'ВАРИАНТ 1 Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long Private Sub Command1_Click() erg& = GetVolumeInformation(Drive1.Drive, VolName$, 127&, VolNumber&, MCM&, FSF&, FSys$, 127&) If erg& = 0 Then MsgBox "Ничего в текущем устройстве нет" Else MsgBox "В текущем устройстве присутствует диск" End If End Sub 'ВАРИАНТ 2 'Установите ссылку к библиотеке Microsoft Scripting Runtime (scrrun.dll) Private Sub Form_Load() Dim FSO As FileSystemObject Dim CDDrive As Drive Set FSO = New FileSystemObject Set CDDrive = FSO.GetDrive("F:") If CDDrive.IsReady Then MsgBox CDDrive.VolumeName Else MsgBox "CD в лотке отсутствует" End If Set CDDrive = Nothing Set FSO = Nothing End Sub наверх Изменить метку диска/устройства Добавьте 1 Command Button на форму Private Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long Private Sub Command1_Click() 'replace the "d:\" below with the drive you want to change its label 'replace the "MyNewLabel" below with the drive new label If SetVolumeLabel("d:\", "MyNewLabel") = 0 Then MsgBox "An Error occured while trying to change drive label", vbCritical, "Error" End If End Sub наверх Получить имя принтера по умолчанию Вариант 1. Очень простой MsgBox
Printer.DeviceName
Просмотреть все устройства и определить их тип (жесткий диск, дисковод, CD-ROM, сетевой диск, ...) Расположите на форме элемент ListBox. Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Const DRIVE_CDROM = 5 Const DRIVE_FIXED = 3 Const DRIVE_RAMDISK = 6 Const DRIVE_REMOTE = 4 Const DRIVE_REMOVABLE = 2 Dim strDrive As String Dim strMessage As String Dim intCnt As Integer Private Sub Form_Load() For intCnt = 65 To 86 strDrive = Chr(intCnt) Select Case GetDriveType(strDrive + ":\") Case DRIVE_REMOVABLE rtn = "Floppy Drive" Case DRIVE_FIXED rtn = "Hard Drive" Case DRIVE_REMOTE rtn = "Network Drive" Case DRIVE_CDROM rtn = "CD-ROM Drive" Case DRIVE_RAMDISK rtn = "RAM Disk" Case Else rtn = "" End Select If rtn <> "" Then List1.AddItem "Drive " & strDrive & " is type: " & rtn 'strMessage = strMessage & vbCrLf & "Drive " & strDrive & " is type: " & rtn End If Next intCnt 'MsgBox (strMessage) End Sub наверх Открыть/закрыть CD-ROM Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Private Sub Command1_Click() Call mciSendString("CD-ROM открыт", 0&, 0&, 0&) End Sub Private Sub Command2_Click() Call mciSendString("CD-ROM закрыт", 0&, 0&, 0&) End Sub наверх Узнать количество свободного места на диске Расположите на форме элемент CommandButton Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long Private Type DiskInformation lpSectorsPerCluster As Long lpBytesPerSector As Long lpNumberOfFreeClusters As Long lpTotalNumberOfClusters As Long End Type Dim info As DiskInformation Dim lAnswer As Long Dim lpRootPathName As String Dim lpSectorsPerCluster As Long Dim lpBytesPerSector As Long Dim lpNumberOfFreeClusters As Long Dim lpTotalNumberOfClusters As Long Dim lBytesPerCluster As Long Dim lNumFreeBytes As Double Dim sString As String Private Sub Command1_Click() lpRootPathName = "с:\" 'вместо С вы можете использовать букву любого существующего диска в системе lAnswer = GetDiskFreeSpace(lpRootPathName, lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters) lBytesPerCluster = lpSectorsPerCluster * lpBytesPerSector lNumFreeBytes = lBytesPerCluster * lpNumberOfFreeClusters sString = "Number of Free Bytes : " & lNumFreeBytes & vbCr & vbLf sString = sString & "Number of Free Kilobytes: " & (lNumFreeBytes / 1000) & "K" & vbCr & vbLf sString = sString & "Number of Free Megabytes: " & Format(((lNumFreeBytes / 1000) / 1000), "0.00") & "MB" MsgBox sString End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Сергей \(Brains\) Ответ ожидается по этому адресу Как зделать музыку на Visual Basic как на Qbasic (на QBASIC музыка играет оператором Play" "),а каким операторм или какую функцию нужно вызывать в VB Автор вопроса: AlexSoft Ответ ожидается по этому адресу 1. Для просмотра HTML странички к програме прицепил объект WebBrowser. Задаю свойству Navigate полный путь и имя файла. Открывает все нормально. В документе есть ссылки внитри текста. При нажатии на любую из них ругается, что немогу открыть страницу и т.д. (будто ее не существует). Хотя какое-то время назад (как только я начинал делать свою програму) все работало нормально. Что делать. 2. Записываю в фаил строку текста. В нем есть запятые, точки, все как положено. При чтении из фала VB почемуто воспринимает знаки препинания как разделители записей, и , соответственно, они пропадают. Выручайте, мож кто знает. Записываю в фаил по OUTPUT, читаю INPUT. Автор вопроса: Duke Alexandr Ответ ожидается по этому адресу Скажите кто знает, как из визуала открыть фаил Wordом в кодировке DOS, и ещё запустить макрос на обработку, а по окончанию скопировать это всё в Excel и запустить макрос ещё там! Автор вопроса: Юрий Ответ ожидается по этому адресу Увидел в форуме, что столкнулся с аналогичной проблемой, решил спросить, не выяснил как перебросить таблицу из ворда в эксель? Автор вопроса: Nechaev Sergey Ответ ожидается по этому адресу По причинам преплохого качества телефонной линии пришлось сесть за свою звонилку. Загвоздка в следующем: нигде в родных доках не нашел набора АТ команд для моего Acorp Rockvell 56. Толи искал плохо, то ли что... Не мог бы кто-нибудь поделиться инфой или линком (желательно на русском, но не обязательно). А основная пакость в том, что нормально связь работает только при скорости =< 31200. Если больше, надо перезванивать. Дак вот, как узнать скорость на которой произошел коннект. Автор вопроса: timshv@graffiti.net Ответ ожидается по этому адресу Как узнать тип объектной переменной в VB6? Я присваиваю переменной типа Variant объект, например Node или ListItem или ещё какой то, как узнать какого типа в данный момент эта переменная? Автор вопроса: САНЯ Ответ ожидается по этому адресу У меня такой вопрос, я делаю прогу типа проводника, как сделать так чтобы ия List можно было выбрать файл и открыть его. Т.е как ссылаться на объекты ия Васика(ВБ). Автор вопроса: DAEDMEN Ответ ожидается по этому адресу народ не поможетели в такой ситуации :нужна функция которой я даю строку текста и символ (букву,цифру либо спец символ), а она мне возращает слово в котором есть этот знак (не его номер), да и ещё слово может состоять не только из букв, а и из смеси букв, цифр и заков. Автор вопроса: МАЯК Ответ ожидается по этому адресу Подскажите плиз, что такое DataEnvironment (окружение среды), счем его едят, и где его искать. Если можно подробнее. Автор вопроса: RA Ответ ожидается по этому адресу (VB.net) Вопрос такой, мне нужно чтобы программа заменяла в файлах некоторые байты на другие, то есть символы, слова и т.д., не меняя размер файла! к примеру как делают программы закачек, они создают пустые файлы, а потом набивают пустышки на нужные данные, вот и я бы такое сделать хотел, кто поможет советом как это сделать? Автор вопроса: yura Ответ ожидается по этому адресу Как использовать в Basic функцию Rnd для любых символов(букв.цифр) Напешите код. Если кто знает. Автор вопроса: Askar Ответ ожидается по этому адресу Какая API функция меняет региональные настройки Автор вопроса: Sergey Ответ ожидается по этому адресу Как скомпилировать проект, что бы он работал без инсталляции и использования MSVBVM60.DLL (на другом компе)? Автор вопроса: МАЯК Ответ ожидается по этому адресу Еще один вопросик, как в Excele создаются базы данных *.MDB? Автор вопроса: МАЯК Ответ ожидается по этому адресу Люди хелп плиз, проблема вобщем то такая. Написал кое какую прогу, все работало нормально, Вставил в нее код созданный макросам в Excele? теперь при сохранении данных в таблице все идет как надо. При попытке ее открыть после сохранения Excel не запускается, и причем сам Excel висит в меню завершения программ вызываемых Ctrl+Alt+Del. На закрытие Excelя использую такой код " wBook.SaveAs файл' где файл переменная. wBook.Close Set wBook = Nothing ' если Excel запускали мы, то надо бы его закрыть If StartedNew Then exapp.Quit End If Set exapp = Nothing Убираю код написаный макросом все опять нормально работает. В чем проблема? Автор вопроса: Vitaliy A. Tokarev (UkrTop) Ответ ожидается по этому адресу У меня в ХР не выбирается содержимое комбо (окно) по нажатию первой буквы. Может кто чего подскажет? Автор вопроса: Demon Ответ ожидается по этому адресу нужно сделать чтобы прога определяла имя своего файла и место нахождения app.exeName - че то не работае Автор вопроса: Паничев Стас Ответ ожидается по этому адресу Подскажите пожалуйста как в реестр записывать DWORD параметр. Есле не трудно напишите пример пожалуйста. Автор вопроса: Vladimir Ответ ожидается по этому адресу Как определить на каком элементе управления установлен фокус? Желательно с примером. Автор вопроса: Роман Ответ ожидается по этому адресу В прошлом выпуске говорилось о перемещении кнопки в любой место. А как сделать так чтобы она перемещалось но только не залезало на кнопку2 так чтобы и близко не подходила на 50 пикселей??? Автор вопроса: Vir Ответ ожидается по этому адресу Подскажите ссылки где можно найти документацию и исходняки для 3D програмирования DirectX. Если нетрудно киньте на E-Mail исходняки, можно урезая файлы .3ds .x и т.д. Мне нужно именно 3D, а не плоская графика. Ответы: Вопрос: Вопрос 1: Как сделать так,чтобы программу невозможно было выгрузить, а если её выгрузить, то запускалась бы копия программы. Вопрос 2: У меня есть программа. Как сделать так, чтобы она брала данные из внешнего файла (например .txt) и загружала их оттуда (В этом файле должны находиться переменные вместе с данными) Ответ: Автор ответа: amrita Чтобы вместо закрываемой программы запускалась ее копия, достаточно добавить следующий код. Private Sub Form_Unload(Cancel As Integer) cancel=1 Shell (App.Path + "\project1.exe") Cancel = 0 End Sub Здесь app – объект содержащий глобальные свойства VB-приложения, в том числе путь path к нему. Если кодљ будет таким Private Sub Form_Unload(Cancel As Integer) Cancel = 1 End Sub, то окно можно будет закрыть лишь диспетчером задач. Вопрос: Вопрос 1: Как сделать так,чтобы программу невозможно было выгрузить, а если её выгрузить, то запускалась бы копия программы. Вопрос 2: У меня есть программа. Как сделать так, чтобы она брала данные из внешнего файла (например .txt) и загружала их оттуда (В этом файле должны находиться переменные вместе с данными) Ответ: Автор ответа: RaZoom На вопрос номер раз. Форму с таким кодом не возможно выгрузить "стандартными средствами" - ни кнопка Х, ни wm_close на эту форму не подействуют. Но есть Task Manager, по крайней мере в NT, и TerminateProcess :( Кстати на команду End в теле программы Cancel = 1 тоже не действует. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Cancel = 1 'Некоторое условие, при выполнении которого выход, все же допускается. 'У меня просто CheckBox на форме. Если галочка стоит - выходим. If Check1.Value = 1 Then Cancel = 0 End Sub Что касается "... а если её выгрузить, то запускалась бы копия программы", то что-то запустить может либо юзер (который, как я понимаю, этого не хочет), либо система (которая не станет, потому как очень гордая, и её нужно долго просить :), либо другая РАБОТАЮЩАЯ программа. Вопрос: Вопрос 1: Как сделать так,чтобы программу невозможно было выгрузить, а если её выгрузить, то запускалась бы копия программы. Вопрос 2: У меня есть программа. Как сделать так, чтобы она брала данные из внешнего файла (например .txt) и загружала их оттуда (В этом файле должны находиться переменные вместе с данными) Ответ: Автор ответа: Jumanjee Ответ на первый вопрос: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Shell "путь к твоей проге" 'при закрытии запуск заново Unload Me 'выгружаешь эту версию End Sub теперь твою прогу даже по Ctrl-Alt-Del не убрать ;) Ответ на второй вопрос: Open "путь к твоему файлу.txt" For Input As #1 '1 - свободный номер файла Do While Not EOF(1) 'цикл до конца файла #1 Input #1,tmp 'tmp-переменная куда читаешь Loop вариант: вместо Input #1,tmp пишешь LineInput #1,tmp - читает всю строку игнорируя запятые Вопрос: Вопрос 1: Как сделать так,чтобы программу невозможно было выгрузить, а если её выгрузить, то запускалась бы копия программы. Вопрос 2: У меня есть программа. Как сделать так, чтобы она брала данные из внешнего файла (например .txt) и загружала их оттуда (В этом файле должны находиться переменные вместе с данными) Ответ: Автор ответа: Murat Shonov По первому вопросу использовать QueryUnload : Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim I As Integer I = 1 Cancel = I End Sub При таком раскладе форму закрыть невозможно. То есть параметр Cancel не даст выгрузить форму. А параметр UnloadMode показывает каким образом пользователь пытается закрыть твою форму. Там есть константы: vbFormControlMenu (0 - Пользователь закрыл приложение посредством [Alt+F4], кнопки Close (Закрыть) окна или одноименной команды системного меню) vbFormCode (1 - В коде выполняется команда Unload) vbAppWindows (2- Завершение сеанса Windows) vbAppTaskManager (3 - Выход из приложения с помощью менеджера задач) vbFormMDIForm (4 - Дочерняя форма MDI закрыта, так как закрыта вышестоящая форма MDI) Здесь идет название константы и в скобках указывается значение плюс описание того, что подлый пользователь делает с твоей программой. И если не нравится то в процедуре указываешь что надо запустить твою программу. И по второму вопросу там надо пользоваться одним из трех видов доступа к файлам. Первый это последовательный доступ. В какой процедуре ты его будешь использовать неважно. Private Sub Form_Load() Dim intFH As Integer ‘ intFH это дескриптор файла нужен для всех видов доступа т.е. Visual Basic работает не с самим файлом а с его каналом в системе, дескриптор это канал. intFH = FreeFile ‘функция FreeFile возвращает значение пустого канала Open "text.txt" For Input As intFH ‘здесь ты указываешь файл который хочешь открыть и его путь. А также указываешь как тебе надо открыть этот файл Input для чтенияљ Output для записи Append для добавления. Если открываешь файл для Input и файла нет в указанном месте выдается ошибка, остальные просто создадут новый файл. Do Until EOF(intFH) Line Input #intFH, strString ‘Line Input считывает одну строку из файла strText = strText & strString & vbLf Loop Close ‘каждый открытый канал надо обязательно закрывать. Close закрывает все открытые каналы Close intFH закрывает выбранный канал End Sub Для записи используются операторы Print# , Write#. Так же открывается файл и в него через переменную или прямо ручками из кода даешь какие-то данные. Второй вид доступа это - произвольный доступ. Open “text.txt” for Random [Access доступ] [Блокировка] As #intFH [Len = длинна записи] Access – тип доступа, но можно без него там есть Read, Write и Read Write. Для чтения, записи и чтения записи одновременно. Len длинна записи указывается не помню то ли в байтах то ли в символах. Считывание и запись в файл производятся операторами Get #intFH, 7, Address ‘ считывает 7ю запись Put #intFH, 2, Address ‘ записывает 2ю запись И третий вид доступа двоичный Open “text.txt” For Binary [Access доступ] [Блокировка] As #intFH Тоже самое только не random и параметра len нету Считывание и запись точно так же Get #intFH, 7, Address ‘ считывает 7 байт Put #intFH, 2, Address ‘ записывает 2 байт Если надо подробней могу на мыло кинуть Вордовский документ. Вопрос: Хелп плиз, как зделать так, чтоб моя программа повторно не запускалась а при попытке повторного запуска выдала сообщение типа "программа уже запущена" Ответ: Автор ответа: Скуратович Павел Наиболее универсальный способ (чтоб не запускалась даже из разных .exe-файлов): Const ERROR_ALREADY_EXISTS = 183& Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Sub Form_Load() Dim hMutex As Long 'Пробуем создать Mutex hMutex = CreateMutex(ByVal 0&, 1, App.Title) 'Если такой mutex уже существует... If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then 'Чистим за собой ReleaseMutex hMutex CloseHandle hMutex MsgBox "типа, ""программа уже запущена""" End End If End Sub Вопрос: Хелп плиз, как зделать так, чтоб моя программа повторно не запускалась а при попытке повторного запуска выдала сообщение типа "программа уже запущена" Ответ: Автор ответа: Шевченко Александр Private Sub Form_Load() If App.PrevInstance = True Then MsgBox "Программа уже запущена" End End If End Sub Вопрос: Хелп плиз, как зделать так, чтоб моя программа повторно не запускалась а при попытке повторного запуска выдала сообщение типа "программа уже запущена" Ответ: Автор ответа: Jumanjee Вот так будет правильнее 8) ВАЖНОЕ ЗАМЕЧАНИЕ!!!! твоя форма не должна иметь Me.Caption = "постоянное имя формы" присвой ей сначала во свойствах "временное имя"; после запуска проги оно всё равно изменится на "постоянное имя формы". Это сделано для того чтобы первый экземпляр программы не закрывался. Option Explicit Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Sub Form_Activate() Me.Caption = "постоянное имя формы" End Sub Private Sub Form_Load() Dim hnd As Long hnd = FindWindow("ThunderRT6FormDC", "постоянное имя формы") If hnd <> 0 And hnd <> Me.hWnd Then MsgBox ("Программа уже запущена") Unload Me End If End Sub Вопрос: Хелп плиз, как зделать так, чтоб моя программа повторно не запускалась а при попытке повторного запуска выдала сообщение типа "программа уже запущена" Ответ: Автор ответа: amrita Надо просто добавить код: Private Sub Form_Load() If App.PrevInstance Then MsgBox ("Программа уже работает!") Unload Me End If End Sub Вопрос: Хелп плиз, как зделать так, чтоб моя программа повторно не запускалась а при попытке повторного запуска выдала сообщение типа "программа уже запущена" Ответ: Автор ответа: RaZoom 'Примерно вот так: Private Sub Form_Load() If App.PrevInstance = True Then MsgBox "Программа уже запущена.", vbOKOnly Or vbExclamation Unload Form1 End If End Sub Вопрос: Хелп плиз, как зделать так, чтоб моя программа повторно не запускалась а при попытке повторного запуска выдала сообщение типа "программа уже запущена" Ответ: Автор ответа: Jumanjee Option Explicit Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Sub Form_Activate() Me.Caption = "MyApplication" End Sub Private Sub Form_Load() Dim hnd As Long hnd = FindWindow("ThunderRT6FormDC", "MyApplication") If hnd <> 0 And hnd <> Me.hWnd Then Unload Me End If End Sub Вопрос: Люди, подскажите пожалуйста, ломаю голову какой код вписать, чтоб при нажатии на кнопку, программа проверила наличие файла в директории и при его наличии в строке имя файла отобразилось имя того же файла только с еденицей, при наличии файла с еденицей предложила вариант с двойкой, вобщем как в WORDE, а при попытке сохранить файл под имеющемся именем, выдала системное сообщение "файл с таким именем уже есть, хотите его заменить?. Я сделал так а дальше незнаю.... Private Sub ShowSave() Объявил две переменные файл_пом и Файл_библиотека. On Error GoTo ErrorHandler CommonDialog1.CancelError = True CommonDialog1.Filter = "All Files (*.*)|*.*|Word Documents (*.doc )|*.doc |Text Files (*.txt)|*.txt|" CommonDialog1.FilterIndex = 3 CommonDialog1.InitDir = "D:\DOCUMENTS" 'CommonDialog1.Flags = cdlOFNFileMustExist Or cdlOFNAllowMultiselect CommonDialog1.Action = 2 Файл_библиотека = App.Path + "\Sveden1.ph" ' файл *.bib *-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-* файл_пом = CMDialog1.FileName 'придаем переменной файл_пом, адрес места 'расположения файла с данными адреса расположения файла *.bib If Dir(файл_пом) = "" Then 1 '*********** 'Здесь мой код. '********** Exit Sub ErrorHandler: If Err.Number = 32755 Then Exit Sub Else If MsgBox("Заменить существующий файл" & " " & " " & файл_пом, vbYesNo + vbExclamation, "Выход?") = vbYes Then GoTo 1001 Else Exit Sub End If End Sub End Sub '.FileName ( .Font, .Color, .FromPage, .ToPage, .Copies, .Orientation) Ответ: Автор ответа: Александр Горбылёв Я бы предпочёл использовать FSO. Для этого надо установить ссылку ("Project"->"References") на "Microsoft Scripting Runtime". Классы объектов, которые входят в состав FSO: CreateObject Function Dictionary Object Drive - класс для работы с устройствами системы, такими как жесткий диск, CD-ROM, логический диск и т.п. Drives Collection Folder - класс для работы c папками: создание, удаление, чтение, установка атрибутов File Object - класс для работы c файлами: создание, удаление, чтение, установка атрибутов файлов FileSystemObject - базовый класс системы, на основе которого построены другие классы Files Collection Folder Object Folders Collection TextStream - специальный класс для работы с текстовыми файлами Использование системы FSO состоит из трех этапов: 1. Создание объекта системы FSO 2. Настройка требуемых методов объекта FSO 3. Настройка доступных свойств объекта FSO Создать объект FSO можно объявлением переменной типа FSO: Dim oFSO As New FileSystemObject Для создания объекта можно использовать следующий оператор: Set oFSO = CreateObject("Scripting.FileSystemObject") Вот пример получения коллекции файлов папки и её обхода с помощью оператора For Each...Next: Function ShowFolderList(folderspec) Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(folderspec) Set fc = f.Files For Each f1 in fc s = s & f1.name & vbCrLf Next ShowFolderList = s End Function Остальное - в MSDN (ищем FileSystemObject Object). Вопрос: Люди, подскажите пожалуйста, ломаю голову какой код вписать, чтоб при нажатии на кнопку, программа проверила наличие файла в директории и при его наличии в строке имя файла отобразилось имя того же файла только с еденицей, при наличии файла с еденицей предложила вариант с двойкой, вобщем как в WORDE, а при попытке сохранить файл под имеющемся именем, выдала системное сообщение "файл с таким именем уже есть, хотите его заменить?. Я сделал так а дальше незнаю.... Private Sub ShowSave() Объявил две переменные файл_пом и Файл_библиотека. On Error GoTo ErrorHandler CommonDialog1.CancelError = True CommonDialog1.Filter = "All Files (*.*)|*.*|Word Documents (*.doc )|*.doc |Text Files (*.txt)|*.txt|" CommonDialog1.FilterIndex = 3 CommonDialog1.InitDir = "D:\DOCUMENTS" 'CommonDialog1.Flags = cdlOFNFileMustExist Or cdlOFNAllowMultiselect CommonDialog1.Action = 2 Файл_библиотека = App.Path + "\Sveden1.ph" ' файл *.bib *-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-* файл_пом = CMDialog1.FileName 'придаем переменной файл_пом, адрес места 'расположения файла с данными адреса расположения файла *.bib If Dir(файл_пом) = "" Then 1 '*********** 'Здесь мой код. '********** Exit Sub ErrorHandler: If Err.Number = 32755 Then Exit Sub Else If MsgBox("Заменить существующий файл" & " " & " " & файл_пом, vbYesNo + vbExclamation, "Выход?") = vbYes Then GoTo 1001 Else Exit Sub End If End Sub End Sub '.FileName ( .Font, .Color, .FromPage, .ToPage, .Copies, .Orientation) Ответ: Автор ответа: Dimmer 'Функция GenerateFileName 'генерирует имя файла в заданном каталоге sDir 'вида sNameTemplate0001.ext, sNameTemplate0002.ext, .. sNameTemplate9999.ext Public Function GenerateFileName(ByVal sDir As String, ByVal sNameTemplate As String) As String Dim oFSO As New FileSystemObject Dim sFileName As String Dim iCounter As Integer 'Последовательно генерируем имена файлов и проверяем на их наличие в заданном каталоге iCounter = 1 Do sFileName = oFSO.BuildPath(sDir, _ oFSO.GetBaseName(sNameTemplate) & Format(iCounter, "000#") & "." & oFSO.GetExtensionName(sNameTemplate)) iCounter = iCounter + 1 Loop While oFSO.FileExists(sFileName) GenerateFileName = sFileName End Function Вопрос: Люди, подскажите пожалуйста, ломаю голову какой код вписать, чтоб при нажатии на кнопку, программа проверила наличие файла в директории и при его наличии в строке имя файла отобразилось имя того же файла только с еденицей, при наличии файла с еденицей предложила вариант с двойкой, вобщем как в WORDE, а при попытке сохранить файл под имеющемся именем, выдала системное сообщение "файл с таким именем уже есть, хотите его заменить?. Я сделал так а дальше незнаю.... Private Sub ShowSave() Объявил две переменные файл_пом и Файл_библиотека. On Error GoTo ErrorHandler CommonDialog1.CancelError = True CommonDialog1.Filter = "All Files (*.*)|*.*|Word Documents (*.doc )|*.doc |Text Files (*.txt)|*.txt|" CommonDialog1.FilterIndex = 3 CommonDialog1.InitDir = "D:\DOCUMENTS" 'CommonDialog1.Flags = cdlOFNFileMustExist Or cdlOFNAllowMultiselect CommonDialog1.Action = 2 Файл_библиотека = App.Path + "\Sveden1.ph" ' файл *.bib *-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-* файл_пом = CMDialog1.FileName 'придаем переменной файл_пом, адрес места 'расположения файла с данными адреса расположения файла *.bib If Dir(файл_пом) = "" Then 1 '*********** 'Здесь мой код. '********** Exit Sub ErrorHandler: If Err.Number = 32755 Then Exit Sub Else If MsgBox("Заменить существующий файл" & " " & " " & файл_пом, vbYesNo + vbExclamation, "Выход?") = vbYes Then GoTo 1001 Else Exit Sub End If End Sub End Sub '.FileName ( .Font, .Color, .FromPage, .ToPage, .Copies, .Orientation) Ответ: Автор ответа: Jumanjee Присоединяешь к проекту Microsoft Scripting Runtime В твоей проге я не разбирался но я сделал бы так Option Explicit Dim FSO As New FileSystemObject 'присоединяем FileSystemObject Private Sub Rename(file As String) 'пусть в переменной file 'лежит полный путь к 'файлу Dim n As Integer Dim tmp as String n=1 Do If FSO.FileExists(file)=False Then 'если файла с таким **сохраняешь свой файл** 'именем нет Exit Do End If file=Replace (file,".",Str(n)+".") 'меняем имя файла n=n+1 Loop End Sub Вопрос: Как мне по имеющемуся пути осуществить перебор всех файлов, находящихся в данной конкретной папке (исключая подпапки). Есть ли такая вояможность в VB6 или какими функциями API необходимо польяоваться? Ответ: Автор ответа: Vlad Перебор всех файлов TXT и заполнение ComboBox: Sub FillDownFiles(ByVal StartPath As String, ByRef Ctr As ComboBox) Dim D(), Count, XDir StartPath = StartPath + IIf(Right(StartPath, 1) <> "\", "\", "") XDir = Dir(StartPath, vbDirectory) Count = 0 Do While XDir <> "" If XDir <> "." And XDir <> ".." Then If (GetAttr(StartPath + XDir) And vbDirectory) = vbDirectory Then If (Count Mod 10) = 0 Then ReDim Preserve D(Count + 10) End If Count = Count + 1 D(Count) = XDir Else If Right(XDir, 4) = ".TXT" Then Ctr.AddItem StartPath + XDir End If End If End If XDir = Dir Loop For I = 1 To Count FillDownFiles StartPath + D(I) + "\", Ctr Next I End Sub Вопрос: Как мне по имеющемуся пути осуществить перебор всех файлов, находящихся в данной конкретной папке (исключая подпапки). Есть ли такая вояможность в VB6 или какими функциями API необходимо польяоваться? Ответ: Автор ответа: Jumanjee Есть такая возможность :) Private Function ListFile(directory As String) As String Static flag As Boolean If flag = False Then ListFile = Dir(directory) flag = True Else ListFile = Dir() End If If ListFile = "" Then ListFile = "В этой папке файлов больше нет" flag = False End Sub Вопрос: Как мне по имеющемуся пути осуществить перебор всех файлов, находящихся в данной конкретной папке (исключая подпапки). Есть ли такая вояможность в VB6 или какими функциями API необходимо польяоваться? Ответ: Автор ответа: Александр Горбылёв Я бы предпочёл использовать FSO. Для этого надо установить ссылку ("Project"->"References") на "Microsoft Scripting Runtime". Классы объектов, которые входят в состав FSO: CreateObject Function Dictionary Object Drive - класс для работы с устройствами системы, такими как жесткий диск, CD-ROM, логический диск и т.п. Drives Collection Folder - класс для работы c папками: создание, удаление, чтение, установка атрибутов File Object - класс для работы c файлами: создание, удаление, чтение, установка атрибутов файлов FileSystemObject - базовый класс системы, на основе которого построены другие классы Files Collection Folder Object Folders Collection TextStream - специальный класс для работы с текстовыми файлами Использование системы FSO состоит из трех этапов: 1. Создание объекта системы FSO 2. Настройка требуемых методов объекта FSO 3. Настройка доступных свойств объекта FSO Создать объект FSO можно объявлением переменной типа FSO: Dim oFSO As New FileSystemObject Для создания объекта можно использовать следующий оператор: Set oFSO = CreateObject("Scripting.FileSystemObject") Вот пример получения коллекции файлов папки и её обхода с помощью оператора For Each...Next: Function ShowFolderList(folderspec) Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(folderspec) Set fc = f.Files For Each f1 in fc s = s & f1.name & vbCrLf Next ShowFolderList = s End Function Остальное - в MSDN (ищем FileSystemObject Object). Вопрос: Что такое ScaleWidth и ScaleHeight? Чем отличаются от Width и Height? Ответ: Автор ответа: Jumanjee Показывают размер объекта в единицах указанных в ScaleMode Вопрос: Что такое ScaleWidth и ScaleHeight? Чем отличаются от Width и Height? Ответ: Автор ответа: RaZoom 1. Width и Height содержат размеры всего окна, а ScaleWidth и ScaleHeight - только клиентской области (без заголовка окна и рамки). 2. Width и Height всегда измеряются в Twip'ах, а ScaleWidth и ScaleHeight - в зависимости от свойства ScaleMode. Twip - логическая единица, обычно равная 1/15 px на экране и всегда равная 1/1440 дюйма на любом устройстве. Вопрос: Работаю с Win 5.0 у меня программа ассоциирована к расширению .zzz Я хочу уянать полный путь к программе которая накодится в командной строке. Я делаю это с помощью Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As String Под win9x все нормально,но под NT происход крах программы. Есть ли артальнотива это функции или другой способ яделать это ? Ответ: Автор ответа: ViTal Попробуй средствами VB - используй функцию Command$. Вопрос: Почему в VB6 на WinXP не работают такие функции API как - ChangeDisplaySettings и ExitWindowsEx? Тот же код, но на ос Win9X, работает. Ответ: Автор ответа: ViTal Это потому, что АПИ функции со временем устаревают. Выходят новые операционки, в них появляются новые АПИ функции (взамен старым) - более быстрые, более универсальные (про стабильность промолчу :-)). Так вот МокроСофт старые функции из новых операционок выбрасывает не сразу, а лишь спустя какой-то период времени, как бы давая возможность программистам перейти на использование новых функций, после чего полностью прекращает их (функций) поддержку. Всю информацию о той или иной АПИ функции можешь посмотреть в MSDN (http://msdn.microsoft.com/). Вопрос: Каким образом можно из VB получать и обрабатывать системные события Windows ! Например, читать клавиатуру. Ответ: Автор ответа: Vir Системных событий очень много, а вот читать клавиатуру вне программы 'Модуль Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Public Const VK_TAB = &H9 ' Константа для TAB key.Для других кнопок посмотрите в API вьювере 'Программа If GetAsyncKeyState(VK_TAB) Then msgboх "Кто то трогает ТАБ", vbinformation Вопрос: Как в VB яавершить работу приложения Windows? Ответ: Автор ответа: RaZoom 'FindTopWindow определяет самого верхнего родителя для окна, 'чей дескриптор передается в качестве параметра. Надо, чтобы не убить 'какую-нибудь кнопку, но, в принципе, это не обязательно ;) Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const WM_CLOSE = &H10 Private Sub btnClose_Click() If hwdCurWindow = FindTopWindow(hwdCurWindow) Then SendMessage hwdCurWindow, WM_CLOSE, 0, 0 hwdCurWindow = 0 End If End Sub Public Function FindTopWindow(ByVal hw As Long) As Long Dim NewHwnd As Long NewHwnd = GetParent(hw) While NewHwnd <> 0 hw = NewHwnd NewHwnd = GetParent(hw) Wend FindTopWindow = hw End Function Вопрос: Как сделать всплывающую подсказку (ToolTipText)в 2 и более строк? Ответ: Автор ответа: Скуратович Павел Установить себе Windows 2000/XP/что_там_ещё_есть и использовать vbCrLf 8-) Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |