← Март 2002 → | ||||||
2
|
3
|
|||||
---|---|---|---|---|---|---|
5
|
6
|
7
|
9
|
10
|
||
12
|
13
|
14
|
16
|
17
|
||
19
|
20
|
21
|
23
|
24
|
||
26
|
27
|
28
|
30
|
31
|
За последние 60 дней ни разу не выходила
Сайт рассылки:
http://vbnet.ru
Открыта:
31-07-2001
VBNet
VBMania
Голосование: Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты. Нет тем. Доска почёта: Sergey Y. Tkachev Кононенко Роман Kirill Sergey Sapozhnikov Sobic Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Поздравляю всех женщин с Международным женским днём!!!
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Получить размер файла Получить размер файлаРазмер файла можно определить двумя путями: 1. Если файл можно открыть функцией OPEN, то можно воспользоваться функцией LOF Dim FileFree As Integer 2. Используя функцию FileLen Dim lFileSize As Long 3. Используя FileSystemObject Для использования этого примера установите ссылку на Microsoft Scripting Runtime через меню Project | References. Dim FSys As New FileSystemObject Сравнить два файла на идентичность Private Sub Form_Load() 'замените пути файлов, которые вы хотите сравнить Open "C:\1\convert1bmp.htm" For Binary As #1 Open "C:\1\convert2bmp.htm" For Binary As #2 issame% = True If LOF(1) <> LOF(2) Then issame% = False Else whole& = LOF(1) \ 10000 part& = LOF(1) Mod 10000 buffer1$ = String$(10000, 0) buffer2$ = String$(10000, 0) start& = 1 For X& = 1 To whole& Get #1, start&, buffer1$ Get #2, start&, buffer2$ If buffer1$ <> buffer2$ Then issame% = False Exit For End If start& = start& + 10000 Next buffer1$ = String$(part&, 0) buffer2$ = String$(part&, 0) Get #1, start&, buffer1$ Get #2, start&, buffer2$ If buffer1$ <> buffer2$ Then issame% = False End If Close If issame% Then MsgBox "Файлы идентичны", 64, "Info" Else MsgBox "Файлы НЕ идентичны", 16, "Info" End If End Sub наверх Копирование, перемещение, удаление файла 'Копирование файла Private
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal
lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long)
As Long 'Перемещение файла Private Declare Function MoveFile Lib "kernel32" Alias
"MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String)
As Long 'Удаление файла Private Declare Function DeleteFile Lib "kernel32"
Alias "DeleteFileA" (ByVal lpFileName As String) As Long Как получить имя файла или его расширение, зная полный путь файла Использование функции простое. В качестве переменной sFullPath задается полный путь файла, в качестве point задается разделитель: "\" - если вы хотите получить имя файла, "." - если вы хотите получить расширение файла. Private Function Spliting(sFullPath As String, point As String) Dim str1() As String str1 = Split(sFullPath, point) Spliting = str1(UBound(str1)) End Function наверх Сохранение rtf-файла в htm-файл Расположите на форме элемент RichTextBox (подключается через меню Project | Components - Microsoft Rich Textbox Control 6.0) а также CommandButton. Private Sub Command1_Click() 'присваиваем переменной содержимое RichTextBox1 Dim txt As String txt = RichTextBox1.Text 'переменная для хранения htm-файла Dim a As String a = "<html>" & vbCrLf & "<head>" & vbCrLf & "<title>Заголовок</title>" & vbCrLf & "</head>" & vbCrLf & "<body>" a = a & vbCrLf & "<pre>" & txt & "</pre>" & vbCrLf & "</body>" & vbCrLf & "</html>" 'сохранение в htm-файл Dim FN As Integer FN = FreeFile Dim FName As String FName = "C:\index.htm" Open FName For Output As #FN Print #FN, a Close #FN End Sub Private Sub Form_Load() 'загрузка файла RichTextBox1.FileName = "C:\Мои документы\1.rtf" End Sub наверх Изменение атрибутов файла Далее следуют несколько примеров с изменением атрибутов файла "Только чтение" и "Архивный". Переменная strFileName содержит полный путь к файлу 'Очистить атрибут "Только чтение" SetAttr strFileName, GetAttr(strFileName) And (Not vbReadOnly) 'Очистить атрибут "Архивный" SetAttr strFileName, GetAttr(strFileName) And (Not vbArchive) 'Поставить атрибут "Только чтение" SetAttr strFileName, vbReadOnly 'Поставить атрибут "Архивный" SetAttr strFileName, vbArchive
Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автор: Шатрыкин Иван. Соавтор: Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Dmitriy S. Ответ ожидается по этому адресу У меня 2 вопроса: 1.Подскажите, как на VB определить папку(путь), где стоит система? 2.Можно ли на VB отключать яаставку Windows в свойствах экрана? Автор вопроса: Саша Ответ ожидается по этому адресу Где взять книгу по API функциям Или хороший материалл с примерами хорошо бы все это на русском языке Автор вопроса: Лозовой Александр Ответ ожидается по этому адресу Как с помощью API функций определить текущую(не 14400,28600 или 33600, а именно точную) скорость интернета? Автор вопроса: A.C. Ответ ожидается по этому адресу Создается удаленная компонента ActiveX (сервер) Xserver, состоящая из одного класса Xclass, при инициализации которого создается ссылка на существующий экземпляр Excel(открытый пользователем файл) для "отлова" событий: Private WithEvents A As Excel.Application Private Sub Class_Initialize() Set A = GetObject(, "Excel.Application") End Sub Инициализация производится удаленно клиентом: Dim Obj As Object Private Sub Command1_Click() Set Obj = CreateObject(" Xserver.Xclass", "Myserver") End Sub На одном компе все без изменений работает!! Но при удаленной инициализации строка Set A = GetObject(, "Excel.Application") говорит "Error 91". Если к примеру, добавить перед ней Dim B As Excel.Application Set B = New Excel.Application то все в порядке, но не то, что нужно, т.к это ссылка на созданый нами экземпляр, а не на внешний! В чем проблема? Удаленный сервер не видит процесс Excel-я? Почему на одном компе все работает а в сети нет? Автор вопроса: Олег Веретенников Ответ ожидается по этому адресу Необходимо построить граф по данным корреляционной матрицы и отобразить его на экране в виде вершин и ребер. Нужен алгоритм или идеи, как это сделать. Автор вопроса: CD Ответ ожидается по этому адресу Подскажите, как засунуть картинки в DLL и как с ними потом работать (т.е.выдёргивать из этой же DLL-ки). Автор вопроса: selja obltv Ответ ожидается по этому адресу Надо в MS Flex Grid сделать авто скрол (текущая позиция всегда видна). Ответы: Вопрос: Возможна ли одновременная работа в одной программе двух Winsock ,один работает на приём сообщений (так сказать в режиме ожидания сообщений)а второй на отправку сообщений ? Ответ: Автор ответа: Игорь В принципе да, но если они настроены на одинаковый порт, могут возникнуть сбои. Вопрос: Возможна ли одновременная работа в одной программе двух Winsock ,один работает на приём сообщений (так сказать в режиме ожидания сообщений)а второй на отправку сообщений ? Ответ: Автор ответа: Sergey Y. Tkachev Слушай, а что тебе мешает??? Прочитай самое-самое начало любого выпуска рассылки. Там написано: Господа, читайте MSDN!!! Вот выдержка (Благополучно работают два сокета): To create a TCP server Create a new Standard EXE project. Change the name of the default form to frmServer. Change the caption of the form to "TCP Server." Draw a Winsock control on the form and change its name to tcpServer. Add two TextBox controls to the form. Name the first txtSendData, and the second txtOutput. Add the code below to the form. Private Sub Form_Load() ' Set the LocalPort property to an integer. ' Then invoke the Listen method. tcpServer.LocalPort = 1001 tcpServer.Listen frmClient.Show ' Show the client form. End Sub Private Sub tcpServer_ConnectionRequest _ (ByVal requestID As Long) ' Check if the control's State is closed. If not, ' close the connection before accepting the new ' connection. If tcpServer.State <> sckClosed Then _ tcpServer.Close ' Accept the request with the requestID ' parameter. tcpServer.Accept requestID End Sub Private Sub txtSendData_Change() ' The TextBox control named txtSendData ' contains the data to be sent. Whenever the user ' types into the textbox, the string is sent ' using the SendData method. tcpServer.SendData txtSendData.Text End Sub Private Sub tcpServer_DataArrival _ (ByVal bytesTotal As Long) ' Declare a variable for the incoming data. ' Invoke the GetData method and set the Text ' property of a TextBox named txtOutput to ' the data. Dim strData As String tcpServer.GetData strData txtOutput.Text = strData End Sub The procedures above create a simple server application. However, to complete the scenario, you must also create a client application. To create a TCP client Add a new form to the project, and name it frmClient. Change the caption of the form to TCP Client. Add a Winsock control to the form and name it tcpClient. Add two TextBox controls to frmClient. Name the first txtSend, and the second txtOutput. Draw a CommandButton control on the form and name it cmdConnect. Change the caption of the CommandButton control to Connect. Add the code below to the form. Important Be sure to change the value of the RemoteHost property to the friendly name of your computer. Private Sub Form_Load() ' The name of the Winsock control is tcpClient. ' Note: to specify a remote host, you can use ' either the IP address (ex: "121.111.1.1") or ' the computer's "friendly" name, as shown here. tcpClient.RemoteHost = "RemoteComputerName" tcpClient.RemotePort = 1001 End Sub Private Sub cmdConnect_Click() ' Invoke the Connect method to initiate a ' connection. tcpClient.Connect End Sub Private Sub txtSendData_Change() tcpClient.SendData txtSend.Text End Sub Private Sub tcpClient_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String tcpClient.GetData strData txtOutput.Text = strData End Sub The code above creates a simple client-server application. To try the two together, run the project, and click Connect. Then type text into the txtSendData TextBox on either form, and the same text will appear in the txtOutput TextBox on the other form. Вопрос: КАК МОЖНО ПОМЕНЯТЬ КАРТИНКУ ПЕРЕЗАГРУЗКИ WINDOWS своей а ? Ответ: Автор ответа: Сергей Гуров За инфу не ручаюсь, не проверял Цитирую и даю ссылку: Анимированная картинка, которая выводится при загрузке Windows (на фоне голубых облачков написано Windows 95(98)), в Windows 95 находится в файле logo.sys в корневом каталоге, а в Windows 98 эта картинка, если не ошибаюсь, "вшита" в файл command.com Меняя этот файл (logo.sys) на любой файл формата BMP (соответствующих размеров и 256 цветов), можно поменять скушную картинку при загрузке. А в Windows 98 можно просто поместить файл logo.sys в корневой каталог - эффект тот же самый. Аналогично, в каталоге WINDOWS есть ещё 2 файла - logos.sys и logow.sys. Они "отвечают" за сообщения "Теперь питание..." и "Подождите, идет подготовка...". Формат тот же. Владимир Ротин (vovka@mail.tp.ru 2:5061/104.10@FidoNet) Вопрос: Как определить пояицию курсора в Windows? Ответ: Автор ответа: Kirill Можно воспользоваться Win32API: Public Type POINTAPI x As Long y As Long End Type Public Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long Соответственно в переменной типа POINTAPI вернутся текущие координаты курсора. Вопрос: Как определить пояицию курсора в Windows? Ответ: Автор ответа: Игорь Следующим образом: Объяви функцию и тип: Private Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Dim A as POINTAPI Теперь вызови эту функцию GetCursorPos A MsgBox A.x & " " & A.y Значения будут возвращаться в поинтах (точках). Если тебе нужно в твипах, вызывай функцию так: GetCursorPos A MsgBox A.x * Screen.TwipsPerPixelX & " " & A.y * Screen.TwipsPerPixelY Вопрос: Как определить пояицию курсора в Windows? Ответ: Автор ответа: Владимир Капустин 1. Создайте модуль и в нём запишите: Public Type POINTAPI x As Long y As Long End Type Public Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long 2. Создайте форму и таймер(интервал>0) Пример: Private Sub Timer1_Timer() Dim tmpPA As POINTAPI Dim tmpFR As Long tmpFR = GetCursorPos(tmpPA) Me.Caption = tmpPA.x & "," & tmpPA.y End Sub Вопрос: Как определить пояицию курсора в Windows? Ответ: Автор ответа: Ivan Позицию курсора можно определить с помощью API функции GetCursorPos Объявление: Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Private g As Long' Любая переменная типа Long Private Position As POINTAPI ' Любая переменная типа POINTAPI Применение: Private Sub Form_Load() g = GetCursorPos(Position) MsgBox "Позиция по Х: " & Position.x MsgBox "Позиция по Y: " & Position.y End Sub Вопрос: Как сумировать ячейки в таблице Exel которые выделены к примеру красным цветом, тоесть не сама ячейка красная а шрифт? Ответ: Автор ответа: Kirill Можно использовать такую схему: ' отобранные ячейки для суммирования Dim sumRange As Range ' отдельная проверямая ячейка Dim rCell As Range ' просматриваем диапазон ячеек For Each rCell In Range("A1:D5").Cells ' проверяем цвет шрифта в ячейке If rCell.Font.Color = RGB(255, 0, 0) Then ' если набор ячеек еще не инициализирован If sumRange Is Nothing Then ' инициализируем набор первой найденной ячейкой Set sumRange = rCell Else ' или добавляем очередную ячейку к уже найденным Set sumRange = Union(sumRange, rCell) End If End If Next rCell ' записываем результат, используя для суммирования ' встроенную функцию Excel'я Range("A7").Value = Application.Sum(sumRange) Вопрос: Подскажите, как мне перемешать элементы на форме в раяличном порядке? (В Turbo Pascale есть функция Randomise, а в VB?) Ответ: Автор ответа: Игорь В VB есть функция Rnd. Она возвращает случайные значения. А для того, чтобы в произвольном порядке расположи на форме несколько элементов и вставь следующий код: Private Sub Form_Load() On Error Resume Next For Each obj In Me.Controls Randomize Timer RndLeft = Int((Me.Width - obj.Width) * Rnd(1)) RndTop = Int((Me.Height - obj.Height) * Rnd(1)) obj.Left = RndLeft obj.Top = RndTop Next End Sub Вопрос: Как мне из моей проги открыть excel, добавить в него новую таблицу, а в нее уже добавить некоторые данные (числа, текст). Я пока вишу только на добавлении новой таблицы - т.е. excel он мне открывает, но на этом все, дальше не могу. Вот мой исходник: Option Explicit Private exapp As Excel.Application Private Sub Комманда1_Click() Set exapp = New Excel.Application ' WordApp.Visible = True exapp.Visible = True 'Set exapp = Nothing End Sub Дальше не знаю как - помогите ПЛЗ :) Ответ: Автор ответа: Иван Совета и ответ на вопрос про Ёксель 1. Встаку таблицы данных лучше производить через приравнивание xo.activesheet.range(xo.cells(Row,Col), xo.cells(Row, Col)) и вариантного двухмерного массива. Чтоб не пробегать циклом все ячейки. Получается намного быстрее! 2.Самый полезный совет: Если не знаешь как что делать из ВБ в ёкселе или ворде, а читать MSDN неохота Запиши макрос в ёкселе/ворде где делаешь, что нужно (думаю проблем у тебя таких нет) потом посмотри получившийся код, и прибавь ко всем функциям в начале "exapp." и пользуйся!!! 3.Читайте MSDN. 4.Не забывайте про обработку ошибок =============================== Я использовал такие функции: (повырезал из своей рабочей проги) 'запускал так, потому что типы excel не хотелось подключать 'но разницы никакой нет Set exapp = CreateObject("Excel.Application") exapp.Visible = True 'открыть новую книгу exapp.workbooks.Add 'выйти exapp.Quit 'загрузить книгу-шаблон exapp.workbooks.Open txtRepTemplate.Text 'открыть лист в активной книге exapp.worksheets("Parameters").Activate 'вытянуть значение из ячейки Value = exapp.cells(1, 2).Value 'вставить данные в нужную ячейку активной книги exapp.cells(Row, Col) = value 'вставка пустой строки exapp.Rows(CStr(Row1) & ":" & CStr(Row1)).Select exapp.Selection.Insert Shift:=-4121 'xlDown 'вставка блока со сдвигом вниз exapp.activesheet.range(exapp.cells(Row1,Col1), exapp.cells(Row2, Col2)).Select exapp.Selection.Insert Shift:=-4121 'xlDown 'сохранение под заданным именем exapp.workbooks(1).SaveAs FileName:=txtRepFile.Text 'вставка нового листа в активную книгу exapp.worksheets.Add Вопрос: Как мне из моей проги открыть excel, добавить в него новую таблицу, а в нее уже добавить некоторые данные (числа, текст). Я пока вишу только на добавлении новой таблицы - т.е. excel он мне открывает, но на этом все, дальше не могу. Вот мой исходник: Option Explicit Private exapp As Excel.Application Private Sub Комманда1_Click() Set exapp = New Excel.Application ' WordApp.Visible = True exapp.Visible = True 'Set exapp = Nothing End Sub Дальше не знаю как - помогите ПЛЗ :) Ответ: Автор ответа: Владимир Капустин Ответ немного не в тему. Не знаю как открывать документ Excel. Мне кажется это немного непрактичным. Есть другой вариант - открытие Excel как базы данных, используя контроль Data. Вопрос: Как мне из моей проги открыть excel, добавить в него новую таблицу, а в нее уже добавить некоторые данные (числа, текст). Я пока вишу только на добавлении новой таблицы - т.е. excel он мне открывает, но на этом все, дальше не могу. Вот мой исходник: Option Explicit Private exapp As Excel.Application Private Sub Комманда1_Click() Set exapp = New Excel.Application ' WordApp.Visible = True exapp.Visible = True 'Set exapp = Nothing End Sub Дальше не знаю как - помогите ПЛЗ :) Ответ: Автор ответа: Kirill В принципе начало правильное, насколько я понимаю проблема в незнании объектов Excel VBA, но это как раз дело поправимое :) Option Explicit Private exapp As Excel.Application Private Sub Комманда1_Click() Dim wBook As Excel.Workbook ' чтобы обращаться к созданной таблице ' здесь я бы сделал не так: ' Set exapp = New Excel.Application ' а добавил бы возможность использовать запущенное приложение Dim StartedNew As Boolean ' поставим в True, если сами запустим Excel StartedNew = False On Error Resume Next Set exapp = GetObject(, "Excel.Application") If Err.Number <> 0 Then ' если нет запущенного Excel'я Set exapp = CreateObject("Excel.Application") StartedNew = True End If On Error GoTo 0 exapp.Visible = True ' создаем новую таблицу Set wBook = exapp.Workbooks.Add ' издеваемся над созанной таблицей :) wBook.Sheets(1).Name = "MyResult" wBook.Sheets(1).Range("A1").Value = "это ячейка A1" wBook.Sheets("MyResult").Cell(4, 2).Value = InputBox("Впиши что хочешь", "текст для ячейки B4", "filled from VB") ' сохраняем таблицу wBook.Save "c:\my_table.xls" wBook.Close Set wBook = Nothing ' если Excel запускали мы, то надо бы его закрыть If StartedNew Then exapp.Quit End If Set exapp = Nothing End Sub Вопрос: Кто янает, ДЛЯ КАКОЙ цели в CommonDialog есть вояможность яадавать .Action = 1, 2, 3 ? Свойство .Action = 2 не работает, а только соядает ВИДИМОСТЬ Save As. Вопрос: А ЗАЧЕМ КОЗЕ БАЯН!? Или я не прав? Ответ: Автор ответа: Kirill Совершенно однозначно ты неправ. CommonDialog не призван решать твои проблемы по сохранению файлов -- это уж будь добр пиши сам, а диалог просто для того, чтоб юзеру было привычней при сохранении файла видеть знакомое окно. Диалог возвращает тебе имя, под которым юзер захотел сохранить файл, дальше -- сам придумывай, как тебе файл на диск писать. Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
||||||||||
Выпуск подготовили: |
Сурменок Павел |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||