Практическое занятие по Visual Basic 6

Тема в разделе "Изучение основ языка", создана пользователем Kиpилл, 31 июл 2014.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    То что нужно!
    Спасибо.
    Уже собираю проект немного,пока улетел на работу.
    --- Объединённое сообщение, 31 июл 2014, Дата первоначального сообщения: 31 июл 2014 ---
    Форма готова.
    Над украшениями позже поработаю.
    Кнопки работают,запросы отправляются,юмор в наличии.
    http://rghost.ru/57188770

    Вопрос: первая меню отработала,как другое вызывать?
    Через новую форму?
    Еще как то?
     
    Последнее редактирование: 31 июл 2014
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Кирилл, ты исходник выкладывай. Зачем мне EXE.
    Несколько разных по виду и наполнению меню нужно сделать?
    Тогда да, лучше создавать новую форму.

    В правой части, где имя формы (Form1) жми правой кнопкой -> Add Form.

    Чтобы из кода вызвать другую форму:
    Код (vb.net):
    Form2.Show
    Соответственно первую первую форму можно временно спрятать:
    Код (vb.net):
    Form1.Hide
    'или
    me.Hide
    'me - ключевое слово ("меня"). Т.е. код действует на форму, внутри которой этот код написан.
     
    Форма может быть вызвана:
    • модально (нельзя переключаться между формами - пример "Окно служб Windows" и "окно Свойств любой из служб")
    • немодально (можно переключаться - пример любые два окна проводника Windows)

    Чтобы отобразить форму модально:
    Код (vb.net):
    Form2.Show 1
    Немодально:
    Код (vb.net):
    Form2.Show 0
    По умолчанию (если цифру не писать) будет вызвана немодально.
    Надеюсь, ничего не препутал :)
    --- Объединённое сообщение, 31 июл 2014 ---
    Вообще, контролы на форме можно создавать программно,
    например, если тебе заранее неизвестно, сколько нужно создать флажков или кнопок...
    --- Объединённое сообщение, 31 июл 2014 ---
    Также есть такой компонент, как таймер.
    Он позволяет выполнять один и тот же код через N секунд.
    Будет полезно, например, для периодического обновления данных на форме (если к примеру значения в реестре поменялись).
    Такой способ является плохим тоном в программировании, т.к. существуют события.
    Как только что-то изменилось в реестре, твоя программа может получить об этом извещении.
    Но это не для новичков. Идем последовательно от простого к сложному.
     
    Последнее редактирование: 31 июл 2014
  3. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    Да.
    Получается при этом будет открываться новое окно?
    Надо тогда будет делать точное позиционирование,а старое закрывать или делать невидимым.
    В целях безопасности формы делаем модальными.
    http://rghost.ru/57189549

    p.s. пока все не так жутко как я думал)
    --- Объединённое сообщение, 31 июл 2014, Дата первоначального сообщения: 31 июл 2014 ---
    Да,выглядит неплохо.
    Одно но:
    Не забыть при этом активировать его обратно или сразу же закрывать.
    Думаю для разных меню по разному.
    Пока что вторая форма закрывает первую,привидения нам не к чему.

    Вроде разобрался,не хватает только опыта что где и как находится.
    Допилю формы,накидаю меню и кнопки - буду снова писать если возникнут проблемы при создании сложных объектов на основе имени переменных...
    --- Объединённое сообщение, 31 июл 2014 ---
    upload_2014-7-31_23-25-43.png
     
    Последнее редактирование: 31 июл 2014
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    А жутко и не будет. У тебя ведь конкретная задача.
    Многого знать не нужно.
    Главное правильно представить в голове алгоритм.
    Если предполагается использовать один и тот же участок кода несколько раз,
    лучше оформить его как отдельную функцию, в которую передавать нужные параметры.

    Если нужно выйти из программы (а значит и выгрузить все формы),
    можно написать просто оператор End.

    Важное правило.
    Первой строкой всегда пиши: Option Explicit
    Тогда среда тебя буквально заставит всегда объявлять переменные:
    Код (vb.net):
    Dim Title
    Это поможет тебе не ошибиться с их написанием, если ты где-то случайно сделаешь опечатку Titlee.
     
  5. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Если нужно показать 1-ю форму после закрытия крестиком 2-й,
    нужно создать событие "Запрос на закрытие формы" (Query Unload) или событие "После выгрузки из памяти формы" (Unload).

    Для этого:
    1) переходишь в окно кода 2-й формы.
    2) в левом выпадающем списке выбираешь "Form"
    3) в правом - QueryUnload

    Query Unload.png

    Будет создано событие:

    q.png

    Внутри события пишешь, как обычно:
    Код (vb.net):
    Form1.Show
    Кстати, если внутри процедуры написать:
    Код (vb.net):
    Cancel = true
    то форму нельзя будет закрыть крестиком.
    --- Объединённое сообщение, 31 июл 2014, Дата первоначального сообщения: 31 июл 2014 ---
    На счет твоего меню:
    - проще сделать 3 кнопки, чем OptionButton-ы.

    Но это твоя прога, так что я не лезу.

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

    Справочник VBA. Операторы и функции в принципе все те же.
    Разница только в событиях формы.

    Если хочешь знать, что означают события и параметры как Cancel, UnloadMode
    -> берешь справочник VB Крепкий орешек -> Разное полезное -> Описание событий VB -> ищешь например "QueryUnload".
    --- Объединённое сообщение, 31 июл 2014 ---
    Ну, тут способов много:
    гугл, справочник, книга, спросить, пощелкать...
    Я предпочитаю последнее :)
     

    Вложения:

    Последнее редактирование: 31 июл 2014
    Kиpилл нравится это.
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Замечания по стилю.
    Давай сразу учиться правильным общепринятым отступам:

    Внутри процедуры все строки пишутся со знака табуляции:

    Код (vb.net):
    Private Sub run_Click()
        If Ustanovka.Value = True Then
            MsgBox "Priva ета кнопка 1)))"
        else
            MsgBox "О_о. Здесь такого не было :)"
        End If
        If Nastroika.Value = True Then
            MsgBox "Priva это ж кнопка 2"
        End If
    end sub
    3-я строка - еще 1 знак табуляции.

    Теперь стандарт на счет названий контролов.
    Если даешь им свои имена, не забывай пожалуйста ставить вначало префикс типа контрола.
    Например, вместо Ustanovka пиши optUstanovka. (opt - от слова optionButton)
    Тогда будет понятно к чему название относится.
    Вместо GlavnoeOkno -> frmGlavnoeOkno.

    Другие префиксы:
    Чекбоксы: chkMyCheckBox
    Кнопки: cbMyButton (cb - CommandButton)
     
    Последнее редактирование: 31 июл 2014
    Kиpилл и glax24 нравится это.
  7. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    Dragokas, как сделать так,что бы при нажатии кнопки "Задать имя меню" появлялся textbox,а при повторном нажатии данные передавались бы и textbox скрывался бы опять?
    форма frmUstanovka_Menu

    http://rghost.ru/57233119
     
    Последнее редактирование: 2 авг 2014
  8. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Создаешь TextBox на форме и в его свойствах сразу задаешь Visible = False
    На кнопку вешаешь такой код:
    Код (vb.net):
    if cb1.caption = "Задать имя меню" then
        TextBox1.Visible = True
        cb1.caption = "Применить"
    else
        s = TextBox1.Text
        TextBox1.Visible = false
        cb1.caption = "Задать имя меню"
    end if
     
    В переменной s получаешь введенный текст.
    Когда нажимаешь кнопку, название на ней меняется
    и это служит индикатором того, какую часть кода в IF нужно выполнять.
    cb1 - это имя объекта твоей кнопки. Подправишь сам.
    --- Объединённое сообщение, 2 авг 2014, Дата первоначального сообщения: 2 авг 2014 ---
    GlavnoeOkno - у меня все крякозябликами. Смени шрифт на стандартный.
    Архив vba.rar но это язык vb6 а не vba.
     
    Последнее редактирование: 2 авг 2014
    Kиpилл нравится это.
  9. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    О,получается я параметры могу задавать не только в редакторе или через события,а прямо в коде!
    Это многое объясняет.
     
  10. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    стоит normal text.
    Что то не так,я получаю ошибку:
    Код (vb.net):

    Private Sub cbNameMenu_Click(Index As Integer)
        If cbNameMenu.Caption = "Задать название меню" Then
            txtTypeName.Visible = True
            cbNameMenu.Caption = "Применить"
        Else
             s = txtTypeName.Text
             txtTypeName.Visible = False
             cbNameMenu.Caption = "Задать имя меню"
        End If
       
    End Sub
     
    Ошибкой выделяет .Caption в If cbNameMenu.Caption ,может для кнопки нельзя задавать?
     
  11. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Ты неправильно создал кнопку.
    У тебя все кнопки являются массивом и сейчас имеют такие имена:

    cbNameMenu(0)
    cbNameMenu(1)
    cbNameMenu(2)

    cb.png

    Нужно создавать кнопки заново.
    Если ты создаешь новую кнопку путем "копировать-вставить",
    будет задан вопрос "Создать ли массив кнопок" -> нужно отвечать "нет".
    --- Объединённое сообщение, 3 авг 2014, Дата первоначального сообщения: 3 авг 2014 ---
    Давай начнем с кода для получения названий пунктов контекстного меню.
    Интерфейс пока что ужасен :) Предлагаю чтобы на форме динамически создавались кнопки, идентичные контекстному меню.
     
    Kиpилл нравится это.
  12. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    Интерфейс ужасен,я знаю - щас задача собрать код,украшалки я на потом оставлял.


    Это как?


    Прикинь,я уже почти сам догадался)))
    Читал много тем про caption и не мог понять почему у меня он недоступен.
    Уже хотел на отдельной форме пробовать...

    Ага,давай.
    Тут или в теме про vbs?
     
  13. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Код здесь. А теорию в реестр: http://safezone.cc/threads/glagoly-kontekstnogo-menju-po-umolchaniju.23599/
    Сначала напиши все, какие знаешь разделы реестра,
    отвечающие за показ контекстного меню:
    • для рабочего стола,
    • для папки,
    • для файла,
    • для панели управления ...
    Это так... для практики.

    Какое из этих меню будешь брать в целях задачи с шаблонами?

    На форме должно создаваться меню идентичное контекстному.
    Менять местами пункты можно будет путем их перетягивания.
    Я позже попробую смоделировать.

    Код для запроса имен параметров / разделов сейчас черкону.
     
  14. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    Кстати у тебя в коде кое чего не хватало:
    Код (vb.net):
    Private Sub cbNameMenu_Click()

        If cbNameMenu.Caption = "Задать название меню" Then
            txtTypeName.Visible = True
            cbNameMenu.Caption = "Применить"
        Else
             Dim s
             s = txtTypeName.Text
             txtTypeName.Visible = False
             cbNameMenu.Caption = "Задать имя меню"
        End If
    End Sub
     
    Но это уже не актуально видимо)
     
    Последнее редактирование: 3 авг 2014
  15. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Т.е. следует понимать, как разместить код внутри события нажатия на кнопку.
     
  16. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    Дал ответ в теме.
    --- Объединённое сообщение, 3 авг 2014 ---
    Меню рабочего стола и все объекты.
    Там все четко,все добавляется.
     
    Последнее редактирование: 3 авг 2014
  17. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Kиpилл нравится это.
  18. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    А я кажется понял.
    Делаем аналог меню ,добиваем каждый в объект Visible и drug'n'drop ,не забываем добивать навигацию и опционал и тогда все становится предельно интуитивно просто для пользователя!
    Ну если я так все понял - тогда сразу добивать алгоритм на более глобальный.

    Да?
     
  19. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Можешь помудрить с кодом добавления каскадного меню.
     
  20. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.227
    Симпатии:
    4.980
    Ок.
    Примерно прикинул в уме.
    Давай я сначала с формами закончу а потом уже с реестром?
     

Поделиться этой страницей