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

Visual Basic для новичков и профессионалов #48


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

Visual Basic для новичков и профессионалов

Наш Web-портал:

Тема выпуска:
Выпуск #48
От 11.02.2006
Вопросы и ответы
От Автора

Здравствуйте уважаемые подписчики!

Произошла маленькая задержка с выпуском. Во всем виноват мой робот, которого я писал и тщательно тестировал, исправляя все баги. Итак, теперь все ответы и вопросы формируются автоматически. Это очень сильно облечает работу, так как чем больше вопросов, тем больше ответов. Для сравнения даю следующий пример: на обработку одного вопроса с одним ответом уходит 3 минуты с учетом форматирования. В сегодняшнем выпуске 73 ответа. Арифметика проста: 73*3 = 219 минут (3,5 часа) на оформление только части рассылки. Робот же формирует исходный HTML-код раздела вопросов и ответов за 5 секунд. Т.е. робот справляется почти в 3000 раз быстрей. Тем не менее, форматирование все-равно остается за мной, так как некоторые любят писать в HTML, некоторые любят ставить множество пустых строк, кто-то рекламирует свои сайты, кто-то оставляет интересные подписи. Конечно робота можно модернизировать, но на это уйдет много времени, чтобы заставить робота подстраиваться под каждого и удалять прочий контент. Тем не менее я рад, что ввел его в эксплуатацию, так дела пойдут быстрей.

Итак, если уж на то пошло, то давайте уважать труд человека.
Я прошу всех подписчиков писать текстом, а не HTML, убирать сразу ненужный контент (поверьте, проще будет вам убрать свою подпись или лишний контент, чем я буду это проделывать с каждым ответом по отдельности).
НЕ ИСПОЛЬЗУЙТЕ РИСУНКИ И ДРУГУЮ НЕЧИСТЬ в ответе! Это все-равно не попадет в выпуск! Не надо мне присылать тонные BMP-форматы скринов неизвестно какого качества, неизвестно как сделанные.

Надеюсь на ваше понимание! Заранее спасибо!

Ах, да! Самое главное сказать и забыл! Так как всю работу теперь делает робот, то не присылайте письма с содержанием "От xxx" или "Прошу идентифицировать мой ответ как от xxx". Робот этого не заметит, а я этого не исправлю. Если хотите перекинуть баллы с одного ящика на другой, пишите, сделаем!

 
Новости сайта, форума

Открыта новая рассылка:

Практическая работа с Visual Studio.Net и Microsoft Office

Данная новостная рассылка создана для работы с программными продуктами таких систем, как Visual Studio.Net и Microsoft Office. В статьи будет включено всё, что хотя бы косвенно касается этих двух пакетов программирования, к примеру, VBScript, HTML, XML и так далее. Особенно тщательно будет обсуждаться совместное использование и общность между этими двумя реализациями систем программирования. Так же будет затронута тема вопросов и ошибок, связанных при работе с языковым кодом. В данной рассылке будет добавлена колонка для читателей, в которой каждый сможет высказать свои мысли по поводу текущей темы обсуждения и задать интересующий его вопрос. Инициатива не наказывается, а наоборот поощряется. Возможны варианты ведения совместных проектов, описание и код которых будет появляться в соответствующей графе.

Рекомендую всем подписаться, тема рассылки достаточна интересна!

Рассылки Subscribe.Ru
Практическая работа с Visual Studio.Net и Microsoft Office

 
Обучение для новичков
 

Требуется человек на добровольной основе для ведения раздела новичков. Пишите сюда

 
Вопросы и ответы
Наши лидеры
Место
Имя (ник)
Счет
1
Игорь 167
2
*Casper* 126
3
Bourn None 116
4
Stormbringer 92
5
Андрей 73
6
Роман 65
7
Перекладов Владимир 61
8
HouseBugs 60
9
Bullet [PCLO] 59
10
Oleg K. 48

 

Всего участников: 93
Общее число баллов: 1685
Максимальный счет: 167
Минимальный счет: 2
Новые вопросы
199/Здравствуйте! Подскажите, плиз, как в VB6 сделать копию экрана и поместить в файл bmp или jpg. Заранее спасибо [Ответить]
200/Доброго времени суток уважаемые господа программисты!!! Я новичек в деле программирования на VB могли бы Вы мне подсказать как создать прогу которая следила бы за моим компутером и показывала кто ко мне подключается через локалку… а можно и отдельно через И-нет… Заранее благодарен…. И пожалуйста объясните усе простым языком [Ответить]
201/Плиз, подскажите, как программным методом поместить свою программу в автозагрузку, только не через "пуск >>> программы >>> автозагрузка",как другие проги (например, аська) - просто ставишь галочку и всё. Какую процедуру/функцию надо выполнить? [Ответить]
202/Подскажите, как узнать, находится сейчас юзер в Интернете или нет? [Ответить]
203/Здравствуйте! Как спрятать программу из списка задач? Есть одна проблема - у меня WinXP. Если можно - с примерчиком. [Ответить]
204/Как надоело набирать код вручную, хотелось бы знать, не пробовал ли кто исправить это досадное недоразумение и если пробовал, то как? Вот, к примеру, Add-in (в переводе - врезка) для VisualBasic существуют повсеместно, и в VisualStudio 6 и в VisualStudio 7, так же MSOfficeимеет свои особые возможности, особенно такой продукт как Access. Если соединить базу данных с VisualStudio 7 (которая по совместительству называется NET), это же даёт уникальные возможности. К тому же там есть специально созданные для этой цели Wizard’sAdd-in. Предположим такую ситуацию, у меня куча событий вызова от кнопок. Если бы мне надо было в каждую из них автоматически вписать соответствующую функцию вывода звука, то есть определить звуковую схему, то это сколько времени понадобилось бы на эту простейшую операцию, а ведь эти дополнительные функции не единственные. Код всё более и более запутывается, а ведь в программе главное порядок. Или взять автоматический ввод инструкций, причём не в виде текста, а именно как элемент какого-либо списка (древовидного, обычного и так далее). То есть, нужна синхронизация кода и списков, а, следовательно, не обойтись без лексического преобразователя. Вообще существует огромное количество игр с удобным интерфейсом, и ни одной серьёзной системы программирования с такими же особенностями. VisualStudio 7 обрёл много замечательных нововведений по сравнению с VisualStudio 6. Но даже теперь в нём нет автоматизированного ввода инструкций, и предкомпиляционной проверки на допустимость. Легче ведь запретить вводить код неправильно, чем потом проверять ошибки программиста. Ещё один пример VBScript. Конечно, можно использовать PowerEditorи другие подобные программы. Однако это не лучший выход, код то по прежнему существует, он не упорядочен и не сгруппирован. Переход по нему занимает уйму времени. Особо больная проблема поиска функций. Вот тут недавно писали о программном решении сжатия базы данных в Access, а ведь этого не понадобилось бы, не запихни разработчики библиотеки вызов в «RunCommandCompactDataBase», то есть вызов не самой функции, а так сказать через функцию менеджер-функций. Устранение этой проблемы возможно, если бы были введены дополнительные ссылки на различные варианты вызова процедур. За частую не хватает такого способа группировки функций как подразделение его на модули и классы в библиотеках. Следовательно, необходимо считать существующие в библиотеках функции и распределить их по особой системе, в наиболее удобном порядке. Таких способов будет великое множество, но действительно удобных окажется не так уж и много, а следовательно такое вполне по силам. Общий вывод, отказаться от кода путём его запрятывания куда подальше. Присылайте примеры и ссылки на них. [Ответить]
205/Как сделать !!!полупрозрачную!!! форму по маске из BMP файла? Если цвет точки чёрный, то часть формы не прозрачна, белый-прозрачна. Оттенки серого - степень прозрачности. Примернр так, как в Windows Vista 5270. Заранее благодарен. [Ответить]
206/Я из базы данных получаю набор записей в виде объекта Recordset. Подскажите, как лучше организовать отображение полей объекта Recordset в полях формы, а затем значения полей формы сохранить в полях объекта Recordset. Пишу на VB. Заранее благодарен! [Ответить]
Вопросы без ответов

63/ Здравствуйте! Как сделать столбец для таблицы с помощью VB который будет показывать номера кварталов с min зарплатой(в таблице 4 квартала). Другой столбец - Динамика изменения средней зарплаты по кварталам (рост, падение, колебание, постоянно)\ нужно найти среднее знаение среди записей каждого отдела и чтобы написал динамику изменени, то что напискано в скобках, одно слово. [Ответить]
76/ podskazhite pozhalusta, kak pravil'nee pristupit' k sozdaniu tablic i kakogo roda tablica nujna dlya vvoda, obrabotki i rascheta dannix, na VB.net. mne bazu sozdavat' ne nado. Zaranee spasibo [Ответить]
130/ Доброго времени суток, User`ы. Подскажите пожалуйсто, как в VB 6.0 к какому-либо устройству в порте COM по определённому адресу? Благодарю за внимание и за ответ. Спасибо. [Ответить]
136/ Здравствуйте!
У меня возникла проблема: для создания страниц сайта специфической тематики (математика) требуется программа, способная сохранять введенные пользователем в объект Equation данные в формате gif или png [как это делает MS Word, при сохранении документа в html формате. Т.е. технологический процесс такой: введение формул в Ворде, сохранение в html -> получение рисунков -> верстка страницы].
Сохранять данные в виде рисунка не проблема, но размер у них не такой какой необходим. Это и есть проблема: как сделать так, чтобы OLE объект со вставленным Equation'ом, изменял свои размеры в соответствии с изменениями размеров Equation'а (как это реализовано в MS Word)
[Ответить]
162/ Вот у меня вопрос. Имею 2 модема. Опишите мне подробно:
1) набор номера
2) соединение межде модемами
3) установка связи
Желательно через MSComm
[Ответить]
167/ Здравствуйте
Как получить спектр музыкального файла?
[Ответить]
168/ Для скачки файла из инета я использую в своей проге такой код:

Private Function DownloadFile(ByVal FromUrl As String) As String
'процедура загрузки файла
Dim hSession As Long

Dim hFile As Long
Dim LLenthFile As Long
Dim AllFile As String
Dim fBuffer As String
Dim Ret As Long

hSession = InternetOpen("прога", 0, "", "", 0)
DoEvents

hFile = InternetOpenUrl(hSession, FromUrl, "", 0, 0, 0)
Do
DoEvents
fBuffer = Space(1024)
InternetReadFile hFile, fBuffer, 1024, Ret
If Ret <> 1024 Then fBuffer = Left$(fBuffer, Ret)
AllFile = AllFile & fBuffer

Loop Until Ret = 0
InternetCloseHandle hFile
InternetCloseHandle hSession
DownloadFile = AllFile
End Function

но он подвисает, думаю что в цикле Do(скачиваю много файлов)
как сделать лучше(но без контролов)?
[Ответить]
172/ вопрос по RAS:
как получить параметры имеющихся на компе соединений(dial-up)?
[Ответить]
174/ Всем привет! Кто нибудь знает как решать в ВБ диференциальные уравнения. Например такую:
Численно решить методом Эйлера дифференциальное уравнение с заданными начальными условиями на отрезке с шагом h=0,1 при указанных значениях параметров:
y’=1+x y2 ; y(0)=1, a=0, b=1.
[Ответить]
179/ Как преобразовать стандартный цвет типа Long в цвета пригодные для
использования со структурой TRIVERTEX и функцией GradientFillRect?
[Ответить]
180/ Помогите!!!У нас компьютеры соединены сетью. Как можно узнать запущено ли определённое приложение на определённой машине а после запустить приложение тамже. [Ответить]
183/ Как запустить свою прогу как сервис Винды? [Ответить]
184/ Здравствуйте!
Я по поводу субклассирования.
Определяю стандартную оконую функцию в модуле. Как теперь сделать так, чтобы эта функия вызвала другую, именно из той копии класса, которая субклассирует даное окно?
Напремер:
У меня есть три контрола:

ContrA субклассирует окно 1
ContrB --////--- 2
ContrC --////--- 3

и NewWindowFunction (в стандартном модуле) если она будет вызвана как можно узнать какая именно копия котнрола ёё вызвала? И вызвать функцию именно того контрла, которая ёё вызвала?

Может ёще существует какой-нибудь другой алгоритм? А то я понатия не имею как можно его организовать.

А как еще можно субклассировать окно пренадлежащее другому процессу?
SetWindowLong конечно возвращае ошибку. Для этой цели пользовался специальным контролом, но хотелось бы "избавиться" от необходимости его присутствия для даных целей.
[Ответить]
189/ Как сделать окно способным принимать файлы из проводника windows (Drag'n'Drop) Заранее спасибо. [Ответить]
196/ Здравствуйте уважаемые програмисты!
У меня к вам вот какой вопрос, програмирую я на VB.NET 7.1, и сейчас
создаю свою программу с своим расширением файла. Но не как не получается
разобратся толком с реестром. Програмным путем создал в реестре свое
расширение

Dim rkey As RegistryKey = Registry.ClassesRoot.CreateSubKey(".Cot")

Так же програмным путем создал папку своей программы

Dim kkey As RegistryKey =
Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books")

Так же в папке своей программы создал подпапки для открытия и иконки


Dim akey As RegistryKey =
Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books\\Defaul
tIcon")
Dim bkey As RegistryKey =
Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books\\shell\
\open")
Dim ckey As RegistryKey =
Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books\\shell\
\open\\command")

Но не как не могу присвоить параметр "По-умолчанию" в ключе:

Dim rkey As RegistryKey = Registry.ClassesRoot.CreateSubKey(".Cot")

Значение имени ключа

Dim kkey As RegistryKey =
Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books")

Так же не как не могу понять как програмным путем создать ссылку на свою
иконку в реестре и ссылку на свою программу в ключах

Dim akey As RegistryKey =
Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books\\Defaul
tIcon") Это соответственно иконка

Dim ckey As RegistryKey =
Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books\\shell\
\open\\command") Это соответственно с помощью какой программы открывать

Пожалуйста Не могли бы вы мне помочь разобратся, если возможно примеры.
С уважением Роман Александрович
[Ответить]
Ответы на вопросы
 


Вопрос 88 [ Ответить ]
  Здравствуйте. У меня такой вопрос: можно ли из VB послать команду так, чтобы включилась удалённая машина в сети, на которой включен WakeUp on LAN. Если да, то как? За ранее спасибо за оказанную помощь!
   
Отвечает:Роман
  Прикольное пожелание. Компьютер включается от сети LAN, когда по ней идёт вызов. А вот когда он идёт и как осуществляется мне неизвестно. Возможно в скором времени попробую этого добиться через VS7.
Оценка за ответ: 3
 


Вопрос 117 [ Ответить ]
  Как сделать чтобы при выборе шрифта с помощью Microsoft CommonDialog менялся и набор символов (Кириллица, Западноевропейский и т.п.)? Спасибо.
   
Отвечает:scada01
  Работа с реестром, вот есть материальчик, найдено в интернете:

Диалоговое окно изменения вида шрифта Font (метод ShowFont).

Одним оператором CommonDialog1.ShowFont, как мы делали раньше, открыть окно шрифтов не удастся. Это лишь вызовет ошибку 24574 - "No font exist" - "Нет существующих шрифтов". Это происходит потому, что для окна необходимо определить, какие шрифты ему показывать - экранные, принтерные или оба. Это определяют параметры свойства .Flags:

CommonDialog1.Flags=cdlCFScreenFonts 'экранные шрифты
CommonDialog1.Flags=cdlCFPrinterFonts 'принтерные шрифты
CommonDialog1.Flags=cdlCFBoth 'оба вида шрифтов

Кроме того полезны для использования следующие константы свойства .Flags:

cdlCFForceFontExist= 65536 (&H10000) - вызов сообщения об ошибке при выборе несуществующего шрифта или стиля
cdCFLimitSize = 8192 (&H2000) - ограничивает размер показываемых шрифтов с размера, заданного свойством .Min по размер, заданный свойством .Max.
cdlCFEffects = 256 (&H100) - отображает дополнительные параметры форматирования - подчеркивание, перечеркивание цвет.

Заданные в диалоговом окне параметры должны быть обработаны программой. Для этого имя шрифта, его размер, стиль, цвет передаются из CommonDialog1 соответствующими свойствами в свойства соответствующего объекта. В нашем примере мы будем менять шрифт нашего текста в Text1:

Private Sub Command4_Click()
On Error GoTo Cansel
CommonDialog1.CancelError = True
'Установим флаги экранного шрифта, дополнительных параметров форматирования
' и включим ограничение размера шрифтов
CommonDialog1.Flags = cdlCFScreenFonts Or cdlCFEffects Or cdlCFLimitSize
'установим вывод шрифтов размером от 10 до 16
CommonDialog1.Min = 10
CommonDialog1.Max = 16
'открываем окно
CommonDialog1.ShowFont
'передаем свойства окна свойствам Text1
Text1.Font.Name = CommonDialog1.FontName
Text1.Font.Size = CommonDialog1.FontSize
Text1.Font.Bold = CommonDialog1.FontBold
Text1.Font.Italic = CommonDialog1.FontItalic
Text1.Font.Strikethrough = CommonDialog1.FontStrikethru
Text1.Font.Underline = CommonDialog1.FontUnderline
Text1.ForeColor = CommonDialog1.Color
Exit Sub
Cansel:
If Err.Number = cdlCancel Then
Exit Sub
Else
MsgBox Err.Description
End If
End Sub
Оценка за ответ: 5
 


Вопрос 122 [ Ответить ]
  Как сделать чтобы при нажатии на объект ListView НЕ воспроизводился тот идиотский звук, который воспроизводится?
   
Отвечает:Копылов Сергей
  Я не уверен, однако может быть у тебя системные звуки настроены так. У
меня при нажатии ни каких звуков не воспроизводится. Посмотри Панель
управления - Звук и аудиоустройства.
Оценка за ответ: 4
 


Вопрос 144 [ Ответить ]
  Подскажите: есть MySQL база, в ней есть какбы ячейки с номером, например 84538834 или 444449329232, эти ячейки содержат информацию - числа например 100 332 или 50. Как можно средствами VB сделать программу которая искала бы в этой базе значения этих ячеек равные нулю и удаляла бы их, и самое главное нужен отчет о номерах удалённых ячеек, т.е. сколько чего удалено из базы.
   
Отвечает:Oleg K.
  Во-первых, в нормально спроектированной реляционной базе все разговоры
о номере ячейки (записи) являются "ересью". Т.е. в таблице все
записи должны быть "равноправны" и физического порядкового номера у
них быть просто не может. Порядок же "представления" записи
определяется текущим индексом.
Вероятно речь все ж таки идет о том, что есть таблиица "BAZA", а в ней
ДВА столбца, один "ID" с ключевыми значениями (84538834 или
444449329232), другой собственно с данными "DATA" (100 332 или 50).
Если так, то можно дать базе два запроса, один "на выборку", а второй
"на удаление"
Синтаксис используемого диалекта SQL вероятнее всего будет несколько
отличаться, но принципиально это будет выглядеть примерно так:

1) "Выбрать из BAZA те ID, для которых справедливо DATA = 0"
SELECT baza.id
FROM baza
WHERE baza.data = 0
выбранные данные обрабатывай в "отчете об удаленных"
2) Теперь собственно удаление:
DELETE baza.id
FROM baza
WHERE baza.data = 0
Оценка за ответ: 5
 


Вопрос 159 [ Ответить ]
  Можно-ли в MS Access в таблице сохранить документ html и вывести его на форму для просмотра. А если можно, то как?
   
Отвечает:Роман
  Это идиотизм, в Accessже есть страницы, наряду с таблицами, запросами, формами и прочим.
Оценка за ответ: 3
 
Отвечает:Роман
  Лучше хранить в таблице гиперссылки, а htmlстраницы на диске.
Оценка за ответ: 3
 


Вопрос 160 [ Ответить ]
  Благодарю Игоря за ответ,очень помогло,также уже сделал редактирования. Но дальше возникли еще вопросы. Например: 1.Не как не могу сделать меню правка с подменю копировать,вставить,вырезать. Ну уже все перепробовал нечего не помагает(((( 2.Везде искал но не как не могу найти,хоть что нибудь про импорт и экспорт из базы данных. Почему так мало информации по Visual Basic.NET? Пожалуйста помогите,кто может начинающему. Учусь програмироватьб на Visual Basic.NET, вроде что-то наченает получатся,вот только некоторые вещи тормозят. Заранее благодарен за помощь. С уважением Роман.
   
Отвечает:Роман
  Ни фига себе мало. А MSDN куда делось. Это же гигабайты информации, с разнообразными примерами, обучалками, и прочей ерундой. Вот у меня MSDN 2004 и там этой информации просто завались, даром что английская, к счастью с помощью переводчика от Promt можно переводить помощь прямо в том же окне из контекстного меню.

Оценка за ответ: 3
 
Отвечает:anton
  копируют, вставляют и вырезают примерно так:

Private Sub cmdCut_Click()
'так вырезают
Clipboard.SetText Text1.SelText
Text1.SelText = ""
End Sub

Private Sub cmdCopy_Click()
'так копируют
Clipboard.SetText Text1.SelText
End Sub

Private Sub cmdPaste_Click()
'а так вставляют
Text1.Text = Text1.Text + Clipboard.GetText
End Sub

а на базы данных вот ссылки

http://www.************.ru/rabota_s_BD.rar и
http://www.************.ru/uroky_BD.rar , ************.ru -это мой
сайт, только у меня никак руки не дайдут доделать.

а про vb.net ничего не знаю.

Оценка за ответ: 4
 
Отвечает:killka
  зайди в редактор меню(menu editor) caption = правка
имя - какое сам захочешь(для работы с этим элементом в коде)
Потом жмёшь кнопочку next и тем самым переходишь к другому элементу
если хочешь чтобы етот(второй) элемент(подменю) был в меню правка то
нажми стрелку вправо.Появится многоточие далее пиши имя и caption.
Для третьего элемента надо что бы он стоял на уровне со вторым
элементов(см рисунок)

Если меню несколько а в каждом подменю то пользуемся стрелочками (например такая схема)

ну там сам разберёшся(если не тормоз!).
Чтоб вставить из файланадо ввести спец. оператор Open Имя_файла For input as #(номер файла)(open "c:\.......\..\file" for input as #1)
#1 ето файл с данными которые ты вставил (file)
чтоб достать из из етого файла надо написать Input #1(Номер файла), (переменная)
теперь в этой переменной файл "C:\.......\..\file"
Если не всё понял то обращайся на мыло Killka_89@mail.ru
ps:
У мя плохо с обьяснениями! :-P

Оценка за ответ: 5
 


Вопрос 166 [ Ответить ]
  Создал Программу: при ОК на кнопку выходит очередной Перл. Каждый Перл пронумерован. Как спрограммировать на VB6, чтобы при клике на кнопку Найти Перл или хотя бы его Номер по СЛОВУ? Если требуется перешлю Исходник (в архиве 15 Кб).
   
Отвечает:Fedos
  Я думаю поможет функция InStr
InStr("Перл", "СЛОВО")

Она возврашает позицию СЛОВО в Перле.

Если у тебя всё в массиве, то for'ом прогоняй каждый его элемент, и
сравнивай каждый Перл со СЛОВОм, если InStr вернет число больше 0, значит
СЛОВО в Перле есть.

Оценка за ответ: 5
 
Отвечает:Bourn
  допустим у нас есть массив с перлами, тогда ищем в нем слово Word и когда мы его найдем то выведем данный
пер через messagebox, но тут ограничение на регистр символов:

For x = 1 To 60
If InStr(1, perl(x), "Word") &lt;&gt; 0 Then MsgBox perl(x)
Next x

а вот без этого ограничения

For x = 1 To 60
If InStr(1, lcase(perl(x)), lcase("Word")) &lt;&gt; 0 Then MsgBox perl(x)
Next x

Оценка за ответ: 5
 


Вопрос 169 [ Ответить ]
  Hi.Есть такой вопрос: Еть сайт на котором есть небольшая картинка и она не постояна тоесть, надо утянуть картинку из определённой части сайта или хотябы узнать какая картинка загружена в етот момент на сайте? (url картинки постоянно меняется.). Заранее спасибо.
   
Отвечает:Bourn
  сложно так сразу сказать, надо смотреть конкретно, ну допустим возьмем команду

Public Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

URLDownloadToFile 0, URL, SaveFile, 0, 0

загрузим html страницу с этой картинкой(понятное дело, что загрузиться только код страницы,
без дополнительных расширений, и картинок), далее найдем в файле участок кода где часть URL
от картинки одна, и соответственно прочитаем ее символы изменяющегося пути.

Оценка за ответ: 5
 


Вопрос 171 [ Ответить ]
  Загоняю в ListView список файлов в директории. стиль report. Проблема - отобразить рядом с файлами значки соответствующих расширений, короче сделать проводник в стиле "таблица". Если подскажете буду благодарен.
   
Отвечает:Копылов Сергей
  Насколько я знаю, в ListView нельзя вставить картинки. Надо использовать стороние контролы.

Оценка за ответ: 4
 


Вопрос 173 [ Ответить ]
  Чтобы отправлять сообщения по локальной сети через службу сообщений в своей программе я написал функцию вызова команды net send WinExec "net send " & comp & " " & text ' comp - имя компа text - текст сообщения Как отправить сообщение не через вызов программы, а через функцию API или через WinSock? Если это возможно, то как сделать, чтобы получатель не видел имя компа, откуда отсылали сообщение?
   
Отвечает:Роман
  Да это возможно, и к тому же для осуществления этого есть несколько способов.

Вот два из них:

DoCmd.RunCommand acCmdCompactDatabase

DoCmd.Application acCmdCompactDatabase

Но они не будут работать если база данных открыта, Accessпредложит воспользоваться меню Сервис-&gt;Служебные программы-&gt;Сжать и восстановить базу данных. Это вполне приемлемый способ сжимать уже открытую базу. Все равно ведь будешь работать в ней, а значок сжимать при закрытии может избавить от проблем делать это со всеми базами данных. Ну, а если нужно сжать кучу не сжатых баз данных, то милости прошу использовать предыдущие способы. Кстати говоря, в функциях закрытия тоже есть такой параметр как сжатие.

Оценка за ответ: 5
 
Отвечает:AdwareRu
  Кочечно можно. Вот кусок кода одной из моих программ. В strAppPath
находится путь к каталогу программы с замыкающим "\". Путь записать в
переменную при старте приложения (я делаю это в sub_main через
app.path и парсер получившейся строки)

Функция blnFileExist определяет, существует ли файл. Её Вам следует
написать отдельно.

Вообще, я написал огромную библиотеку функций (занимаюсь
программированием более 10 лет) на многих языках, многие из них
ссылаются друг на друга. Поэтому несмотря на ВСЁ вышеуказанное
подходите к указанному ниже коду не слижком критично (необходима его
модификация конкретно для вашей программы)

Private Sub mnuComapct_Click()
' Сжатие базы
On Error GoTo 100:
Dim strTMP1 As String
Dim ST1 As Long
strTMP1 = ""
strTMP1 = strTMP1 & "Сжатие базы данных может уменьшить объём, "
strTMP1 = strTMP1 & "занимаемый ей на диске. "
strTMP1 = strTMP1 & "Продолжить?"
ST1 = MsgBox(strTMP1, vbYesNo + vbQuestion)
If ST1 = vbNo Then Exit Sub
10:
Call mnuCloseAll_Click
20:
If blnFileExist(strAppPath & "new.mdb") Then
Kill strAppPath & "new.mdb"
End If
30:
If blnFileExist(strAppPath & "db1back.mdb") Then
Kill strAppPath & "db1back.mdb"
End If
40:
FileCopy strAppPath & "db1.mdb", strAppPath & "db1back.mdb"
50:
DBEngine.CompactDatabase strAppPath & "db1.mdb", strAppPath & "new.mdb"
60:
Kill strAppPath & "db1.mdb"
70:
FileCopy strAppPath & "new.mdb", strAppPath & "db1.mdb"
80:
Kill strAppPath & "new.mdb"
90:
strTMP1 = ""
strTMP1 = strTMP1 & "Сжатие успешно выполнено."
MsgBox strTMP1, vbInformation + vbOKOnly
End
Exit Sub
100:
strTMP1 = ""
strTMP1 = strTMP1 & "Ошибка сжатия базы. "
strTMP1 = strTMP1 & "Код ошибки: " & Err.Number
strTMP1 = strTMP1 & " Источник ошибки: " & Err.Source
strTMP1 = strTMP1 & " Строка процедуры: " & Trim(Str(Erl))
strTMP1 = strTMP1 & " Описание ошибки: " & Err.Description
strTMP1 = strTMP1 & " Рекомендуется проследить за выполнением "
strTMP1 = strTMP1 & " необходимых условий сжатия, после чего перезапустить"
strTMP1 = strTMP1 & " программу"
MsgBox strTMP1, vbOKOnly + vbCritical
End
End Sub

Оценка за ответ: 5
 


Вопрос 175 [ Ответить ]
  Вопрос стратегического плана. Есть государственное предприятие - бухгалтерия управления городского образования. Можно ли написать (и стоит ли?)с помощью VB6 и Access 2002 прграмму для начисления заработной платы и удержания налогов, если в управлении работают около 10000 человек. Способ начисления одинаковый почти у всех, но почти у каждого есть свои индивидуальные свойства по математике начисления зарплаты. Есть для этого проекта 15 бухгалтеров с компьютерами. Как лучше сделать (сетевой вариант, но уровень пользователей желает знать лучшего) или локально каждому по несколько учреждений на пк? 1с сложновата с интерфейсом и не все получилось у специалистов по 1с данного профиля, которых приглашали. Они конечно же старались сделать сетевую версию. Спасибо. С уважением Некрасов Андрей.
   
Отвечает:Игорь
  Написать приличную прогу - дело очень непростое. Прога подобного
масштаба потребует усилий нескольких ХОРОШИХ программистов
(соответственно и их з/п должна быть на уровне) и постановщиков задач.
Цмтата: "1с сложновата с интерфейсом и не все получилось у специалистов по 1с
данного профиля, которых приглашали" - Если кого-то не удовлетворил интерфейс 1С, то с вероятностью 100% могу
заявить, что никакой другой интерфейс тоже не вызовет удовлетворения.
(Чем сложнее предметная область, моделируемая программой, тем сложнее
и её структура). То, что кто-то не смог адаптировать стандартную
конфигурацию к вашим нуждам - отнюдь не недостаток 1С.
Короче: возможность написания своего софта - иллюзия, за которую
придётся расплачиваться временеи и деньгами.

Оценка за ответ: 5
 
Отвечает:Роман
  Стоит, конечно же. В Accessдля этого предусмотрена не только база данных %.mdb, но и проекты %.adp, которые по своей сути пустышки, то есть не имеют таблиц, зато могут подключаться к другим базам данных. Вообще эта тема обширна и увлекательна, одна репликация баз данных чего стоит, это когда есть основная база и все остальные, и при этом процессе все остальные становятся как основная, а возможен и обратный вариант, зависит от уровня доступа. Ну вроде как режим чтения, записи и прочее, прочее.

Оценка за ответ: 4
 


Вопрос 176 [ Ответить ]
  Здравствуйте! Возможно ли в VB 6.0 воспроизвести одновременно 2, 3,... несколько звуковых файлов (mp3. vaw. midi)? Если возможно, то как. Заранее спасибо.
   
Отвечает:Роман
  Возможно, для этого есть библиотека DirectX, а в ней DirectSound. При чём вызывать эти возможности можно даже из VBScript. К примеру, можно воспользоваться Tools-&gt;References, а далее включить библиотеку «DirectXForVisualBasicTypeLibrary». О том, как ей пользоваться написано в MSDN 2004, однако стоить заметить, что любое обучение связано с определёнными трудностями. Человеку ни разу не работавшему с DirectXбудет нелегко понять принципы работы этого сборника ускоренных функций.

Оценка за ответ: 4
 


Вопрос 178 [ Ответить ]
  Есть форма на которой расположены елементы управления из стандартного набора VB6 и добавленые из библиотеки FM20.dll. Нужно разместить combobox из FM20.dll, на MSFlexGride, а он упорно рисуется под ним. На прередний план не переносится, Zorder не помогает. Можно ли как то это побороть?
   
Отвечает:Буглаков Сергей Александрович
  Значит так.
Выделяешь ComboBox, нажимаешь _Вырезать_, затем выделяем MSFlexGride и
давим _Вставить_
Других способов не видел.

Оценка за ответ: 3
 


Вопрос 181 [ Ответить ]
  Люди знающие, вот чтобы создать DLL'ку в С++ мы делаем функции DLLEntryPoint или DLLMain.В VB этот трюк не катит.Не подскажите как реализовать DLL в VB. Примерчики бы не помешали.
   
Отвечает:Bourn
  Давно не видел рассылку, был занят, но почитав ответы один меня не удовлетворил, поэтому хочу немного прояснить ситуацию,
написал прогу SCINER, она позволяет компилировать sdcall библиотеки, и консольные приложения, описание внутри архива.
Другую же но для компилирования DLL с помощью PowerBasic'a тоже написал SCINER, она менее функциональна, но размер маленький,
и скорость быстрая, вообщем смотрите второй архив.

Скачать прикрепленный к ответу файл
Оценка за ответ: 5
 


Вопрос 182 [ Ответить ]
  Товарищи программеры, недавно столкнулся с проблемой - на формочке размещен объект типа ListBox, a фон формы замощен рисунком, проблема - ListBox серый и с общей картинкой на форме не сочетается.Не подскажите способы решения этой проблемы и/или альтернативные решения.
   
Отвечает:Роман
  Можно сделать цвет его фона более подходящим, или вообще прозрачным. В любом случае на стандартных компонентах далеко не уедеш.

Оценка за ответ: 3
 


Вопрос 185 [ Ответить ]
  Уважаемые программисты, у меня такая проблема: Написал программу для учета товара в магазине. Приходы расходы - все без проблем, а вот с отчетами за период встал в тупик. VB-6, база данных Access. в базе данные записаны следующим образом: ID№, наименование, дата (прихода или расхода), цена, кол-во и т.д. Проблема в следующем: нужно взять из базы данные за определенный период, затем в выбраном избавиться от записей с повторяющимися названиями или ID№, но при этом сложить количество. подскажите где можно нарыть похожий код.Заранее благодарен. Вячеслав.
   
Отвечает:Роман
  Используй SQL-запрос. Это такая штука слева в окне базы данных Access.

Это пример запроса на выборку ограничивающий элементы таблицы по дате:

SELECT УчётТовара.Наименование, УчётТовара.Дата

FROM УчётТовара

WHERE (((УчётТовара.Дата)&gt;=#12/20/2005# And (УчётТовара.Дата)&lt;=#12/22/2005#));

И кстати он не параметрический, а ведь я так понял переменные даты нужно вводить. В этом случае нужно задавать параметрический запрос (для тех, кто не знает параметрический запрос в начале требует ввести переменные), либо создать код генерирующий запрос из формы. Кстати в самом Accessмножество подобных примеров.

А вот другой пример, он считает сумму количеств:

SELECT First(УчётТовара.Наименование) AS [Наименование поле], Sum(УчётТовара.Количество) AS [Sum-Количество]

FROM УчётТовара

GROUP BY УчётТовара.Наименование;

Причём это сгенерировал сам Access и я не прилагал к этому никаких усилий.

Ну и наконец завершающая стадия сложение двух запросов:

SELECT First(УчётТовара.Наименование) AS [Наименование поле], УчётТовара.Дата, Sum(УчётТовара.Количество) AS [Sum-Количество]

FROM УчётТовара

GROUP BY УчётТовара.Дата, УчётТовара.Наименование

HAVING (((УчётТовара.Дата)&gt;=#12/20/2005# And (УчётТовара.Дата)&lt;=#12/22/2005#));

Короче, я не совсем понимаю возникшую проблему, когда всё решается так просто. Может быть тут есть какая-то особая закавыка, но созданная мной экспериментальная база показала именно то, что я от неё и хотел, решая задачу заданную выше.

Что же касается введения параметров, то тут вариантов вообще великое множество, успевай только выбирать.

И последнее, в вопросе не указано каким именно образом нужно избавится от записей, поэтому я не включил это пункт в запрос. К тому же в подобных действиях присутствуют особые нюансы. Во первых можно избавится от повторения всех полей сразу, а можно только от каждого поля в отдельности. К тому же огромное значение имеет порядок выполнения этих операций. Регулировать это можно при помощи свойств запроса, а точнее параметром «уникальные значения» и «уникальные записи». Разница в их использовании подробна описана в справке и я думаю не вызовет затруднений в прочтении.

Оценка за ответ: 5
 
Отвечает:Shmeliov Sergey
  Нужно написать запрос, который будет возвращать нужные данные.Допустим, нам нужны данные за период с 1.01.2006 по 31.01.2006.Запрос будет выглядеть так:
SELECT T.ID, T.Наименование, T.Дата, Sum(T.Цена) AS Цена_Сум, Sum(T.Количество) AS [Количество_Сум]
FROM T
WHERE T.Дата &gt;=#1/1/2006# And T.Дата &lt;= #1/31/2006#
GROUP BY T.ID, T.Наименование, T.Дата

Оценка за ответ: 5
 
Отвечает:Филатов Евгений
  В списке полей не увидел признака приход/расход.
Пример базы Material:
ID Long код товара
Name C100 Наименование
Pri Byte Признак 1-приход, 2-расход
Dat Small datetime Дата операции
Price Long Стоимость (в коп.)
Cou Long Количество (шт.)

По собственному опыту понял, что все цифровые значения лучше
хранить в целочисленном виде, а программа делит на 100 (грн./руб.),
1000 (кг.) и т.п.
Признак операции тоже необходим, т.к. помимо прихода/расхода
может отображать и другие виды операций (перемещение по складам).
Наименование желательно хранить в другой таблице, т.к. лишние
50-100 символов в каждой записи операции не нужны,
Пример базы Nomenklat:
ID Long
Name C100
Связь между таблицами осуществляется так:
select m.*,n.name as Naim from material m inner join
nomenklat n on n.id=m.id
Программно надо отслеживать обязательное наличие всех ID
в таблице Nomenklat, т.к. при таком запросе, в случае
отсутствия данных о наименовании строка выводиться не будет.
Можно изменить запрос (для MS ACCESS)
select m.*,iif(isnull(n.name),'нет наименования',n.name) as Naim
from material m left join nomenklat n on n.id=m.id
тогда, в случае отсутствия наименования будет выводиться строка
сообщения.
Суммарный запрос может выглядеть так:
select ID,Pri,Dat,count(ID),sum(Price),sum(Cou)
from Material
Group by ID,Pri,Dat
Выведет количество записей, общую стоимость и количество
прихода/расхода по датам данного вида товара.
Другой вариант запроса:
select ID,Pri,count(ID),sum(Price*Cou/100)
from Material
Group by ID,Pri
Выведет сумму проданых/полученных товаров в гривнях (рублях)
по номенклатуре.

Оценка за ответ: 5
 
Отвечает:fs
  Используй SQL– запросы! Далее помещаешь их в код, и с помощью DAOили ADOделаешь выборку из базы данных.
Я пишу такую же прогу, только сетевую. Работает в режиме: администратора, терминала, кассы, склада.

Оценка за ответ: 4
 
Отвечает:Oleg K.
  SELECT id, naimen, SUM(kolichestvo), tip_operacii
FROM moya_baza
WHERE date &gt;= #01.01.2006 AND date &gt;= #31.01.2006#
GROUP BY id, naimen, tip_operacii

Запрос выбирает из базы поля перечисленные в "SELECT"
инструкция "WHERE" ограничивает выборку только удовлетворяющими
условию строками. "GROUP BY" группирует все это на наборы по типу
операции, идентификационному номеру товара и наименованию. "SUM"
производит суммирование поля количество для каждого набора записей.
В результате и получаешь что хотел.

Оценка за ответ: 5
 


Вопрос 186 [ Ответить ]
  Привет всем! Подскажите пожалуйста ка VB6 узнать COM порт и название модема. И ещё меня интересует работа с реестром(регистром). Бальшое спасибо.
   
Отвечает:scada01
  Работа с реестром, вот есть материальчик, найдено в интернете:

Работа с реестром

Работа с реестром - это одна из наиболее частых проблем, возникающих у программиста не только на Visual Basic, но и на других языках. В стандартных функциях Visual Basic нет функций для работы с реестром, но с помощью Windows API это можно устроить. Приведённые ниже примеры используют модуль registry.bas, который содержит объявления API ф-ций, констант и готовых процедур, с которыми очень удобно работать.

Ф-ции чтения:

Для чтения строкового параметра используйте ф-цию GetRegString

Пример:

Dim a As String
a = GetRegString(HKEY_LOCAL_MACHINE, _
"Software\Microsoft\DirectX", "Version")
Form1.Caption = a

Для чтения параметра DWORD используйте ф-цию GetRegDWord

Пример:

Dim a As Long
a = GetRegDWord(HKEY_LOCAL_MACHINE, _
"Software\Microsoft\Internet Explorer\AboutURLs", "Home")
Form1.Caption = a

Для получения списка ключей в ключе используйте GetRegKeys

Пример:

Например, вам необходимо получить список ключей в подключе Software. Ф-ция GetRegKeys - возвращает значение типа Variant, содержащее одномерный массив со списком ключей. Поместите на форму список и введите примерно такой код:

Dim a As Variant
Dim c As Long
a = GetRegKeys(HKEY_LOCAL_MACHINE, "Software")
For c = 0 ToUBound(a)
List1.AddItem a(c)
Next c

Для получения списка параметров в ключе используйте GetRegKeyValues

Пример:

Эта ф-ция как и предыдущая возвращает Variant - массив, но на этот раз 2-х мерный:

Dim a As Variant
Dim c As Long
a = GetRegKeyValues(HKEY_LOCAL_MACHINE, _
"Software\Microsoft\Windows\CurrentVersion\Run")
For c = 1 ToUBound(a)
List1.AddItem a(c, 0)
List1.AddItem a(c, 1)
List1.AddItem "" 'Добавляем отступ для удобства
Next c

Здесь в массиве вторая размерность всегда равна 1. Т.е. 0 - отвечает за список параметров, а 1 за список их значений. Ну в общем запустите пример и сами поймёте.

Ф-ции записи:

Для записи строкового параметра используется SetRegString

Пример:

SetRegString HKEY_LOCAL_MACHINE, _
"Software\XYZ", "MyProgram", "Options"

Если ключ или параметр не были созданы, то они будут созданы. Если ключ или параметр уже существуют, то новые значения запишутся поверх старых.

Для записи параметра типа DWORD используется SetRegDWord

Пример:

SetRegDWord HKEY_LOCAL_MACHINE, _
"Software\XYZ", "MyProgram", "444"

Ф-ции удаления:

Для удаления ключа из реестра используется ф-ция DeleteRegKey

Пример:

DeleteRegKey HKEY_LOCAL_MACHINE, "Software", "XYZ", True

Второй параметр - Ключ-родитель

Третий параметр - True - если требуется подтверждение на удаление или False - если подтверждение не требуется.

Для удаления параметра из реестра используется ф-ция DeleteRegValue

Пример:

DeleteRegValue HKEY_LOCAL_MACHINE,_
"Software\Microsoft\Internet Explorer\AboutURLs", "mozilla", False

Оценка за ответ: 5
 
Отвечает:Роман
  Всё в VB6 делается через COM объекты. К примеру, для работы с последовательными портами и модемом есть отдельный ActiveX объект. Он выглядит как значок программы гипертерминала (оранжевый телефон, стоящий на модеме или что-то типа этого). Вот его то и надо выбирать в ActiveX компонентах, помещая на форму той операционной системы, в которой работаешь. Кстати говоря, как и любой ActiveX компонент он должен быть предварительно загружен в систему. У меня он загружается вместе с Visual Studio (MSCOMM32.OCX), после чего работает хоть Visual Studio 6 (VB6), Visual Studio 7 (VB7), MSOffice (Word, Excel, Access и так далее), Corel (Corel Draw, Corel Photo-Paint и так далее), AutoCAD 2004… О том как с ним работать написано в документации MSDN для работы с ActiveX Control. О работе с реестром (или как ещё его называют регистром) описано там же.

Оценка за ответ: 5
 
Отвечает:Вова Перекладов
  Вот слепил проектик.
Всё очень просто. Я делал чезер MsComm, поэтому там нет ничего
сложного и мало кода. Можно и через API, но так проще.

Скачать прикрепленный к ответу файл
Оценка за ответ: 5
 


Вопрос 187 [ Ответить ]
  Помогите пожалуйста. Как зделать транслитерацию (перевод букв русского алфавита в английский) с текста который записан в Textbox?
   
Отвечает:amd1991
  Лично я для решения этой проблемы воспользовался функцией Replace.
Вот как её вызвать:
Replace (text, a1, a2)
В данном примере text - строка в которой надо заменить a1 на а2, всё просто!

Оценка за ответ: 5
 
Отвечает:Роман
  В VBAнет ничего похожего, однако можно просто написать код преобразования таблицы. Это не сложная операция, если использовать VBA.Strings. Таблицу преобразований можно зашить в программу, или к примеру считывать из файла, а возможно просто записать в базу данных Access. Конечно, можно взять библиотеки от Promtи приказать транслитерировать текст, что кстати говоря возможно даже не вводя код на VBScript, однако результаты могут получиться не совсем соответствующие ожиданиям.

Оценка за ответ: 4
 
Отвечает:Вова Перекладов
  Написал модуль для трансляции уже давно. Вот и пригодилось. Всё
элементарно просто.

Скачать прикрепленный к ответу файл
Оценка за ответ: 5
 
Отвечает:Fedos
  В этом примере транслитерацируются только строчные буквы.
Прописные добавить не сложно.

На форму кидаем пустой textbox

Option Explicit
Function Translit(str As String) As String
'str - это строка содержащая русские буквы
Dim i As Integer 'сщетчик
Dim rus As String 'русский символ
Dim eng As String 'транслит
Translit = ""
For i = 1 To Len(str) 'сщитаем все символы в строке
rus = Mid$(str, i, 1) 'по одному
If Asc(rus) &gt; 122 Then 'если в строке rus русский символ
'то в строку eng записываем его транслит
If rus = "а" Then eng = "a"
If rus = "б" Then eng = "b"
If rus = "в" Then eng = "v"
If rus = "г" Then eng = "g"
If rus = "д" Then eng = "d"
If rus = "е" Then eng = "e"
If rus = "ё" Then eng = "e"
If rus = "ж" Then eng = "j"
If rus = "з" Then eng = "z"
If rus = "и" Then eng = "i"
If rus = "й" Then eng = "i"
If rus = "к" Then eng = "k"
If rus = "л" Then eng = "l"
If rus = "м" Then eng = "m"
If rus = "н" Then eng = "n"
If rus = "о" Then eng = "o"
If rus = "п" Then eng = "p"
If rus = "р" Then eng = "r"
If rus = "с" Then eng = "s"
If rus = "т" Then eng = "t"
If rus = "у" Then eng = "u"
If rus = "ф" Then eng = "f"
If rus = "х" Then eng = "h"
If rus = "ц" Then eng = "c"
If rus = "ч" Then eng = "h"
If rus = "ш" Then eng = "sh"
If rus = "щ" Then eng = "sch"
If rus = "ь" Then eng = "'"
If rus = "ы" Then eng = "i"
If rus = "ъ" Then eng = "'"
If rus = "э" Then eng = "e"
If rus = "ю" Then eng = "y"
If rus = "я" Then eng = "ya"
Else 'иначе
eng = rus 'его же и записываем
End If
Translit = Translit & eng 'добавляем к возвращаемой строке eng символ
Next i
End Function
Private Sub Text1_Change()
Text1.Text = Translit(Text1.Text)
Text1.SelStart = Len(Text1.Text)
End Sub

Оценка за ответ: 5
 
Отвечает:Вячеслав
  Привет.
Я всегда делал так: берешь из поля по одному символу и заменяешь на соответствующий ему один или несколько символов транслитерации. Пример не шлю. по-моему это элементарно.

Оценка за ответ: 4
 
Отвечает:Bourn
  Элементарно, возьмем к примеру функцию куда будет передаваться заданный текст, и возвращаться нормальный.

Public Function ConvertToNormal(ByVal InputVal As String) As String
Dim TypeOfConvert As Integer, ConvertionMassive(1 To 2) As String
For x = 1 To 20
ConvertionMassive(1) = ConvertionMassive(1) + Chr(x)
ConvertionMassive(2) = ConvertionMassive(2) + Chr(x)
Next x
ConvertionMassive(1) = ConvertionMassive(1) + "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,йцукенгшщзхъфывапролджэячсмитьбю.ё1234567890-=\Ё!""№;%:?*()_+/ QWERTYUIOP{}ASDFGHJKL:""ZXCVBNM&lt;&gt;?qwertyuiop[]asdfghjkl;'zxcvbnm,./`1234567890-=\~!@#$%^&*()_+|"
ConvertionMassive(2) = ConvertionMassive(2) + "QWERTYUIOP{}ASDFGHJKL:""ZXCVBNM&lt;&gt;?qwertyuiop[]asdfghjkl;'zxcvbnm,./`1234567890-=\~!@#$%^&*()_+| ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,йцукенгшщзхъфывапролджэячсмитьбю.ё1234567890-=\Ё!""№;%:?*()_+/"
For x = 1 To Len(InputVal)
ConvertToNormal = ConvertToNormal & Mid(ConvertionMassive(1), InStr(1, ConvertionMassive(2), Mid(InputVal, x, 1)), 1)
Next x
End Function

Оценка за ответ: 5
 


Вопрос 188 [ Ответить ]
  при открытии с помощью макроса Excel текстового файла с количеством строк более 65536 строки не умещающиеся на листе просто не попадают в Excel либо выдает ошибку. как разделить текстовый файл на несколько листов (книг) средствами VBA?
   
Отвечает:Oleg K.
  В зависимости от тех или иных соображений, можно над этим работать в
нескольких направлениях:
1) Самый "ленивый" способ (если длина файла не на много больше порога
в 65536 строк):
Вероятно сейчас в макросе используется Workbooks.OpenText, где есть
параметр StartRow (с какой строки исходного файла импортировать
текст). (Либо, если Вы используете файл как "внешние
данные"--"импорт текстового файла", типа
With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\large_file.txt", _
...
.TextFileStartRow = 1
...
End With
где .TextFileStartRow = 1 идентично по смыслу со StartRow)
Идея состоит в том, чтобы меняя StartRow с 1 на число "икс"
получить доступ к строкам "икс+65536". Но беда в том, что задать
"икс" слишком большим не удасться. Максимум для StartRow:=32767.
Но и то хорошо. С минимальными переделками получаем два макроса,
один возвращает строки 1...65536, второй 32767...98303. (т.е. кусок
32767...65536 дублируется).
Таким образом лимит на число строк легко повышаем в 1,5 раза.
Потребуется лишь кой какая дополнительная работа, связанная с
добавлением кода очистки дублированных строк, а также с
переименованием/пересохранением получаемых книг (для
Workbooks.OpenText).

2) А может не все строки исходного текстового файла нужны изначально?
В вопросе об этом не сказано. Но если предположить, что в
открываемом файле Вам нужны лишь некоторые строки, причем нужных
заведомо меньше 65536 (или есть несколько легко выделяемых групп с
числом строк меньше 65536 каждая, или конечный ожидаемый результат
- Сводная Таблица), то можно присмотреться к Microsoft Query.
Что от Вас потребуется.
Необходимо, чтобы первая строка текстового файла содержала
заголовки столбцов. Второе условие - текстовый файл всегда
находится в одном и том же месте (директории) и имеет одно и то же
имя.
"Данные"--"Внешние данные"--"Создать запрос" В качестве источника
данных укажите "Text Files". Отключите использование мастера
запросов. В диалоге выбора таблиц найдите свой файл. Нажмите на
кнопку SQL если сможете написать запрос вручную, или, дабы не иметь
проблемм с синтаксисом: Меню Query "Вид" ставим галку на "Таблицы"
и "Условия", и работаем как в Access-овском конструкторе запросов.
Написав запрос, Вы его сохраняете, и нажимаете кнопку "Вернуть
данные". Excel спросит куда ему вставить результат. Там же можно,
вместо простой вставки данных, приступить к созданию
Сводной_Таблицы. Это вообще отдельная тема. Но могу заметить, что в
этом случае можно строить Сводную Таблицу по источнику данных с
количеством строк много больше 65536. Ограничивать будет уже только
размер Сводной таблицы (чтобы она не вылезла за размеры листа).
Сам запрос сохраняется в виде файла с расширением ".dqy".
(Простой текстовый файл с хранящимися в нем настройками и текстом
запроса). Возможно одного запроса к Microsoft Query будет
недостаточно, тогда повторяете всю процедуру для следующей группы
записей и т.д.
В результате получите несколько диапазонов. Осталось вывести на
экран панель "внешние данные" (нам отуда понадобится только кнопка
"Обновить все", так что можно ее перенести на какую-то из постоянно
присутствующих панелей). Сохраняем рабочую книгу.
Теперь при обновлении текстового файла-источника Вы в
сохраненной рабочей книге нажимаете "Обновить все" и дзенствуете
лицезрея результат. И ни тебе макросов, ни программирования не
требуется (если не считать написание простейших SQL-запросов на
выборку в конструкторе программированием).
3) Наконец самый "бейсиковский" способ решения. Читать исходный
текстовый файл построчно и также построчно записывать в
промежуточные текстовые файлы длиной не более 65536 строк каждый. А
затем работать уже с ними.

Sub Макрос_вопрос_188()

Dim TextLine
Dim Line_Number

Open "D:\200\F_ALL.txt" For Input As #1 ' Открываем файл источник
Open "D:\200\1_txt.txt" For Output As #2 ' Открываем 1-й файл приемник
Open "D:\200\2_txt.txt" For Output As #3 ' Открываем 2-й файл приемник
Open "D:\200\3_txt.txt" For Output As #4 ' Открываем 3-й файл приемник

Line_Number = 0 ' Счетчик номер текущей строки файла источника

Do While Not EOF(1) ' Цикл Пока не конец файла-источника
Line_Number = Line_Number + 1 ' Увеличиваем счетчик строк
Line Input #1, TextLine ' Считываем строку в переменную
If Line_Number &lt;= 65536 Then
Print #2, TextLine ' Записываем строку в файл "1_txt.txt"
ElseIf Line_Number &lt;= 65536 + 65536 Then
Print #3, TextLine ' Записываем строку в файл "2_txt.txt"
Else
Print #4, TextLine ' Записываем строку в файл "3_txt.txt"
End If
Loop

Close #1 ' Закрываем файл источник
Close #2 ' Закрываем 1-й файл приемник
Close #3 ' Закрываем 2-й файл приемник
Close #4 ' Закрываем 3-й файл приемник

End Sub

Оценка за ответ: 5
 


Вопрос 190 [ Ответить ]
  Сел писать часы со стрелками, и не смог вывести зависимость координат стрелки от секунд, минут, часов. Мож у кого готовый примерчик есть - тоже пойдет.
   
Отвечает:Вова Перекладов
  Примерчик есть.
Создаёщь на форме три Line'a: Min,Sec,Hor
Затем Timer. Interval = 1000 (1 сек)
Код таймера:

pi = 3.14159265
xc = 72
yc = 125
RO = 55
hours = Hour(Time)
minutes = Minute(Time)
seconds = Second(Time)
f0 = pi / 2
stp = -pi / 30
fs = f0 + seconds * stp
Rs = 0.8 * RO
fm = f0 + (minutes + seconds / 60) * stp
Rm = 0.65 * RO
fh = f0 + (hours + minutes / 60) * 5 * stp
Rh = 0.5 * RO

Hor.X1 = xc
Hor.X2 = xc + Rh * Cos(fh)
Hor.Y1 = yc
Hor.Y2 = yc - Rh * Sin(fh)

Min.X1 = xc
Min.X2 = xc + Rm * Cos(fm)
Min.Y1 = yc
Min.Y2 = yc - Rm * Sin(fm)

Sec.X1 = xc
Sec.X2 = xc + Rs * Cos(fs)
Sec.Y1 = yc
Sec.Y2 = yc - Rs * Sin(fs)

Оценка за ответ: 5
 
Отвечает:Fedos
  На пустую форму кидай timer

Option Explicit
Dim HX As Integer, HY As Integer
Dim MX As Integer, MY As Integer
Dim SX As Integer, SY As Integer
Const P As Double = 3.14159265358979
Dim I As Double
Private Sub Form_Load()
Me.ScaleMode = 3
Me.AutoRedraw = True
Timer1.Interval = 1
End Sub
Private Sub Timer1_Timer()
Cls
For I = 0 To 59 Step 1
If I Mod 5 &lt;&gt; 0 Then
Me.DrawWidth = 3
Me.PSet (100 + 80 * Cos((((2 * P) * I)) / 60), _
100 + 60 * Sin(((2 * P) * I) / 60)), RGB(50, 50, 50)
Else
Me.DrawWidth = 5
Me.PSet (100 + 80 * Cos((((2 * P) * I)) / 60), _
100 + 60 * Sin(((2 * P) * I) / 60)), RGB(250, 250, 250)
End If
Next I
HX = 60 * Cos((((2 * P) * Timer) / 60 / 60 / 12) + ((3 * P) / 2))
HY = 40 * Sin((((2 * P) * Timer) / 60 / 60 / 12) + ((3 * P) / 2))
MX = 70 * Cos((((2 * P) * Timer) / 60 / 60) + ((3 * P) / 2))
MY = 50 * Sin((((2 * P) * Timer) / 60 / 60) + ((3 * P) / 2))
SX = 80 * Cos((((2 * P) * Timer) / 60) + ((3 * P) / 2))
SY = 60 * Sin((((2 * P) * Timer) / 60) + ((3 * P) / 2))
Me.DrawWidth = 5
Me.Line (100, 100)-(100 + HX, 100 + HY), RGB(250, 250, 250)
Me.DrawWidth = 4
Me.Line (100, 100)-(100 + MX, 100 + MY), RGB(150, 150, 150)
Me.DrawWidth = 7
Me.PSet (100 + SX, 100 + SY), RGB(25, 25, 25)
End Sub

Оценка за ответ: 5
 


Вопрос 191 [ Ответить ]
  Мож есть у кого пример из книги Д. Эпплмана "Win32API и Visual Basic" на тему модема. Называется CommDemo. Пришлите плз.
   
Отвечает:Роман
  Лучше прочти документацию в MSDN на тему ActiveX Control – Microsoft Communications Controls 6.0

Документация создана для Visual Basic.

Оценка за ответ: 3
 


Вопрос 192 [ Ответить ]
  Здравствуйте, уважаемые программисты. У меня несколько вопросов: Можно ли к проекту подсоеденить файл txt, если можно, то как? Есть ли такой компонент, в котором отображаются и папки и файлы вместе со значками? Создал игру "Кто хочет стать миллионером", проигрываю некоторые звуковые файлы с помощью функции PlaySound, допустим: Dim x as long x = PlaySound(CurDir + "\Wav\million.Wav", 0, H1 Or H10) такая проблема: этот файл проигрывается долго, 30 секунд. В это время программа как будто виснет, и пока файл до конца не проиграется приходится ждать. Можете подсказать такой код, чтобы остановить проигрыш файла. Заранее спасибо!
   
Отвечает:scada01
  Работа с реестром, вот есть материальчик, найдено в интернете:

1. Проигрываем файл в формате *.mp3:

'Функция для проигрывания файлов в формате *.mp3

Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

'чтобы воспроизвести файл
Call mciExecute("play имя вашего файла")

'чтобы закрыть файл
Call mciExecute("close имя вашего файла")

2. Проигрываем файл в формате *.mid:

'Функциядляпроигрыванияфайловвформате *.mid

PrivateDeclare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uRetrunLength As Long, ByVal hwndCallback As Long) As Long

'Открываемфайл

Call mciSendString ("open ИМЯВАШЕГОФАЙЛА type sequencer alias passport", 0, 0,0)

'Проигрываемфайл

CallmicSendString ("play passport", 0, 0, 0)

'Останавливаемфайл

CallmicSendString ("stop passport", 0, 0, 0)

3. Проигрываемфайлвформате *.wav:

Функция для проигрывания файлов в формате *.wav

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

'Проигрываемфайл

Call sndPlaySound("ИМЯВАШЕГОФАЙЛА", 0)

Оценка за ответ: 5
 
Отвечает:Роман
  Чтобы подсоединить обычный файл к любому проекту, нужно использовать VBA.FileSystem. Как с ним работать, можно прочесть в любой документации по VB, хоть в MSDN, хоть в MSOffice. Да, такой компонент существует. Называется Microsoft Common Dialog Control, лучше использовать 6 версию. Кстати это стандартный ActiveX компонент Windows, так что проблемы с его установкой отсутствуют. Во первых если ты использовал инструкцию declare, то название функции может быть любым. Но главное, что в библиотеке windows’а оно одно и то же всегда. Короче нужно вызывать StopSound. И ещё компьютер при проигрывании не виснет, но поскольку был использован монопольный звуковой режим, то естественно одновременно будет проигрываться только один звук. Лучшее решение использовать DirectSound. О том как работать с этой библиотекой под Visual Basic написано в MSDN 2004.

Оценка за ответ: 4
 
Отвечает:Bourn
  1)Обычно делаеться так, изначально компонента VB Resource Editor нет, если же есть читайте дальше пункт 3,
1.Выбираем Меню-&gt;Добавления-&gt;Менеджер Дополнений
2.Находим компонент VB 6 Resource Editor, и выбираем, загрузить при запуске, и Заргужено
3.Выбираем Меню-&gt;Инструменты-&gt;Resource Editor
4.Если нам надо просто как файл, то выбираем Add Custom Resource и выбираем нужный ТХТ файл, можно сделать подругому, выбираем
Edit String Tables, копируем содержимое файла, и вставляем непосредственно в строку.

Оценка за ответ: 4
 


Вопрос 193 [ Ответить ]
  Мой друг учится в институте на заочном. Дали ему решить задачу. Он сам не может, а так как я уже начал изучать VB6.0, то, конечно, он обратился ко мне за помощью. Задача такая: создать программу перестановки в матрице V(A,A) строки, которая имеет наибольшую сумму элементов среди других строк, со столбцом, который имеет наименьшую сумму элементов среди других столбцов. На форме должна быть выведена входная матрица и выходная с произведённой заменой строки и столбца. Я уже форму сделал, написал код для ввода элементов матрицы и вывода входной матрицы в форме. Но никак не могу ещё додумать код нахождения Max-строки и Min-столбца и замены их местами с выводом результирующей матрицы. Время поджимает, другу я пообещал, а результата пока нет. Помогите, кто может!!! Заранее благодарен.
   
Отвечает:scada01
  If bytA(I) &gt; Max Then Max = bytA(I)

Оценка за ответ: 4
 
Отвечает:Роман
  Что касается нахождения максимальной строки и минимального столбца, то она решается в одно прохождение по матрице для каждого условия. Суть в следующем:

Пишем алгоритм прохода по матрице состоящий из двух циклов for, я выбрал этот вид цикла, так как заранее известен размер матрицы

Fori= 1 toРазмерШирины_Высоты
Forj= 1 toРазмерВысоты_Ширины
Next j
Next i

В цикле iнеобходимо поставить условие нахождения максимума или минимума, а цикл jнужен только для перебора подэлементов. В общем если писать от балды, то код будет выглядеть примерно так:

Option Explicit
Const РазмерШирины = 4
Const РазмерВысоты = 5

Private Sub Кнопка3_Click()
Dim Матрица(1 To РазмерШирины, 1 To РазмерВысоты)
Dim Сумма, МаксимальнаяСтрока, МинимальныйСтолбец
Dim i, j As Integer
'Максимальная строка
For i = 1 To РазмерВысоты
Сумма = 0
' Складываем строку
For j = 1 To РазмерШирины
Сумма = Сумма + Матрица(j, i)
Next j
If (МаксимальнаяСтрока &lt; Сумма) Then МаксимальнаяСтрока = Сумма
Next i
'Минимальный столбец
For i = 1 To РазмерШирины
' Складываем столбец
For j = 1 To РазмерВысоты
Сумма = Сумма + Матрица(i, j)
Next j
If (МинимальныйСтолбец &gt; Сумма) Then МинимальныйСтолбец = Сумма
Next i
End Sub

Этот пример для любой матрицы, для квадратной просто замени РазмерШирины и РазмерВысоты на Размер.

Это что касалось нахождение номеров строк и столбца, а вот когда они уже найдены, тогда необходимо написать код для переворота их местами. Лучше всего делать обмен синхронно, то есть идти по номерам строки и столбца меня всю матрицу местами.

Option Compare Database
Option Explicit
Const Размер = 5

Public Sub Обмен(ByRef arg1, ByRef arg2)
Dim arg
arg = arg1
arg1 = arg2
arg2 = arg
End Sub

Private Sub Кнопка3_Click()
Dim Матрица(1 To Размер, 1 To Размер)
Dim МаксимальнаяСтрока, МинимальныйСтолбец
Dim i As Integer
МаксимальнаяСтрока = 2
МинимальныйСтолбец = 3
' Проход с заменой
Fori = 1 ToРазмер
Обмен Матрица(МаксимальнаяСтрока, i), Матрица(i, МинимальныйСтолбец)
Next i
End Sub

Остаётся только адаптировать эти два примера в единую систему, что является элементарной задачей. Сделал бы это сам, но в письме не указана система программирования – VisualBasic 6 от VisualStudio 6? VisualBasic 6.3 от MSOffice 2003? VBScript? Как говорится, изготовитель не несёт никакой ответственности за работу .... Практический совет на будущее: «Никогда не нужно брать чужих заданий, толку ноль, время затрачено, а удовольствия никакого.»

Оценка за ответ: 5
 
Отвечает:*Casper*
  А в чем сложность???
Пусть матрица M() as long

Sub YourSub()
Dim Summ as long
Redim M(100,200)
{Ввод матрицы пропустим}
'Получилось 100 слобцов и 200 строк
'чтобы посчитать сумму n строки
Summ=0
N=24
For i=0 to ubound(m,2)
summ=summ+m(n,i)
Next I
'чтобы посчитать сумму n столбца
Summ=0
N=55
For i=0 to ubound(m,1)
summ=summ+m(i,n)
Next I
'Ну а теперь наверняка можно и выполнить стравнение...
'В одновременно можно сосчитать суммы всех слобцов к примеру
Dim sm()
Redim Sm(ubound(m,1))
For i=0 to ubound(m,2) 'цикл по строкам
for j=0 to ubound(m,1) 'цикл по стобцам
sm(j)=sm(j)+m(j,i)
next j
Next I
'Получили массив сумм sm()

Оценка за ответ: 5
 
Отвечает:Konstantin Petrov
  Привет!
Да. Я согласен, что заочное отделение всегда мало дают занятий, от
этого у студентов плохие знания...
Я рад буду тебе и твоему другу помочь... Но! У меня к вам будет
просьба... В данной программе разберитесь!!! (А не просто так
списывайте...) Хорошо?! Эт же всетаки вам будет на пользу!!!
P.S.: Я в программном коде постарался побольше комментариев написать,
чтобы было ясно вам - как работает программа... И еще: в данной
программе я не стал использовать текстовые поля, лабельки и т.д. Вам
тока нужна одна форма, скидываешь туда код полностью и ВСЕ!!!
Удачи!!! :)

Скачать прикрепленный к ответу файл
Оценка за ответ: 4
 
Отвечает:Bourn
  Вроде чтото типа этого, но изза пересечения строк и столбцов может выйти казус :(.
Const a = 10
Dim V(a, a) As Byte
Dim mx As Integer
Dim my As Integer
Dim maxx As Long
Dim maxy As Long
Dim tx As Long
Dim ty As Long
Dim c As Byte

For X = 1 To a
For Y = 1 To a
V(X, Y) = Rnd * 5
Print V(X, Y);
Next Y
Print ""
Next X

maxx = 0
maxy = 0
mx = 1
my = 1

For Y = 1 To a
maxx = maxx + V(1, Y)
maxy = maxy + V(Y, 1)
Next Y

For X = 1 To a
tx = 0
For Y = 1 To a
tx = tx + V(X, Y)
Next Y
If tx &gt; maxx Then
maxx = tx
mx = X
End If
Next X

For Y = 1 To a
ty = 0
For X = 1 To a
ty = ty + V(X, Y)
Next X
If ty &gt; maxy Then
maxy = ty
my = Y
End If
Next Y

For X = 1 To a
c = V(mx, X)
V(mx, X) = V(X, my)
V(X, my) = c
Next X

For X = 1 To a
For Y = 1 To a
Print V(X, Y);
Next Y
Print ""
Next X

Оценка за ответ: 5
 


Вопрос 194 [ Ответить ]
  Можно ли сделать так, чтобы когда нажимаешь на крестик, программа не закрывалась бы, а допустим вызывалась процедура Иконка_В_Трей?
   
Отвечает:Romualds
  Private Sub Form_Unload(Cancel As Integer)
Cancel=1
End Sub

Оценка за ответ: 5
 
Отвечает:scada01
  В событие Unloadформы пропиши код для работы с трем и посмотри что получиться, сам не пробовал

Оценка за ответ: 5
 
Отвечает:amd1991
  Надо повесить нужный код на событие Form_Unload()

Оценка за ответ: 5
 
Отвечает:Вова Перекладов
  В Form_Unload прописываешь событие, которое должно выполняться при
нажатии на крестик.

Оценка за ответ: 5
 
Отвечает:*Casper*
  Послан пример с пояснениями.
Изучай, пользуйся.

Скачать прикрепленный к ответу файл
Оценка за ответ: 5
 
Отвечает:Буглаков Сергей Александрович
  Для начала, здравствуйте!
Нажатие на крестик можно отследить в стандартном событии Form_Unload.
Вот пример:

Private Sub Form_Unload(Cancel As Integer)
'здесь вызываешь свою процедуру
Иконка_в_трей

Cancel = 1

'а вот здесь заменишь Form1 на имя своей формы
Form1.hide
End Sub

Оценка за ответ: 5
 
Отвечает:Копылов Сергей
  Событие Form_QueryUnload реагирует на нажатие кнопки закрыть и вообще
закрытия формы. В нем естественно можно писать всё что угодно.

Оценка за ответ: 5
 
Отвечает:anton
  Можно!
Просто в событии формы unload пишешь Cancel = 1, примерно так:

Private Sub Form_Unload(Cancel As Integer)
Cancel = 1
End Sub

и там же, под отменой, можнодописать процедуру сворачивания в трей, или
куда понадобится, но я пользуюсь компонентом, который умеет работать с
треем.

Оценка за ответ: 5
 
Отвечает:Enef
  В процедуре оброботки событей формы QveryUnload(За точность названия не отвечаю) пишеш

Cancel = true

Call SystemTreyAdd 'ну или как она у тебя называеться

Оценка за ответ: 5
 
Отвечает:Bourn
  в функцию Form_QueryUnload, вставляем Cancel = True или Cancel = 1, и после этого вызываем сворачивание в трей.

Оценка за ответ: 5
 


Вопрос 195 [ Ответить ]
  Создаю справочник телефонов, есть две колонки: "e-mail", "Адрес сайта". Можно ли сделать так, чтобы при нажатии на кнопку Написать_письмо, открывалась бы почтовая программа и окно, где набираешь текст письма, и чтобы при нажатии на кнопку Открыть_сайт открывался бы браузер и именно тот сайт. Заранее спасибо!
   
Отвечает:Romualds
  ''[General]
Option Explicit
Private Declare Function ShellExecute& Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hWnd As Long, ByVal _
lpOperation As String, ByVal lpFile As String, ByVal lpParameters As
String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long)

'' [SUB e-MAIL]
Call ShellExecute(0&, "Open", "mailto:romaxsoft@mail.ru" + "?Subject="
+ "????????? ??????????? ?????", "", "", 1)

'' [SUB Browser]
Call ShellExecute(GetDesktopWindow, "Open",
"http://romaxsoft.chat.ru/index_rus.htm", "", "c:\", SW_SHOWNORMAL)

Оценка за ответ: 5
 
Отвечает:scada01
  Работа с реестром, вот есть материальчик, найдено в интернете:

Запуск почты и Интернета из VB.
Данный пример покажет, как можно создать стандартное окно письма и запустить броузер для просмотра определенной страницы в Интернете.

Вариант 1
Добавьте на форму 2 элемента Label, скопируйте и вставьте на форму следующий код:

Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)
Private Sub Form_Load()
Label1.Caption = "http://visualprogs.narod.ru"
Label2.Caption = "visualprogs@yandex.ru"
End Sub
Private Sub Label1_Click()
Call ShellExecute(0, "Open", Label1.Caption, "", "c:\", 1)
End Sub
Private Sub Label2_Click()
Call ShellExecute(0, "Open", "mailto:" + Label2.Caption + "?Subject=" + "Письмоссайта", "", "", 1)
End Sub

Вариант 2
Call Shell("Start.exe " & "http://visualprogs.narod.ru", 0)
Call Shell("Start.exe " & "mailto:visualprogs@yandex.ru", 0)

Вариант 3
Добавьте на форму 2 элемента Label, скопируйте и вставьте на форму следующий код:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub ExecuteLink(ByVal sLinkTo As String)
On Error Resume Next
Dim lRet As Long
Dim lOldCursor As Long
lOldCursor = Screen.MousePointer
Screen.MousePointer = vbHourglass
lRet = ShellExecute(0, "open", sLinkTo, "", vbNull, SW_SHOWNORMAL)
If lRet &gt;= 0 And lRet &lt;= 0 Then
Screen.MousePointer = vbDefault
MsgBox "Error Opening Link to " & sLinkTo & vbCrLf & vbCrLf & Err.LastDllError, , "frmAbout::ExecuteLink"
End If
Screen.MousePointer = vbDefault
End Sub
Private Sub Label1_Click()
ExecuteLink "mailto:visualprogs@yandex.ru"
End Sub
Private Sub Label2_Click()
ExecuteLink "http://visualprogs.narod.ru"
End Sub

Оценка за ответ: 5
 
Отвечает:amd1991
  Решается так:
1) Открытие сайта
shell "c:\windows\explorer.exe" + UrlOfSite
2) Письмо
shell "c:\windows\explorer.exe mailto:" + E-Mail

Оценка за ответ: 5
 
Отвечает:Роман
  Можно сделать всё, но чтобы не переутомляться программированием, разумно использовать список гиперссылок. Тут не указана система для создания справочника, но если это Access, то проблем не будет. В случае особо изощрённого программного решения можно использовать функции вызова гиперссылок, так как они всегда знают, какая программа является программой по умолчанию. Если же нужно что-то другое, то тут может помочь только VS7 и огромный запас знаний.

Оценка за ответ: 4
 
Отвечает:Вова Перекладов
  Впринципе всё работает, но могут быть проблемы с почтовой программой.

Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String,
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)

Call ShellExecute(0, "Open", "адрес в нете", "", "c:\", 1)
Call ShellExecute(0, "Open", "mailto:"+"адрес почты"+"?Subject="+"Тема", "", "", 1)

Оценка за ответ: 5
 
Отвечает:Fedos
  На форму 2 кнопки

Option Explicit
Private Declare Function ShellExecute& _
Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long)

'эту апи я описывал в ответе на 157 вопрос

Private Sub Command1_Click()
Call ShellExecute(0&, "open", _
"mailto:vb-question@list.ru?subject=Тема%20письма", "", "", 0)
End Sub
Private Sub Command2_Click()
Call ShellExecute(0&, "open", "www.visualbasic.noka.ru", "", "", 0)
End Sub

Оценка за ответ: 5
 
Отвечает:anton
  Чтобы открыть какой-либо сайт через вашу программу надо написать:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
- эту функцию писать обязательно в обоих случаях.

Private Sub Command1_Click()
ShellExecute Me.hwnd, vbNullString, "http://www.vivekpatel.cjb.net", vbNullString, vbNullString, SW_SHOWNORMAL
End Sub

- это для открытия сайтов,
а чтобы открывался почтовик надо написать так:

Private Sub Command1_Click()
ShellExecute 0, vbNullString, "mailto:rocky.fff@usa.net?subject=-AI example-", vbNullString, "", 1
End Sub

Оценка за ответ: 5
 


Вопрос 197 [ Ответить ]
  Здравствуйте. Подскажите как задержать выполнение программного кода на 666 миллисекунд. Желатьельно пример или исходник.
   
Отвечает:Алексеев Сергей Алексеевич
  Ну это просто: Объявляешь в модуле глобальное событие
Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)

Потом, в любом месте, где нужна задержка пишешь:

Sleep 5 ' число - это количество миллисекунд ставишь какое нужно.

Оценка за ответ: 5
 
Отвечает:Роман
  Вызови Delayчерез declare. К сожалению, не могу дать более подробную информацию, так как мне в лом искать её в MSDNбиблиотеке.. Кстати, в VisualStudioесть поисковик вот таких вот полезных функций. Он находится в Tools. По существу это программа которая проходится по Accessбиблиотеке по заданным параметрам, работает как для VisualC++, так и для VisualBasic.

Оценка за ответ: 4
 
Отвечает:Shmeliov Sergey
  Это можно сделать несколькими способами. Приведу 2 из них
1) С помощью Win32 API
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Sub test()
Sleep666
End Sub

2) Собственная функция
Sub MyPause(delay)
' delay -- количество секунд
Dim st
st = Now
Do While DateDiff("s", st, Now) &lt; delay
Loop
End Sub

Sub test()
MyPause 0.666
End Sub

Дополнение. Вообще то второй метод подходит только для целогоколичества секунд.

Оценка за ответ: 5
 
Отвечает:fs
  Private Declare Sub Sleep Lib "kernel32" (ByVal milliseconds As Long)

Например: Sleep (666)

Оценка за ответ: 5
 
Отвечает:*Casper*
  Посмотри APIшку SLEEP(timeout)

Так вот этот таймаут задается в миллисекундах

Оценка за ответ: 4
 
Отвечает:Enef
  Обьявляеш API функцию Sleep (К сожалению обьявление дать не могу так как VB у меня на этом компьютере не установлен)
потом пишеш в любом месте

sleep(666)
все!!!



Оценка за ответ: 5
 
Отвечает:Bourn
  объявляем следующую функцию:
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

и в процедуре используем так
sleep 666

Оценка за ответ: 5
 


Вопрос 198 [ Ответить ]
  Создаю игру РПГ. Возникл вопрос: 1.Как расчитать оптимальный путь от монстра до героя? Поле - массив объектов из 192 PictureBox(16 PictureBox по горизонтали, 12 по вертикали). Название PictureBox - Tail. В свойстве Tag содержится символ. Если "0" - клетка пустая, если "Г" - герой, если "М" - монстр (нельзя проходить), если "П" - патрон (нельзя проходить), если "К" - камень (нельзя проходить).
   
Отвечает:Роман
  Очевидно оптимальный путь, это самый короткий путь по лабиринту строений. Нужно использовать алгоритм прохождения лабиринта. Он стандартный, так что не буду его писать.

Оценка за ответ: 3
 
 
Статья выпуска
Присылайте свои статьи на наш адрес: vb-question@list.ru
 
Юмор

- Дорогая, я принял решение - я бросаю пить!
- Как? Зачем! Кто же теперь будет называть меня красавицей?!

Врач, разглядывая историю болезни, говорит мужу:
- Ваша теща совершенно здорова. Это подтверждают все анализы и ренгеновские снимки.
- А нельзя ли, доктор, чтобы я был совсем спокоен, сделать вскрытие?

- Алле? Да, мой фюрер! Да, мой фюрер! Да, мой фюрер! Да, мой фюрер!...
Звонил мой фюрер, спрашивал: "Я твой фюрер? Я твой фюрер? Я твой фюрер? Я твой фюрер?".

 
Наши партнеры

Рассылки Subscribe.Ru
Visual Basic для новичков и профессионалов
Программирование на Delphi

Хотите стать нашим партнером? Пишите сюда.

 

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.vbforbeginprof
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное