Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131

как правильно вызвать sub?

06.09.2010, 21:50. Показов 1411. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
[code]
Назрело несколько ворпросов об использовании sub'ов
1)как правильно вызвать sub,почему если я пишу
Draw(Player, CountOBlocks, b(), C1)
то выдается сообщение: expected expression
2)почему если массив не объявлен в general,а объявлен в другом sub'е,то в коде
Draw(Player, CountOBlocks, b(), C1)
происходит ошибка и пишеться : expected array или :byref argument type mismath
3)И еще один ламерский вопрос чем sub отличается от Function
Заранее благодарен.
[code/]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2010, 21:50
Ответы с готовыми решениями:

Функции API CreateDesktop и CreateProcess - как их правильно вызвать?
Помогите с вызовом функции. Что не так? Например CreateProcess. Меняю стандартное объявление функции как: Private Declare Function...

Как правильно вызвать JS
Здравствуйте. Есть код: <a class="btn btn-success waves-effect waves-light" href="javascript:;"...

Как правильно вызвать функцию?
Собственно вопрос ясен из заголовка, никак не пойму, как правильно сделать. Выдает ошибку in fuction 'int main()': error: expected...

8
Messir
07.09.2010, 02:19
Функция, в отличие от процедуры, возвращает значение. В остальном они абсолютно одинаковы.
А ошибки оно тебе выдает потому, что когда передаешь параметры в процедуру, их в скобки брать не нужно - это только для функций скобки нужны.
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
07.09.2010, 10:07  [ТС]
Спасибо за разьяснения.
Но ошибка не изчезла указывая на массив он пишет: expected array
хотя он у меня объявлен в другой процедуре.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
07.09.2010, 10:18
1. Sub положено вызывать
Call Draw(Player, CountOBlocks, b(), C1)
либо
Draw Player, CountOBlocks, b(), C1
2. Попробуйте убрать скобки - b вместо b()
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
07.09.2010, 10:34  [ТС]
все равно ему что-то не нравиться все проходит нормально только если объявить все в general
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
07.09.2010, 10:46  [ТС]
для понятности моего вопроса привожу код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Private Sub Form_Load()
  Randomize Timer
  Picture1.ScaleHeight = 1000
  Picture1.ScaleWidth = 1000
  Picture1.AutoRedraw = True
  Load_LeveL_1
 
  Draw player, CountOBlocks, b, C1
End sub
Sub Load_LeveL_1()
 Dim player As Blocks
 CountOBlocks = 2
 Dim b(1) As Blocks
 
 
  With b(0)
 .x1 = 0: .y1 = 0: .x2 = 0: .y2 = 100: .x3 = 100: .y3 = 100: .x4 = 100: y4 = 0: .color = vbRed
 End With
 With b(1)
 .x1 = 900: .y1 = 100: .x2 = 900: .y2 = 100: .x3 = 1000: .y3 = 100: .x4 = 1000: y4 = 0: .color = vbRed
 End With
 With player
  .x1 = 400: .y1 = 800: .x2 = 400: .y2 = 900: .x3 = 600: .y3 = 900: .x4 = 600: .y4 = 900: .color = vbBlack
 End With
 With C1
  .x = 500: .y = 785: .rad = 15: .color = vbGreen
 End With
 End Sub
 
Private Sub Draw(PL As Blocks, count As Integer, WB() As Blocks, c As Circles)
  For i = 0 To count - 1
  Picture1.Line (WB(i).x1, WB(i).y1)-(WB(i).x2, WB(i).y2), WB(i).color
  Picture1.Line (WB(i).x2, WB(i).y2)-(WB(i).x3, WB(i).x3), WB(i).color
  Picture1.Line (WB(i).x3, WB(i).y3)-(WB(i).x4, WB(i).y4), WB(i).color
  Picture1.Line (WB(i).x4, WB(i).y4)-(WB(i).x1, WB(i).x1), WB(i).color
  Next i
  Picture1.Line (PL.x1, PL.y1)-(PL.x2, PL.y2), PL.color
  Picture1.Line (PL.x2, PL.y2)-(PL.x3, PL.x3), PL.color
  Picture1.Line (PL.x3, PL.y3)-(PL.x4, PL.y4), PL.color
  Picture1.Line (PL.x4, PL.y4)-(PL.x1, PL.x1), PL.color
  Picture1.Circle (c.x, c.y), c.rad, c.color
 
 
 End Sub
0
0 / 0 / 0
Регистрация: 04.03.2008
Сообщений: 250
07.09.2010, 11:35
Совершенно правильное поведение - если переменная объявлена в процедуре, она видна только этой процедуре. Если переменная объявлена в области Declarations формы, она видна всем процедурам и функциям формы, или всему проекту, если объявлена, как Public - тогда это будет свойством формы. Переменная, объявленная в модуле, видна всему проекту. Называется все это 'область видимости', и требует правильного использования.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
07.09.2010, 12:12
Переменная

Dim b(1) As Blocks

видна только внутри процедуры Load_LeveL_1 Более того, при выходе из этой процедуры она уничтожается. Попробуйте разместить вызов

Draw player, CountOBlocks, b, C1

внутри процедуры Load_LeveL_1
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
07.09.2010, 14:25  [ТС]
Palva
совет хороший но в данном случае не подходит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2010, 14:25
Помогаю со студенческими работами здесь

Как правильно вызвать процедуру?
как правильно вызвать данную процедуру? procedure n1(i:integer; A:T1); begin for I := 1 to 3 do begin if...

Как правильно вызвать функцию?
Добрый день. подскажите как исправить ошибку: TAsync * Async ; Async = new TAsync; ComPort->...

Как правильно вызвать функцию?
Вопрос как правильно сделать вызов из mainLoop функцию comlastLogin через sortlastLogin. Если напрямую вызывать из mainLoop функцию...

Как правильно вызвать процедуру.
Помогите пожалуйста с вызовом процедур. Вот у у меня есть процедура сортировки: procedure SortVstav(mns:mas;Var ms:mas;Var nop:integer);...

Как правильно вызвать ShellExecute
Не получается открыть ворд файл. Пишу вот такой код. Нету ошибок,но при нажатии на кнопку ничего не происходит( void __fastcall...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru