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

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


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

Выпуск
50
Дата выхода
09.05.2006
Ответственный за выпуск
Константин
Подписчиков
7431
Архив рассылки
Архив этого выпуска
   

Сайт рассылки
VisualBasic.noka.ru - сайт для любителей Visual Basic. На сайте вы найдете большое количество исходников, статей, компонентов. Книги, программы, форум, статьи, а также другие рассылки нашего портала, помогут вам найти любую исчерпывающую информацию на любой вопрос.

Новости

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

Поздравляю всех с днем победы!

Не могу поверить, но это действительно юбилейный выпуск рассылки! Сегодня 50-й, золотой выпуск. Вот думал, чем бы обрадовать наших постоянных экспертов... Решил я сегодня на каждый путевый ответ ставить отличные оценки. Думаю, эксперты этого заслужили.
Итак, до 60-го выпуска рассылки примерно осталось 2-3 месяца, с учетом, что рассылка будет выходить 3-4 раза в месяц. Это будет юбилейный, 60-й выпуск рассылки. Я долго думал и решил объявить конкурс на самого лучшего эксперта рассылки. Правила просты: в достаточно короткий срок набрать не менее 500 баллов. Но учтите, простыми ответами просто так вы баллы не получите. Со следующего выпуска рассылки простые ответы, за которые ранее ставились 2 и 3 балла не будут оцениваться вообще. Т.е. за такой ответ эксперт получит 0 баллов. Это достаточно справедливо, так как ответив просто на 5 вопросов можно уже было заработать 10 баллов.
Вы думаете, что это не реально? Реально! Давайте применим элементарную математику: обычно в выпуске не менее 5-10 ответов. Соотвественно, если давать ответы хотя бы на 10 вопросов в каждый выпуск, то расчитать все просто:
5 баллов *10 вопросов *10 выпусков = 500 баллов.
Расчет производился с учетом правильного и полного ответа.

А те подписчики, которые будут активно задавать вопросы, получат по 2 балла за каждый заданный вопрос.

Ну и самое главное, ПРИЗ! Победитель получить DVD-диск с очень вкусной начинкой! Дерзайте, за ответы в этом выпуске можно максимально получить 55 баллов!

Вопросы и ответы

Сегодня в выпуске:
Вопросов: 9
Ответов: 20

Десятка лучших

Игорь 167
*Casper* 126
Bourn None 116
visualprogs@yandex.ru 103
Stormbringer 92
Роман 82
Андрей 73
Перекладов Владимир 61
HouseBugs 60
Bullet [PCLO] 59

Новые вопросы

210/Здравствуйте! Как выводить на форму вертикальный или наклонный текст? Где-то встречал способ, но не могу найти. Спасибо, Игорь.[Ответить]

211/Уважаемые эксперты. Как в VB.Net перетаскивание картинки сделать таким же наглядным, как в VB6? В VB6 указываешь для перетаскиваемой картинки в качестве свойства DragIcon саму картинку, и таскаешь имено ее. А в VB.Net такого свойства нет и таскаешь какой-то перечеркнутый кружок. Не красиво и не наглядно.[Ответить]

212/В VB6 c помощью ShowDefaultCharacterProperties вызываю в своей программе галерею MS агентов. 2 вопроса по работе с ней. 1) Почему в галерее показывается только 5 стандартных агентов, хотя в C:\Windows\Msagent\Chars их у меня 16? 2) Как передать в программу ссылку на выбранного в галерее агента?[Ответить]

213/Прив всем. Вотпрос такой. Никто не задавался целью не то чтобы написать своего клиента ICQ, а просто разобраться с технологией. Мне надо сделать так, чтобы мой комп периоически отправлял сообщения в аську... Как реализовать? Без дополнительных клиентов. То есть прога сама должна логиниться и писать мне сообщения...[Ответить]

214/в дополнению к 206 вопросу. Для вывода данных из MS SQL использую запрос и DataGrid Public Sub zapros1(sSQL) Set rs = New ADODB.Recordset With rs .ActiveConnection = cn .CursorLocation = adUseClient .CursorType = adOpenKeyset .Source = sSQL .Open End With Set frmZagruzka.DataGrid1.DataSource = rs Files_name = DataGrid1.Text End Sub хотел спросить, есть ли иной путь передачи сведений из MS SQL в части передачи одного значения (например: количества строк)сразу в переменную, кроме как создавать невидимый на форме DataGrid1 передавать ему сведения, а потом забирать из DataGrid1 сведения (как показано выше).[Ответить]

215/Доброго времени суток. Недавно скачал "iRender 3D 2.5", правда не знаю как им пользоваться. Напишите пожалуйста пару примерчиков. Заранее спасибо.[Ответить]

216/Доброго времени суток, уважаемые разработчики. Делаю РПГ. В ней карту, типа Фоллаутовской. Столкнулся с такой проблемой: есть поле с картинкой (местность, вид сверху), по ней двигаеться обьект, в данном случае кружок. Есть черно-белая маска местности.. Так вот как сделать так, чтобы кружок двигался только в пределах белой области маски, а на черную не лез? Заранее благодарю. [Ответить]

217/Здравствуйте! Помогите!!! Расскажите как создавать файлы с данными на VB, заносить в них новые данные, изменять ну и т.д. Ну например хочу сделать прогу типа телефонного справочника, я заношу данные, удаляю и все это должно где то хранится. Я понятия не имею как это сделать. Помогите!!! Если не трудно вышлите ответ на senichka85@mail.ru Заранее благодарен![Ответить]

218/Здравствуйте, у меня два вопроса о защите: 1) Как сделать так, чтобы программа работала только с CD диска. 2) Как сделать так чтобы при установке программа требовала серийный номер, а по истечении 3-х дней без этого номера браковалась или блокировалась.[Ответить]

Вопросы, нуждающиеся в ответах

183/ Как запустить свою прогу как сервис Винды? [Ответить]
184/ Здравствуйте!
Я по поводу субклассирования.
Определяю стандартную оконую функцию в модуле. Как теперь сделать так, чтобы эта функия вызвала другую, именно из той копии класса, которая субклассирует даное окно?
Напремер:
У меня есть три контрола:

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

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

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

А как еще можно субклассировать окно пренадлежащее другому процессу?
SetWindowLong конечно возвращае ошибку. Для этой цели пользовался специальным контролом, но хотелось бы "избавиться" от необходимости его присутствия для даных целей.
[Ответить]

Ответы на вопросы

Вопрос # 88
Здравствуйте. У меня такой вопрос: можно ли из VB послать команду так, чтобы включилась удалённая машина в сети, на которой включен WakeUp on LAN. Если да, то как? За ранееgfd спасибо за оказанную помощь!

Отвечает
Oleg K.
Мне кажется, что Роман начал строить правильную цепочку рассуждений,
но сбился на частности. VS7 скорее всего не потребуется, обойдемся и
тем, что у нас всегда под рукой.

Попробуйте для начала послать на ВЫКЛЮЧЕННУЮ машину
ping 168.192.0.1 (здесь цифры - IP-адрес вызываемой Вами
машины в Вашей сети. Адрес, если не помните, посмотрите в
настройке протокола TCP/IP для сетевой платы)

(Посылать команду можно из под FAR-а, чтобы видеть результат, или
можно просто через ПУСК--Выполнить...)

ЕСЛИ машина "проснется", значит Вы на верном пути.
Т.е. компьютеру действительно должно быть безразлично, что там за
команда, он просто следит за наличием какой-либо активности на
подведомственной ему территории. (У кого компьютер включался при
поднятии телефонной трубки, тот меня поймет).

Сам по себе ping.exe лежит в каталоге DRIVE:\WINDOWS, т.е. всегда "под
рукой". Он имеет кучу параметров, но нам они в данном случае не нужны.

А в каталоге DRIVE:\WINDOWS\HELP\ есть два файла:
Pingname.bat и Pingnum.bat примерно такого содержания
//------------------------//
// Pingnum.bat
//------------------------
ping 198.105.232.1
ping 198.105.232.6
echo off
echo ...
echo Click the Help window to continue with the Internet troubleshooter.
//------------------------//
Вот Вам и пример "от производителя" как этим воспользоваться (*)

(*) Прим. Это для Win98. В более современных системах,
вероятно, будут какие-то отличия, но Вам просто нужно
будет поискать файлы с названием "PING".

P.S. Однако это все в теории. Проверить на практике, к
сожалению, не на чем. Хорошо бы получить подтверждение/опровержение
сказанному.

Оценка за ответ эксперту Oleg K.: 5 баллов

Вопрос # 136
Здравствуйте! У меня возникла проблема: для создания страниц сайта специфической тематики (математика) требуется программа, способная сохранять введенные пользователем в объект Equation данные в формате gif или png [как это делает MS Word, при сохранении документа в html формате. Т.е. технологический процесс такой: введение формул в Ворде, сохранение в html -> получение рисунков -> верстка страницы]. Сохранять данные в виде рисунка не проблема, но размер у них не такой какой необходим. Это и есть проблема: как сделать так, чтобы OLE объект со вставленным Equation'ом, изменял свои размеры в соответствии с изменениями размеров Equation'а (как это реализовано в MS Word)

Отвечает
Александр Паршин
Тебе нужно обратиться в форум там где о дизайне и верстке сайта. Здесь
только по теме VB

Оценка за ответ эксперту Александр Паршин: 3 баллов

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

Отвечает
Александр Паршин
Сходи в книжный магазин и купи книгу какую ты хочешь там полно
информации. После покупки у тебя не возникнут вопросы такие простые.

Оценка за ответ эксперту Александр Паршин: 3 баллов

Вопрос # 175
Вопрос стратегического плана. Есть государственное предприятие - бухгалтерия управления городского образования. Можно ли написать (и стоит ли?)с помощью VB6 и Access 2002 прграмму для начисления заработной платы и удержания налогов, если в управлении работают около 10000 человек. Способ начисления одинаковый почти у всех, но почти у каждого есть свои индивидуальные свойства по математике начисления зарплаты. Есть для этого проекта 15 бухгалтеров с компьютерами. Как лучше сделать (сетевой вариант, но уровень пользователей желает знать лучшего) или локально каждому по несколько учреждений на пк? 1с сложновата с интерфейсом и не все получилось у специалистов по 1с данного профиля, которых приглашали. Они конечно же старались сделать сетевую версию. Спасибо. С уважением Некрасов Андрей.

Отвечает
NGAVT
Здравствуйте, vb-question.
По данному вопросу отвечу: можно сделать такую прогу и не надо для
этого много программистов. Я занимаюсь сию с БД Access, один, так что
если надумаеш, пиши - помогу.

Оценка за ответ эксперту NGAVT: 3 баллов


Отвечает
Yaroslav Nechyporenko
ACCESS имеет ограничение в 1 гига, так что база через месяц с 10000 работниками переполниться. Главный вопрос, который должен задать себе информатик љэто – стоит ли автоматизировать. Если вы говорите, что почти у каждого есть свои индивидуальные свойства по математике начисления зарплаты, то, на мой взгляд, писание программы будет длиться дольше, чем 15 бухгалтеров посчитают это всё на «щётах». А если и пишутся такие программы, то не одинокими программистами-самоучками, а людьми с опытом и не на ACCESS,љ а при помощи мощных СУБД. Представьте себе, что вы создали программку с помощью коллеги, внесли всех своих работников, а перед самой зарплатой она вам упала. Если бы речь шла о кружке программистки в Доме Пионеров, тогда можно и в ACCESS. А на предприятии, да ещё и государственном, не советую.

Оценка за ответ эксперту Yaroslav Nechyporenko: 5 баллов


Отвечает
Елизаров Игорь А
Для предприятия со штатом 10000 человек все-таки лучше брать не самописную программу расчета зарплаты, а готовую.
Причин этому несколько.

1. Для написания подобной проги надо хорошо знать бухгалтерию и трудовой кодекс (наверное даже очень хорошо)
2. алгоритм начисления заработной платы тебе бухгалтерия полностью рассказать не сможет и придется оперировать
фразами.. "почти всегда зарплата вычисляется так.."
3. у многих людей есть какие-то особенности начисления зарплаты
4. 10 000 человек - это наверняка разветвленная сеть с филиалами. Как будет организован обмен и синхронизация данных ?
5. Импорт и экспорт данных. программа на самом деле нужна для формирования каких-то стандартных отчетов, формы должны выдерживаться довольно жестко, но как форма так и алгоритм (да и весь список отчетов) могут довольно часто меняться, например, при изменении законодательства (федерального или регионального)

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

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

ну и еще одно соображение..

Ведь в бухгалтерии сейчас уже есть программка. Скорее всего это какой-то вариант досовской программы расчета зарплаты..

Следует учесть одно обстоятельство..

Время ввода и обработки данных в программах ДОС значительно меньше, чем в программах Windows
То есть программа с тем же функционалом на виндах будет работать значительно медленнее,
для ускорения работы может потребоваться замена всез компов.

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

Оценка за ответ эксперту Елизаров Игорь А: 5 баллов


Отвечает
Konstantin Petrov
Привет!
Мне очень интересен твой вопрос. И с удовольствием тебе помогу его
решить. Тока опиши мне подробно, все свои формулы, какие должны быть
операции у бухгалтеров, и должен ли у них быть главный бухгалтер,
какой тебе нужен анализ, отчеты... Опиши, а я постараюсь тебе
помочь... Я составлял программу сетевую наподобие твоей... Она как раз
будет меньше ресурсов использовать на жестком диске, и не так долго
работать по времени, несмотря на такое количество работников в
предприятии. С уважением, Константин(Мой e-mail: MrMrKot@rambler.ru).

Оценка за ответ эксперту Konstantin Petrov: 5 баллов

Вопрос # 179
Как преобразовать стандартный цвет типа Long в цвета пригодные для использования со структурой TRIVERTEX и функцией GradientFillRect?

Отвечает
Enef
Я не помню сами структуры про которые ты говорил, но думаю что задача у тебя, розложить цвет записаный форматом Long на три составляющих, поэтому попытаюсь обьяснить как это делать:

Переменная Long имеет розмерность 4 байта&HFF|FF|FF|FF,черточки ставить не надо, это просто ярозделил число на байты. Значит так, первый байт нам не нужен, потому что цвет без альфа канала, а именно такой цвет мы и россматриваем, записуется тремя байтами, по одному на каждую составляющую (второй байт - синий цвет, третий- зеленый, а самый младший, четвертый розряд - красный). Значит чтоб получить цвет где синего - &H6B, зеленого- &HA1 и красного- &H89 нам нужно выполнить следущие действия:

longCollor = &H6B * &H10000 + &HA1 * &H100 +&H89 = &H6BA189

Что это значит? Мы значение синего цвета сдвигаем на два байта в лево и в место &H6B получаем &H6B0000, зеленого на один байт и вместо &HA1 получаем &HA100, а красный нам сдвигать не надо так как он и должен быть в самом младшем розряде, и получаем:

&H6B0000 + &HA100 +&H89 = &H6BA189

Для тех кто не привык ориентироваться в шеснадцатеричной системе счисления попитаюсь обьяснить в десятиричной... например у нас есть три числа 5, 7 и 3 и нам нужно записать их одним трехзначным числом друг за дружкой, вот так 573 в даном случае у нас есть 5в розряде сотень, чтобы его получить умножаем нашу 5 на 100,7 в розрядедесятков, это наша 7 умноженая на 10, и в еденицах 3, ее мы ни на что не умножаем:

5 * 100 + 7 * 10+ 3 = 500 + 70 + 3 = 573

Думаю теперь должно бытьпонятно, но это только половина, а именно мы научились собирать с трех составляющих цвет в формате long, а теперь попробуем его розложить, возмем знакомое нам число &H6BA189 и проведе с ними ряд операций:

dim longCollor As long
dim readCollor As byte
dim greenCollor As byte
dim blueCollor As byte
longCollor = &H6BA189
readCollor = longCollor Mod &H100
longCollor = longCollor \ &H100
greenCollor = longCollor Mod &H100
longCollor = longCollor \ &H100
blueCollor = longCollor Mod &H100

Чтобы обяснить что здесь происходит вернемся к десятичному 573 и посмотрим что здесь происходит:

Мы используем оператор остатка от целочисленного деления Mod

Тоесть когда мы делим нацело 573 на 10 у нас в остатке останется 3 тоесть можна записать так:

красныйЦвет = 573 Mod 10 'будет равно 3

дальше нам нужно избавиться от тройки в конце нашей переменной для этого используем оператор целочисленного деления "\" (заметте не "/"!!! Это очень важно так как например 9 / 5 будет равно 2 поскольку при записе в переменную без дробных значений правельный ответ 1,8 усреднится к двум, а нам нужно именно целочисленное деление 9\5 = 1 , тоесть восем десятых у нас отбрасывается). В итоге у нас получается:

573 \ 10 = 57

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

зеленыйЦвет = 57 Mod 10 'будет равно 7

По знакомому нам механизму убераем 7 и получаем

57 \ 10 = 5

В принципе на этом можна было бы и остановится так как у нас осталась только пятерка, тоесть синий цвет, но не будем забывать что переменная формата long имеет 4 байта так что у нас могло остаться не 05 а к примеру 25 поэтому используем оператор Mod который и для 25 и для 05 даст остаток 5 при делении на 10:

синийЦвет = 05 (или 25 или что там у нас осталось :) )Mod 10 'будет равно 5

Ну вот вроде и все! Удачи в дальнейших эксперементах ;)

Оценка за ответ эксперту Enef: 5 баллов


Отвечает
Fedos
Вообщето, структура TRIVERTEX и функция GradientFillRect мне не знакомы.
Но, могу предложить вариант разбития Long цвета на составляющие RGB.

Private Sub Form_Click()
Dim LC As Long
Dim R As Byte, G As Byte, B As Byte
LC = 12652256 'сдесь Long цвет
R = LC Mod 256
G = LC \ 256 Mod 256
B = LC \ 256 \ 256 Mod 256
Print R
Print G
Print B
End Sub

Оценка за ответ эксперту Fedos: 5 баллов

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

Отвечает
Елизаров Игорь А
так это же самая обыкновенная группировка и суммирование

Но !
в выходной отчет по суммированию не должны попадать ДАТЫ,иначе каждая запись так и будет отдельной строкой, не просуммируется.то есть вначале отбираем данные за период, а потом их суммируем по ID
запрос будет примерно следующим,

select id, sum(cost) as стоимость from baza_name
group by id

Оценка за ответ эксперту Елизаров Игорь А: 5 баллов

Вопрос # 189
Как сделать окно способным принимать файлы из проводника windows (Drag'n'Drop) Заранее спасибо.

Отвечает
0000000h
Создаешь на форме объект, например ListBox.

Назовем его List1.
Ставишь ему свойство OLEDropMode=1
В событии List1_OLEDragDrop пишем код:

Dim a As Integer
Dim FileCount As Integer
Dim FileName As String

List1.Clear 'Очищаем список
b = Data.Files.Count 'Получаем количество бросаемых файлов
For a = 1 To b 'Начинаем цикл получения имен бросаемых файлов
FileName = Data.Files.Item(a) 'Получаем имя файла с индексом a
List1.AddItem FileName 'Добавляем имя файла в листбокс
Next a

Вот и всё. А фантазия позволит это использовать как угодно.

Оценка за ответ эксперту 0000000h: 5 баллов

Вопрос # 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\\DefaultIcon") 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\\DefaultIcon") Это соответственно иконка Dim ckey As RegistryKey = Registry.ClassesRoot.CreateSubKey("Catalogue_of_electronic_books\\shell\\open\\command") Это соответственно с помощью какой программы открывать Пожалуйста Не могли бы вы мне помочь разобраться, если возможно примеры. С уважением Роман Александрович

Отвечает
Александр Паршин
А не проще написать в инсталляторе. То есть создаешь дистриб, а там
есть раздел реестр и туда вводишь нужные данные.

Оценка за ответ эксперту Александр Паршин: 5 баллов

Вопрос # 204
Как надоело набирать код вручную, хотелось бы знать, не пробовал ли кто исправить это досадное недоразумение и если пробовал, то как? Вот, к примеру, Add-in (в переводе - врезка) для VisualBasic существуют повсеместно, и в VisualStudio 6 и в VisualStudio 7, так же MSOfficeимеет свои особые возможности, особенно такой продукт как Access. Если соединить базу данных с VisualStudio 7 (которая по совместительству называется NET), это же даёт уникальные возможности. К тому же там есть специально созданные для этой цели Wizard’sAdd-in. Предположим такую ситуацию, у меня куча событий вызова от кнопок. Если бы мне надо было в каждую из них автоматически вписать соответствующую функцию вывода звука, то есть определить звуковую схему, то это сколько времени понадобилось бы на эту простейшую операцию, а ведь эти дополнительные функции не единственные. Код всё более и более запутывается, а ведь в программе главное порядок. Или взять автоматический ввод инструкций, причём не в виде текста, а именно как элемент какого-либо списка (древовидного, обычного и так далее). То есть, нужна синхронизация кода и списков, а, следовательно, не обойтись без лексического преобразователя. Вообще существует огромное количество игр с удобным интерфейсом, и ни одной серьёзной системы программирования с такими же особенностями. VisualStudio 7 обрёл много замечательных нововведений по сравнению с VisualStudio 6. Но даже теперь в нём нет автоматизированного ввода инструкций, и предкомпиляционной проверки на допустимость. Легче ведь запретить вводить код неправильно, чем потом проверять ошибки программиста. Ещё один пример VBScript. Конечно, можно использовать PowerEditorи другие подобные программы. Однако это не лучший выход, код то по прежнему существует, он не упорядочен и не сгруппирован. Переход по нему занимает уйму времени. Особо больная проблема поиска функций. Вот тут недавно писали о программном решении сжатия базы данных в Access, а ведь этого не понадобилось бы, не запихни разработчики библиотеки вызов в «RunCommandCompactDataBase», то есть вызов не самой функции, а так сказать через функцию менеджер-функций. Устранение этой проблемы возможно, если бы были введены дополнительные ссылки на различные варианты вызова процедур. За частую не хватает такого способа группировки функций как подразделение его на модули и классы в библиотеках. Следовательно, необходимо считать существующие в библиотеках функции и распределить их по особой системе, в наиболее удобном порядке. Таких способов будет великое множество, но действительно удобных окажется не так уж и много, а следовательно такое вполне по силам. Общий вывод, отказаться от кода путём его запрятывания куда подальше. Присылайте примеры и ссылки на них.

Отвечает
Елизаров Игорь А
так для этого и существуют классы и наследования.

описываешь одну кнопку как класс, а потом говоришь, что все остальные - это экземпляры класса.
И эти экземпляры будут наследовать и методы и события родительского класса.

Оценка за ответ эксперту Елизаров Игорь А: 5 баллов

Вопрос # 206
Я из базы данных получаю набор записей в виде объекта Recordset. Подскажите, как лучше организовать отображение полей объекта Recordset в полях формы, а затем значения полей формы сохранить в полях объекта Recordset. Пишу на VB. Заранее благодарен!

Отвечает
Елизаров Игорь А
Я не совсем согласен с предыдущим высказыванием.

Дело в том, что часто для записи данных необходим какой-то контроль, например фамилия не может содержать цифр, а зарплата - букв дата (в большинстве случаев) не может быть меньше 1900 года

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

Это может быть либо одна запись, либо несколько записей, одновременно умещающихся на экране

Оценка за ответ эксперту Елизаров Игорь А: 5 баллов

Вопрос # 207
Здравствуйте! Как считать описание страницы при загрузки в объект веббраузер?

Отвечает
zombiks
WebBrowser - ??????????????? ??? ??????????
txtLink - ????? ???? ??? ??????
lblStatus - ????????? ??????

Private Sub WebBrowser_StatusTextChange(ByVal Text As String)
On Error Resume Next
txtLink.Text = WebBrowser.LocationURL
Me.Caption = WB.Document.Title
lblStatus = Text
End Sub

Оценка за ответ эксперту zombiks: 5 баллов

Вопрос # 208
Подскажите пожалуйста как сделать программу для открытия и закрытия дверки привода CD при нажатии определенной клавиши. Спасибо.

Отвечает
visualprogs@yandex.ru
Option Explicit
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

'Создаем меню Файл с пунктами Открыть и Закрыть
'Назначаем горячие клавиши в меню
'Ctrl + A - на открытие
'Ctrl + S - на закрытие
Private Sub mnuClose_Click()
'// Закрываем лоток CD-ROM
mciSendString "Set CDAudio Door Closed Wait", 0&, 0&, 0&
End Sub

Private Sub mnuOpen_Click()
'// Открываем лоток CD-ROM
mciSendString "Set CDAudio Door Open Wait", 0&, 0&, 0&
End Sub

Оценка за ответ эксперту visualprogs@yandex.ru: 5 баллов


Отвечает
visualprogs@yandex.ru
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Const VK_TAB = &H9
Const VK_ESCAPE = &H1B

Private Sub Timer1_Timer()

If GetAsyncKeyState(VK_TAB) Then
'// Открываем лоток CD-ROM по нажатию Tab
mciSendString "Set CDAudio Door Open Wait", 0&, 0&, 0&
End If

If GetAsyncKeyState(VK_ESCAPE) Then
'// Закрываем лоток CD-ROM по нажатию Escape
mciSendString "Set CDAudio Door Closed Wait", 0&, 0&, 0&
End If

End Sub

Оценка за ответ эксперту visualprogs@yandex.ru: 5 баллов


Отвечает
anton
Private Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" _
(ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long

Private Sub Command1_Click()
Call mciSendString("Set CDAudio Door Open Wait", 0&, 0&, 0&)
End Sub

Private Sub Command2_Click()
Call mciSendString("Set CDAudio Door Closed Wait", 0&, 0&, 0&)
End Sub

Оценка за ответ эксперту anton: 5 баллов


Отвечает
EnzO)Stalker
В окне кода формы напиши:

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If GetAsyncKeyState(vbKeySpace) Then 'проверка нажатия нужной клавиши, в данном случае [Пробел]
Call mciSendString("Set CDAudio Door Open Wait", 0&, 0&, 0&) 'открытие каретки
Call mciSendString("Set CDAudio Door Closed Wait", 0&, 0&, 0&) 'закрытие карутки
End If
End Sub

Оценка за ответ эксперту EnzO)Stalker: 5 баллов

Вопрос # 209
Здравствуйте. Создаю справочник телефонов. Есть ещё одна проблема. Есть перменная: Номер_телефона. Можно ли сделать так, чтобы, допустим, 05.05.2006 в 12:12:12, программа начинала бы набирать этот номер. Желательно через MSComm. Если что я живу в Бресте. Код города 0162. Заранее спасибо.

Отвечает
visualprogs@yandex.ru

В сети есть пример звонилки от Беляева Данилы, так что ищи и
переделывай под себя.
А на счет запустить в определенное время нет ничего проще.
В dtmDate зфдфешь нужную дута и время и ф таймере проверяешь с
текущим.
Вместо моего END ставь свой код и все...

Option Explicit
Dim dtmDate As Date

Private Sub Form_Load()
'3-месяц 20-число
dtmDate = #3/20/2006 10:28:30 AM#
End Sub

Private Sub Timer1_Timer()
Me.Caption = Now
If Me.Caption = dtmDate Then End
End Sub

Оценка за ответ эксперту visualprogs@yandex.ru: 5 баллов

Советуем подписаться на следующие рассылки


В избранное