Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22

Глобальные переменные

03.10.2021, 14:10. Показов 2882. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для обмена между приложениями, работающими на одном компьютере, предлагалось использовать глобальные переменные. Хотелось бы посмотреть пример такого использования.
Не пойму, как они будут видны.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.10.2021, 14:10
Ответы с готовыми решениями:

Глобальные события в Visual Basic 6
Подскажите, кто знает... Необходимо в программе, реализованной на VB 6 обработать событие (мыши или клавиатуры), которое должно...

Как получить глобальные координаты курсора мыши
Нужно узнать координаты курсора для эмуляции клика кнопки, расположенной на странице в ИЕ. Пробовал просто пересчитать через пиксели на...

Глобальные переменные
Всем привет. Есть Книга, Лист и 5 UserForm-ов. Как реализовать идею, в которой переменная будет доступна везде (во всём проекте?). Ломаю...

34
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
03.10.2021, 16:18
Argus19, а обычный буфер обмена не подходит?
Range("B17").Select
Selection.Copy
Range("D18").Select
ActiveSheet.Paste
при обычном использовании я его использую. Но программировать специально у меня не было цели ещё.
Просто так между прогами офиса как пользователь - без проблем .
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
03.10.2021, 17:10
Цитата Сообщение от Argus19 Посмотреть сообщение
предлагалось использовать глобальные переменные
Кем предлагалось?
0
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
03.10.2021, 17:24
The trick,
Цитата Сообщение от The trick Посмотреть сообщение
Сообщение от Argus19
предлагалось использовать глобальные переменные
Кем предлагалось?
думаю, что это просто афоризм.... Кем-то когда-то.... можно заменить и на "предполагалось" - почти одно и то же.
А Аргусу19 надо просто конекретное решение ))))
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
03.10.2021, 17:31
vedunasv, через глобальные переменные конечно можно, только я думаю автора не устроит такой вариант вследствии отсутсвия синхронизированного доступа. Такие задачи обычно решаются несколько иначе (не зря в винде куча видов IPC). Нужно знать конкретно задачу и уже выстраивать под нее решение. Проще создать глобальный объект, опционально зарегать его в ROT и любым приложением активировать его через GetObject, как это делается с теми же Word/Excel.
0
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
03.10.2021, 17:41
Это уже Argus19 желает получить. Я просто простейший вариант предлагаю....
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
03.10.2021, 19:15  [ТС]
Все решения, которые я нашёл в интернете, имеют довольно хлопотную реализацию. Я сделал управление программным генератором звуковых частот с помощью буфера обмена. Это самый простой вариант, но не гарантирующий использование буфера обмена другими программами и самой Windows.
Понятие "глобальные переменные" На слух звучат привлекательно. Смущает то, что все приложения изолированы и работают в своих участках памяти. Вопрос в области их видимости. По логике, Private и Public видимы в одном приложении, а Global, опять же, по логике, должны видеться всеми приложениями. Но это я так думаю.
Задача простая. Я декомпилировал пару персонажей MS Agent, чтобы не регистрировать их в системе. С ними была странная проблема: пропадала прозрачность и персонаж "замерзал" на месте, хотя в Immediate виделось, что у него меняются координаты и он движется. Вчера, занимаясь совсем другой программой, понял свою ошибку. Теперь задача: передавать команды управления и ожидать завершение анимации. Нужен простой в реализации способ без регистрации в системе. Надеялся, что глобальные переменные будут видимы двумя приложениями и опрос их по таймерам сможет организовать взаимодействие.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
03.10.2021, 19:33
Цитата Сообщение от Argus19 Посмотреть сообщение
Понятие "глобальные переменные" На слух звучат привлекательно. Смущает то, что все приложения изолированы и работают в своих участках памяти. Вопрос в области их видимости. По логике, Private и Public видимы в одном приложении, а Global, опять же, по логике, должны видеться всеми приложениями. Но это я так думаю.
Public и Global почти одно и тоже. И нет, эти переменные не всегда видимы в одном приложении.

Цитата Сообщение от Argus19 Посмотреть сообщение
Теперь задача: передавать команды управления и ожидать завершение анимации. Нужен простой в реализации способ без регистрации в системе. Надеялся, что глобальные переменные будут видимы двумя приложениями и опрос их по таймерам сможет организовать взаимодействие.
Решить можно многими способами. Глобальные переменные тут вообще не нужны как и опрос по таймеру. С точки зрения парадигмы vb6 нужно создать объект который будет управлять анимацией и передать ссылку на него другому приложению. Из другого приложения просто вызывать методы cObj.Play и т.п. Можно поступить по-другому и использовать банальный SendMessage. Я только не пойму для чего нужно несколько приложений, почему не решить в рамках одного приложения?
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
03.10.2021, 19:57  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
почему не решить в рамках одного приложения?
Самым простым решением для вывода прозрачного изображения, "бегающего" по всему экрану, т.е. за пределами формы, как мне показалось, применение FormSplash. У неё нет кнопок и прочего, что будет обрамлять изображение. Но, при наличии еще одной формы, будут вышеописанные "эффекты". Если только модуль и frmSplash, то всё работает нормально.
Если ограничить перемещение персонажа только по форме, то всё решается тривиально. Я вот тут привёл пример:
how can fast find small picture in screen
Никуда он оттуда не денется и не "замёрзнет". Можно форму растянуть на весь экран и нет проблем.
А можно разных персонажей использовать для разных приложений. Для этого желательно, чтобы персонажи были сами по себе. Чтобы их только стартовать и управлять ими. Только, возможно, что кроме меня это никого не заинтересует.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
03.10.2021, 21:54
Цитата Сообщение от Argus19 Посмотреть сообщение
Но, при наличии еще одной формы, будут вышеописанные "эффекты".
Пример в студию.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
03.10.2021, 21:56  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Пример в студию.
Студия маловата. Там более 4Мб в архиве. Я вам когда-то посылал ссылку в личку.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
03.10.2021, 21:59
Argus19, скидывайте пример демонстрирующий проблему без дополнительных функций.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
03.10.2021, 22:18  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
пример демонстрирующий проблему без дополнительных функций.
Надо переписывать бОльшую часть кода. И убирать лишние картинки анимации. Сейчас не готов. Параллельно работаю над другими задачами.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
03.10.2021, 23:00  [ТС]
Нашёл кусок кода.
Тут всё работает из события Form_Load. Но даже в этом случае, при кликом мыши по изображению, происходит проблема.
После появления формы, кроме этого, иногда эффект возникает после вызова Voice.Speak .
Вложения
Тип файла: zip frmSplash.zip (1.02 Мб, 28 просмотров)
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
03.10.2021, 23:26
Argus19, у вас проблема в том что окно не реагирует на сообщения. Вместе со Sleep вызывайте DoEvents - все будет работать нормально.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
03.10.2021, 23:58  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Вместе со Sleep вызывайте DoEvents - все будет работать нормально.
Спасибо. В урезанном варианте сработало.
Добавил в полную программу с основной формой. Voice.Speak делает фон чёрным, но после произнесения фразы, прозрачность восстанавливается. Надо ещё просмотреть код, может что-то пропустил.
Я там наставил SetFocus. Надо посмотреть есть ли смысл каждый раз устанавливать фокус на frmSplash. Наверно это лишнее.
Фокус должен быть на текстовом поле основной формы.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.10.2021, 12:02
Года 3-4 назад тоже делал подобную игрушку.
Только она мышкой двигается и реагирует на клики правой.
Вначале тоже попробовал на VB6, но там свои сложности особенно с тем, чтобы собрать все ресурсы в один исполняемый файл. В этом плане PB находка, есть механизм data секций, куда можно прикрепить всё, что угодно в исполняемый файл, и достать - проиграть по указателю, прямо из памяти встроенными функциями буквально в 1 строчку.
Вложения
Тип файла: zip Miku_Hatsune.zip (9.44 Мб, 38 просмотров)
2
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
04.10.2021, 12:56  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Года 3-4 назад тоже делал подобную игрушку.
Прикольно.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
но там свои сложности особенно с тем, чтобы собрать все ресурсы в один исполняемый файл.
Да. Чтобы собрать всё в файл ресурсов, надо потратить кучу времени. Или писать специальную программу для его создания.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
04.10.2021, 15:06
Цитата Сообщение от Argus19 Посмотреть сообщение
Да. Чтобы собрать всё в файл ресурсов, надо потратить кучу времени. Или писать специальную программу для его создания.
Никакой кучи времени не нужно тратить. Вот проект, где половина кода - это просто декларации, скопированные с API Viewer'а созданный за 40 мин (с учетом реверса исходного приложения):
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Option Explicit
 
Private Declare Function SetLayeredWindowAttributes Lib "user32" ( _
                         ByVal hwnd As Long, _
                         ByVal crKey As Long, _
                         ByVal bAlpha As Byte, _
                         ByVal dwFlags As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
                         Alias "SetWindowLongW" ( _
                         ByVal hwnd As Long, _
                         ByVal nIndex As Long, _
                         ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32.dll" _
                         Alias "GetWindowLongW" ( _
                         ByVal hwnd As Long, _
                         ByVal nIndex As Long) As Long
Private Declare Function PlaySound Lib "winmm.dll" _
                         Alias "PlaySoundW" ( _
                         ByRef pszSound As Any, _
                         ByVal hModule As Long, _
                         ByVal dwFlags As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function GetCursorPos Lib "user32" ( _
                         ByRef lpPoint As Any) As Long
Private Declare Function SendMessage Lib "user32" _
                         Alias "SendMessageW" ( _
                         ByVal hwnd As Long, _
                         ByVal wMsg As Long, _
                         ByVal wParam As Long, _
                         ByRef lParam As Any) As Long
Private Declare Function SetWindowPos Lib "user32" ( _
                         ByVal hwnd As Long, _
                         ByVal hWndInsertAfter As Long, _
                         ByVal x As Long, _
                         ByVal y As Long, _
                         ByVal cx As Long, _
                         ByVal cy As Long, _
                         ByVal wFlags As Long) As Long
 
Private Const WS_EX_LAYERED       As Long = &H80000
Private Const GWL_EXSTYLE         As Long = -20
Private Const ULW_ALPHA           As Long = &H2
Private Const LWA_COLORKEY        As Long = &H1
Private Const SND_ASYNC           As Long = &H1
Private Const SND_MEMORY          As Long = &H4
Private Const WM_NCLBUTTONDOWN    As Long = &HA1
Private Const HTCAPTION           As Long = 2
Private Const SWP_NOMOVE          As Long = &H2
Private Const SWP_NOSIZE          As Long = &H1
Private Const HWND_TOPMOST        As Long = -1
 
Private m_bSound() As Byte
 
Private Sub Form_Load()
    
    SetWindowLong Me.hwnd, GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
    SetLayeredWindowAttributes Me.hwnd, vbWhite, 0, LWA_COLORKEY
    m_bSound = LoadResData(101, "10")
    PlaySound m_bSound(0), 0, SND_ASYNC Or SND_MEMORY
    SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    
End Sub
 
Private Sub Form_MouseDown( _
            ByRef Button As Integer, _
            ByRef Shift As Integer, _
            ByRef x As Single, _
            ByRef y As Single)
    Dim curPos  As Currency
    
    If Button = vbLeftButton Then
    
        ReleaseCapture
        GetCursorPos curPos
        SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, curPos
    
    Else
        If MsgBox("Exit?", vbQuestion Or vbYesNo) = vbYes Then
            Unload Me
        End If
    End If
    
End Sub
 
Private Sub Form_Unload( _
            ByRef Cancel As Integer)
    PlaySound ByVal 0&, 0, 0
End Sub
 
Private Sub tmrFrame_Timer()
    Static s_lFrame As Long
    
    PaintPicture picSequence.Picture, 0, 0, , , s_lFrame * 400
    s_lFrame = (s_lFrame + 1) Mod 71
 
End Sub
Вложения
Тип файла: zip Miku_Hatsune.zip (4.66 Мб, 38 просмотров)
3
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
04.10.2021, 18:12  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Никакой кучи времени не нужно тратить.
У меня 754 изображения, 16 звуковых файлов и 43 описания анимаций. Сейчас все файлы в папках. Чтобы они не потерялись, лучше всё это "богатство" занести в файл ресурсов. Даже не представляю, как это сделать и сколько времени на это уйдёт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2021, 18:12
Помогаю со студенческими работами здесь

глобальные переменные (в модуле)
Доброго времени суток! Программирую кнопку в форме логина и пароля. Создал форму, проверяет нормально, хочу создать счетчик неудачных...

Глобальные переменные в других модулях
привет всем! если в главном модуле Mod1 объявлена переменная Dim Variable as Integer, в зоне Option Explicit, то она глобальная, я...

Как отслеживать глобальные переменные?
Привет. Подскажите как при дебаге отслеживать значения глобальных переменных? В Locals Window их не наблюдается

Как создавать и инициализировать глобальные переменные?
Hi guys and ladys. Суть вопроса в следующем, как создавать глобальные переменные и тут же их инициализировать? Глобальную переменную мы...

Как закрыть форму, не обнуляя глобальные переменные
Где присваивать значение глобальной переменной и объявлять ее? Объявил в модуле, присвоил в Workbook_Open() но после закрытия формы...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru