Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Dark side of Programming
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Страницы: 1, 2
Bourn
И так, начнем уроки «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, все что выше или ниже этого вставляем соответственно выше или ниже вашей процедуры.

В общем-то, все, что я хотел поведать я рассказал, остались сами примеры, те кто что-то не поняли, прошу задавать вопросы, на которые отвечу или я или другие знающие люди.
Bourn
Ну вот и первый пример я не забочусь о оптимизации кода, а только переписываю примеры Хроны, некоторые команды я не знаю поэтому выкручиваясь как могу, тот кто предложит лучшую реализацию я исправлю пример smile.gif.

Код
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
Код
Private FSwap As Integer

Ну, вообще-то, скорее уж: As Boolean (просто в PB нет такого типа данных), и:

Код
FSwap = Not FSwap
Bourn
это не сработает я проверял надо передавать 1 или -1 чтобы инвертировать кнопки мыши и 0 чтобы восстановить
Guevara-chan
Цитата(Bourn @ 30 Dec 2006, 13:21)
это не сработает я проверял надо передавать 1 или -1 чтобы инвертировать кнопки мыши и 0 чтобы восстановить

А разве True не равно -1 и False не равно 0 ?
Bourn
странно а почему у меня выходит что not -1 = 1 ?
Guevara-chan
Цитата(Bourn @ 30 Dec 2006, 14:41)
странно а почему у меня выходит что not -1 = 1 ?

Странно... Весьма. Гм, а Not True ?
DracoLich
Вопрос не в тему, но нужен:
Есть Combobox под именем Cm1... Нужно, чтобы после выбора 1 пункта Combobox под именем Cm2 блокировалась... Какой код нужен?
Bourn
2 DracoLich
такой
Код
Private Sub Cm1_Click()
   If Cm1.ListIndex = 0 Then Cm2.Enabled = False
End Sub

при этом лучше чтобы style был dropdownlist
DracoLich
Спасиб, работает... Еще - как вывести показ переменной в тексте?
Вот код:
vars = val(txt.text)
txt1.text = "Для примера: s="
Что нужно дописать, чтоб значение s вставилось?
Bourn
а s у тебя чему равно?
и зачем vars = val(txt.text)?
если s типа string то просто
txt1.text = "Для примера: s="+s
если нет, то
txt1.text = "Для примера: s="+str(s)
izrukvruki
У меня две маленькие просьбы:
1) дабы не лазить в тему по PB созданной Хроной, можно и в этой теме писать что делает написанная программа
2) маленько и про язык рассказывать (например в первом примере можно было бы рассказать про существуемые типы данных и про правила их объявления)
Спасибо
Bourn
буду комментировать прогу, щас просто не переписываю примеры, тк времени нет экзамены (например следующий экзамен через 3 часа smile.gif)
DracoLich
Цитата
а s у тебя чему равно?
и зачем vars = val(txt.text)?
если s типа string то просто
txt1.text = "Для примера: s="+s
если нет, то
txt1.text = "Для примера: s="+str(s)

Дело в том, что мне нужно несколько переменных в одном сообщении, и они текстовые, т.е. типа "Они пошли в ...(переменная s), и там их встретил ...(переменная d)"

И еще: как можно "заблокировать" выпадающие таблицы? А то я могу и выбирать, и писать свой вариант, что мне совсем не нужно...
Bourn
2 DracoLich
1)читай лучше посты http://forum.df2.ru/index.php?showtopic=47...ndpost&p=143799
2)txt1.text ="Они пошли в "+s+", и там их встретил "+d
и тп
izrukvruki
А как называется элемент управления в который можно вставит/написать несколько абзацев?
Bourn
RichEdit
ну или TextEdit с включенным MultiLine
gamecreator
да и почему в текст едит с мультилайн вручную только 1 строку можно вписать?
izrukvruki
Спасибо Бёрн. Через shift+enter можно несколько строк.

Только у меня что-то русский текст пропадает, когда я его в документ вставляю из поля ТекстЭдит, англицкий текст и цифры нормально встают, а русские буквы заменяются пробелами (или еще чем-то непойму)
Bourn
1)ну обычно я юзаю ctrl+enter
2)попробуй "кирилицу" для документа сделать(разберишь с шрифтами и кодировками)
izrukvruki
Чтоб было можно абзац энтером делать я почтавил EnterKeyBehavior значение true...

Про кирилицу надо попробовать... Спасибо
gamecreator
да кстати как прописать кириллицу на кнопочках?
а зачем значение Want_return?
Bourn
1)в смысле прописать?у тебя корректно она не отображается?
2)непонял, ты где это нашел?
izrukvruki
Want_return тоже не нашел... в справке тоже не нашел.
gamecreator
Борн, вот скрины:
до компиляции - http://gcr.by.ru/1.jpg
после компиляции - http://gcr.by.ru/2.jpg
want_return - http://gcr.by.ru/3.jpg
Bourn
2 gamecreator
так это вобще VC...
насчет кодировки не понял, насчет want_return не знаю могу предположить что может ожидает текстбокс какого то отклика или помещения курсора или еще че smile.gif
gamecreator
хоть и оффтоп, но как сделать возможность абзаца в текстбоксе в VC++?
izrukvruki
1) а как называется вот такой элемент
.

2) если у меня в ТексВокс некое значение, я его меняю, далее хочу закрыть форму, как мне сохранить в том поле значение которое я ввел, чтоб при следующем открытии оно там стояло. Форму я закрываю Unload UserForm....
gamecreator
1) list box
2) эта форма кусок какой-то проги или главное окно? Если кусок проги, то просто огласить ее глобальной, а при открытии формы устанавливать. Если же это главное окно проги, то можно сохранить значение в файле или в реестре
Bourn
2 gamecreator
всмысле возможность абзаца? что это значит я не очень понял, поэтому предложу юзать Tab
2 izrukvruki
1)в делфи вроде есть такой компонент, а в вб придеться изощряться со scrollbar'ом
2)верно gamecreator ответил
gamecreator
0)Абзац=новая строка
Цитата(izrukvruki @ 07 Feb 2007, 16:22)
Чтоб было можно абзац энтером делать я почтавил EnterKeyBehavior значение true...

1)можно поставить spin и текстовое поле (если конечно в ВБ есть спин)
Bourn
Цитата(gamecreator @ 09 Feb 2007, 19:10)
0)Абзац=новая строка

типа перевод строки? multiline не катит?
gamecreator
неа. можно только вставить мультилайн, а написать нельзя.
izrukvruki
Как мне значение переменной из одной процедуры передать в другую...

вот например сначала идет

Private Sub CommandButton1_Click()
bukva = "exp"
End Sub

Далее (в другом месте но программа этаже) хочу вот так
Private Sub CommandButton1_Click()
ex_n = "E:\" + TextBox3 + bukva + ".eps"
End Sub

переменная bukva - во втором случае не определена (bukva ="")
Bourn
объяви переменную глобально
в форме
dim bukva as string
или
private bukva as string
если из модуля то
public bukva as string
izrukvruki
В 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)
Bourn
1)у меня стоит VB6.6 попробуй до него обновить
2)попробуй написать без объявления переменных
3)попробуй написать одну строчку msgbox(mid("1234567", 4, 2))
4)ты это пишешь в чистом модуле?
izrukvruki
1) не могу, ибо на работе - у меня работает (VB6.0), а рядом на компе не работает (6,3)
2) без объявления переменных, тем более не работает у него (а у меня работает, поэтому пришлось вначале написоть Option Explicit)
3) у меня выскакивает "45", а у соседа опять ошибка и MID подсвечивает
4) вроде в чистом. вообще-то у меня VBA. Форма есть с кнопкой, нажимаю и началась процедура в которой есть эта функция
Bourn
те ты пишешь через office? а сосед?
izrukvruki
Не в Офисе, а в CorelDraw10...

Спросил у системщика, почему разные версии VBA стоят, он же Корел с одного и того же диска ставил, он сказал, что возможно у соседа версия 6,3 выскочила в кореле из офиса (или из какой нибудь другой - более свежей проги, чем корел10), который у соседа ставился после корела, а у меня сначала офис потом корел - это возможно??? И системщик сказал, что еще возможно из-за ОС - у меня 98, у соседа 2000...
Наверное ему просто корел10 переустановить надо - но у нас системщик очень труден на подъем...
izrukvruki
Такая ситуация: сначала открываю файл, и пересохраняю его

OpenDocument Name1
...
ActiveDocument.SaveAs Name2

Но вот если Name2 открыт - вылетает ошибка. может быть можно как-то провести проверку на открыт файл или не открыт???

On Error Resume Next
конечно ошибку игнорирует и не вылетает, но хотелось бы ошибку отловить и предотвратить
Bourn
на счет VBA я не знаю но можно ошибку отловить
On Error Resume goto label
тут код
label:
msgbox err.description
izrukvruki
Я наверное всех заманал со своим Бейсиком, но объясните дурачине:

как в переменную записывать из файла данные?
и как обратно, потом данные заисать в файл?
gamecreator
мб read, write?
izrukvruki
это в паскале... тут что-т типо input и print

но я не знаю как файлы открывать и как к ним обращаться
gamecreator
тьху, действительно с паскалем перепутал
Irh
Новая фича БОРа:
Цитата(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... smile.gif

Добавлено ([mergetime]1202465393[/mergetime]):
(не делайте так, если не уверены!)
Shaidar Haran
А если сделали - убейте scipthost в диспетчере запущенных процессов.
Irh
ИЛИ пЕРЕзагрУЗИтьсЯ... А ИМЕнно- УБРать ПРОЦесс WScriPt.Exe.
Shaidar Haran
Цитата(Irh @ 08 Feb 2008, 15:48)
ИЛИ пЕРЕзагрУЗИтьсЯ... А ИМЕнно- УБРать ПРОЦесс WScriPt.Exe.

а, да, scripthost и есть wscript.exe smile.gif
еще прикольно все это хозяйство совать в автозагрузку smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.