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

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


Информационный Канал Subscribe.Ru

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

Выпуск № 155
от 10.10.2004, 18:40

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 327
Отправлено ответов: 282
Активность: 86.23 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Puma
Статус: Профессиональный
Общий рейтинг: 103.14
[Подробней >>]
Licvidator
Статус: Профессиональный
Общий рейтинг: 107.29
URL: PC Info
[Подробней >>]
Miklucho
Статус: Доверительный
Общий рейтинг: 108.83
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 326. Здраствуйте уважаемые эксперты!!! У меня есть несколько вопросов на которые хотел бы знат ответ. Во-... (ответов: 3)

Вопросов: 1, ответов: 3


 Вопрос № 326

Здраствуйте уважаемые эксперты!!!
У меня есть несколько вопросов на которые хотел бы знат ответ. Во-первых как узнать свободное место на разделах жесткого диска? Потом уже поднадоевшая мне проблема: как по заданому пути определить есть ли там например папка ну скажем ВАСЯ, а если есть то например записать в нее файл какой-то. И еще как узнать вообще есть ли по заданому пути в папке файлы. Потом хочу узнать как програмным методом вырезать и вставлять файлы. Как на ВБ переименовываются файлы и папки. И последнее. Я свои готовые программы запаковываю Winrar 3.3 потом я руками прописываю программу в установке и удалении программ, экспортирую оттуда файл реестра а потом попросту его запускаю. Знаю это непрофессионально. Слышал есть программы которые запаковывают программы и прописуют также в реестр. Пожалуйста посоветуйте какую нибудь русскую програмку для такой упаковки. У меня есть прога _ISDELL она из 5-го Делфи но она английская :-( Да кс тати впомнил в ВБ тоже ведь есть мастер создания инсталляционного варианта. Но он у меня викидывает какую-то ошибку. Я вас очень прошу помогите разобраться во всех этих вопросах или некоторых. Я вам чесно скажу весь прошлый год я учил С++ в универе(причем достаточно нормально) и в ВБ почти не шарю пожалуйста присылайте мне коды если не трудно :-). И еще вспомнил в С++ была команда перехода на новую строчку какой аналог есть на ВБ ? А то у меня есть такая проблемма в message box. Заранее спасибо за ответы.



Вопрос отправлен: 07.10.2004, 02:12
Отправитель: Евгений (408b@ukr.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Puma

Добрый день, Евгений!
Ну, что ж. При определении свободного места на диске можно обойтись и без FSO.
Это требует знание типов данных ВБ и немножко ловкости.
Приведу пример как я решил эту проблему. Тогда я не знал про FSO, но у меня была книга Эпплмана "Visual Basic и Win32API", в которой эта проблема было решена отличным от предлагаемых нами способов.
Итак, пример.
Создаем класс с именем (свойство Name) LongInt.
Помещаем в окно кода следующие строки:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
lpDest As Any, _
lpSourse As Any, _
ByVal cbCopy As Long)
Private Type LARGE_INTEGER
lngLowWord As Long
lngHiWord As Long
End Type
Private Type LARGE_INTEGER_DEC
decLowWord As Variant
decHiWord As Variant
End Type
Private Type LARGE_INTEGER_CUR
curLowWord As Currency
curHiWord As Currency
End Type
Pr ivate li As LARGE_INTEGER
Private LID As LARGE_INTEGER_DEC
Private LIC As LARGE_INTEGER_CUR
Private mvarПрямойПорядокВ64Разрядах As Boolean 'local copy
Public Property Let ПрямойПорядокВ64Разрядах(ByVal Значение As Boolean)
mvarПрямойПорядокВ64Разрядах = Значение
End Property
Public Property Get ПрямойПорядокВ64Разрядах() As Boolean
ПрямойПорядокВ64Разрядах = mvarПрямойПорядокВ64Разрядах
End Property
Public Function LongTo64Digits(Sou1 As Long, Sou2 As Long) As Variant
If mvarПрямойПорядокВ64Разрядах Then
li.lngHiWord = Sou1
li.lngLowWord = Sou2
Else
li.lngHiWord = Sou2
li.lngLowWord = Sou1
End If
'LIC.curLowWord = ДлинноеКДенежному(li.lngLowWord)
'LIC.curHiWord = ДлинноеКДенежному(li.lngHiWord)
'LID.decLowWord = CDec(LIC.curLowWord)
'LID.decHiWord = CDec(LIC.curHiWord)
LID.decLowWord = LongToDecimal(li.lngLowWord)
LID.decHiWord = LongToDecimal(li.lngHiWord)
LID.decHiWord = LID.de cHiWord * 2 ^ 32
LongTo64Digits = LID.decHiWord + LID.decLowWord
End Function
Public Function LongToDecimal(Value As Long) As Variant
Dim Temp As Long
Dim varTemp As Variant

Temp = CDec(Value)
LongToDecimal = CDec(LongToDecimal)
If Temp < 0 Then
varTemp = 2 ^ 32 - 1 + Temp
Else
varTemp = Temp
End If
LongToDecimal = varTemp
End Function
Private Sub Class_Initialize()
mvarПрямойПорядокВ64Разрядах = True
End Sub
Создаем форму. Помещаем на нее контрол Drive с именем Drive1
и контрол Label с именем Label1.
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" _
(ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As LARGE_INTEGER, _
lpTotalNumbersOfBytes As LARGE_INTEGER, lpTotalNumbersOfFreeBytes As LARGE_INTEGER) As Long
Private Sub Drive1_Change()
Dim Temp As Long
Dim FreeBytesUser As LARGE_INTEGER
Dim FreeBytes As LARGE_I NTEGER
Dim TotalBytes As LARGE_INTEGER
Dim varFreeBytesUser As Variant
Dim varFreeBytes As Variant
Dim varTotalBytes As Variant
Temp = GetDiskFreeSpaceEx(Left$(Drive1.Drive, 2), FreeBytesUser, TotalBytes, FreeBytes)
Debug.Print Drive1.Drive
Debug.Print "Свободно для пользователя: "
Debug.Print vbTab & "Hi: " & FreeBytesUser.lngHiWord
Debug.Print vbTab & "Low: " & FreeBytesUser.lngLowWord
Debug.Print "Свободно: "
Debug.Print vbTab & "Hi: " & FreeBytes.lngHiWord
Debug.Print vbTab & "Low: " & FreeBytes.lngLowWord
Debug.Print "Всего: "
Debug.Print vbTab & "Hi: " & TotalBytes.lngHiWord
Debug.Print vbTab & "Low: " & TotalBytes.lngLowWord
varFreeBytes = LongTo64Digits(FreeBytes.lngHiWord, FreeBytes.lngLowWord)
varFreeBytesUser = LongTo64Digits(FreeBytesUser.lngHiWord, FreeBytesUser.lngLowWord)
varTotalBytes = LongTo64Digits(TotalBytes.lngHi Word, TotalBytes.lngLowWord)
Label1.Caption = "Свободно для пользователя: " & varFreeBytesUser & vbCrLf & _
"Свободно всего: " & varFreeBytes & vbCrLf & _
"Всего: " & varTotalBytes
DiskInfo Left$(Drive1.Drive, 2)
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then Unload DiskSize
End Sub
Private Sub Form_Load()
Drive1_Change
End Sub
Sub DiskInfo(strDrive As String)
Dim Temp As Long
Dim FreeBytesUser As LARGE_INTEGER
Dim FreeBytes As LARGE_INTEGER
Dim TotalBytes As LARGE_INTEGER
Dim varFreeBytesUser As Variant
Dim varFreeBytes As Variant
Dim varTotalBytes As Variant
Temp = GetDiskFreeSpaceEx(strDrive, FreeBytesUser, TotalBytes, FreeBytes)
varFreeBytes = LongTo64Digits(FreeBytes.lngHiWord, FreeBytes.lngLowWord)
varFreeBytesUser = LongTo64Digits(FreeBytesUser.lngHiWord, FreeBytesUser.lngLowWord)
varTotalBytes = LongTo64Digits(TotalB ytes.lngHiWord, TotalBytes.lngLowWord)
Debug.Print "Диск: " & strDrive & vbCrLf & _
"Свободно для пользователя: " & varFreeBytesUser & vbCrLf & _
"Свободно всего: " & varFreeBytes & vbCrLf & _
"Всего: " & varTotalBytes
End Sub
Насчет установки. Можно воспользоваться программой Install Sheild Express. Правда она на английском языке. Но там все понятно и без перевода. Выбираешь проект ВБ. А дальше настроиваешь сами диалоги установки.
Можно уставку сделать и из WinRar. Создать sfx-архив и в нем прописать сценарий распаковки (см. справку WinRAR), в котором написать что нужно делать.
Так же могу посоветовать оформлять код, которым часто придеться пользоваться в виде фукнций в отдельных модулях, например, в одном работа с файлами, в другом поиск, сортировка данных, и т.д.
Приведу некоторые функции для работы с файлами.
Определение существования файла или каталога с заданным именем
Public Function FileExists( ИмяФайла As String, Optional attrib As VbFileAttribute = vbNormal) As Boolean
If Dir$(ИмяФайла, attrib) <> "" Then
FileExists = True
Else
FileExists = False
End If
End Function


Ответ отправлен: 07.10.2004, 18:36
Отправитель: Puma


Отвечает Licvidator

Добрый день, Евгений!
1. Подключите Microsoft Scripting Runtime (через Проект - Информация). Далее пишите след. код:

Dim s As New Scripting.FileSystemObject
Dim d As Drive
Text1 = "Drive" & vbTab & " Free space " & vbCrLf
MousePointer = vbHourglass
For Each d In s.Drives
DoEvents
If d.IsReady Then
Text1 = Text1 & d.DriveLetter & vbTab & _
d.FreeSpace & vbCrLf
Else
Text1 = Text1 & d.DriveLetter & vbTab & _
"Not Ready." & vbCrLf
End If
Next d


2.
Dim path As String
path = "c:\windows"
If Dir(path, vbDirectory) <> "" Then
'Если папка c:\windows существует, то создаем файл
Open path & "\test.txt" For Output As #1
Print #1, "привет"
Close #1
End If


3. Чтобы узнать о существовании файлов в конкретной папке - читайте про ф-ию Dir в справке (MSDN).
4. FileCopy path, new_path - копи рование файлов/папок
Kill path - удаление файлов/папок
Name old_name As new_name - переименование файлов/папок
5. vbCrLf - перевод на новую строку.
6. Насчет упаковщика - ничем помочь не могу, в свое вермя я сам писал инсталляционный пакет, чего и Вам советую. Заодно получите очередной навык с работой в ВБ. Если нужна будет помощь при работе с реестом (программно) - обращайтесь.
Удачи!

Ответ отправлен: 07.10.2004, 13:35
Отправитель: Licvidator


Отвечает Miklucho

Приветствую Вас, Евгений!
Насчет перехода на новую строчку - вставляешь в строку ASCII-код символа перевода(13) и все.
#: msgbox "Привет" & chr(13) & "Евгений". После этого "Евгений" будет на второй строке.
Насчет программ инсталляторов - поищи в Инете, они почти наверняка коммерческие, но должны и триальные версии.

Ответ отправлен: 08.10.2004, 10:59
Отправитель: Miklucho



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (28)
C / C++ (16)
Perl (7)
Builder / Delphi (16)
Pascal (20)
Basic / VBA (9)
Java / JavaScript (7)
PHP (18)
Криптография (10)
WinAPI (14)
Радиоэлектроника (17)
Пользователю
Windows 95/98/Me (44)
Windows NT/2000/XP (61)
"Железо" (38)
Поиск информации (22)
Администратору
Windows NT/2000/XP (42)
Linux / Unix (18)
Юристу
Гражданское право (8)
Семейное право (5)
Трудовое право (7)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


hotlog_js="1.0";hotlog_d=document; hotlog_n=navigator;hotlog_rn=Math.random(); hotlog_n_n=(hotlog_n.appName.substring(0,3)=="Mic")?0:1; hotlog_r=""+hotlog_rn+"&s=25513&im=127&r="+escape(hotlog_d.referrer)+"&pg="+ escape(window.location.href); hotlog_d.cookie="hotlog=1"; hotlog_r+="&c="+(hotlog_d.cookie?"Y":"N"); hotlog_d.cookie="hotlog=1; expires=Thu, 01-Jan-70 00:00:01 GMT" hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2";hotlog_s=screen; hotlog_r+="&wh="+hotlog_s.width+'x'+hotlog_s.height+"&px="+((hotlog_n_n==0)? hotlog_s.colorDepth:hotlog_s.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; hotlog_d.write("HotLog") Яндекс цитирования
© 2001-2004 Россия, Москва. Идея, дизайн, программирование: Калашников О.А. ICQ: 68951340
При перепечатке материалов ссылка на данный сайт обязательна!

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.basicvba
Отписаться

В избранное