Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426

Проба пера - VB6 на нейросети Qwen2.5-Plus

17.02.2025, 20:38. Показов 1687. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попытался пообщаться с нейросетью Qwen2.5-Plus. Промт был такой:
"Напиши программу на Visual Basic 6.
Есть Picturebox с загруженной в него картинкой, его название – picSource. На нём нарисованы линии шириной в 1 pixel, выота вертикальных линий равна высоте picSource, ширина горизонтальных линий рана ширине picSource. Эти линии могут быть нарисованы или только вертикальные, или только горизонтальные или одновременно и вертикальные и горизонтальные. В Listbox с названием lstVerX записаны в сортированном порядке координаты X вертикальных линий, в Listbox с названием lstHorY записаны в сортированном порядке координаты Y горизонтальных линий. Напиши программу на Visual Basic 6 которая будет врезать из picSource куски картинки, ограниченные линиями создавать Picturebox-ы с соответствующими размерами без рамки (Border) и преносить эти куски на эти Picturebox-ы. Создаваемые Picturebox-ы должны быть массивом Picturebox-ов, типа picDest(1), picDest(2), picDest(3)… и так далее. В Listbox с названием lstHeight должна записываться высота создаваемого picDest, а в Listbox с названием lstWidth должна записываться ширина создаваемого picDest. Используй API функцию BitBlt()." потом было два-три уточнения с моей стороны, короче в итоге он/она/оно создало такое:
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
Option Explicit
'
' Объявление API функции BitBlt для копирования изображений
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
' Константа для режима копирования изображения
Private Const SRCCOPY = &HCC0020
'
' Объявление динамического массива PictureBox-ов
Dim picDest() As PictureBox ' Динамический массив PictureBox-ов
Dim picIndex As Integer ' Индекс для массива PictureBox-ов
Dim maxFormWidth As Integer ' Максимальная ширина формы frmDest
Dim maxFormHeight As Integer ' Максимальная высота формы frmDest
Dim i As Integer
'
Private Sub Form_Load()
    ' Инициализация индекса
    picIndex = 0
    maxFormWidth = 0
    maxFormHeight = 0
End Sub
'
'=============================================================================
' Сперва рисуем линии
Private Sub Command1_Click()
    Randomize ' Инициализация генератора случайных чисел
    DrawRandomLines
End Sub
'
Private Sub DrawRandomLines()
    Dim lastX As Integer, lastY As Integer
    Dim newX As Integer, newY As Integer
    '
    ' Очищаем ListBox-ы перед новой генерацией
    lstVerX.Clear
    lstHorY.Clear
    '
    ' Добавляем начальные границы
    lastX = 0
    lastY = 0
    '
    ' Генерация вертикальных линий
    Do While lastX + 50 <= picSource.ScaleWidth
        newX = lastX + Int((500 - 50 + 1) * Rnd + 50) ' Случайное значение от 50 до 500
        If newX > picSource.ScaleWidth Then Exit Do
        lstVerX.AddItem newX ' Добавляем координату X в ListBox
        lastX = newX
    Loop
    '
    ' Генерация горизонтальных линий
    Do While lastY + 50 <= picSource.ScaleHeight
        newY = lastY + Int((500 - 50 + 1) * Rnd + 50) ' Случайное значение от 50 до 500
        If newY > picSource.ScaleHeight Then Exit Do
        lstHorY.AddItem newY ' Добавляем координату Y в ListBox
        lastY = newY
    Loop
    '
    ' Рисуем линии
    picSource.Cls ' Очищаем PictureBox перед рисованием
    '
    ' Рисуем вертикальные линии
    For i = 0 To lstVerX.ListCount - 1
        picSource.Line (lstVerX.List(i), 0)-(lstVerX.List(i), picSource.ScaleHeight), vbRed
    Next i
    '
    ' Рисуем горизонтальные линии
    For i = 0 To lstHorY.ListCount - 1
        picSource.Line (0, lstHorY.List(i))-(picSource.ScaleWidth, lstHorY.List(i)), vbRed
    Next i
    '
End Sub
'=============================================================================
'
Private Sub Command2_Click()
    CropAndCreatePictures
End Sub
'
' Делим рисунок на блоки, ограниченные линиями и загружаем эти блоки в создаваемые picturebox-ы
Private Sub CropAndCreatePictures()
    Dim verXCount As Integer
    Dim horYCount As Integer
    Dim i As Integer, j As Integer
    Dim startX As Integer, endX As Integer
    Dim startY As Integer, endY As Integer
    Dim width As Integer, height As Integer
    Dim currentX As Integer, currentY As Integer
    Dim rowHeight As Integer ' Высота текущего ряда
    '
    ' Очищаем ListBox-ы перед новой обработкой
    lstHeight.Clear
    lstWidth.Clear
    '
    ' Получаем количество вертикальных и горизонтальных линий
    verXCount = lstVerX.ListCount
    horYCount = lstHorY.ListCount
    '
    ' Если нет ни одной координаты, выходим
    If verXCount < 2 Or horYCount < 2 Then Exit Sub
    '
    ' Убедимся, что форма frmDest загружена
    If frmDest Is Nothing Then Load frmDest
    frmDest.Show ' Показываем форму, если она еще не видна
    '
    ' Инициализация начальных координат
    currentX = 0
    currentY = 0
    rowHeight = 0
    '
    ' Цикл по всем прямоугольникам, ограниченным линиями
    For i = 0 To verXCount - 2
        startX = lstVerX.List(i)
        endX = lstVerX.List(i + 1)
        width = endX - startX
        For j = 0 To horYCount - 2
            startY = lstHorY.List(j)
            endY = lstHorY.List(j + 1)
            height = endY - startY
            '
            ' Создаем новый PictureBox на форме frmDest
            CreatePictureBoxOnForm frmDest, width, height, startX, startY, width, height, currentX, currentY
            ' Обновляем максимальную ширину формы
            If currentX + width > maxFormWidth Then maxFormWidth = currentX + width
            '
            ' Обновляем высоту текущего ряда
            If height > rowHeight Then rowHeight = height
            '
            ' Добавляем отступ и сдвигаем по горизонтали
            currentX = currentX + width + 3 ' Отступ 3 пикселя
        Next j
        ' Переход на следующую строку
        currentY = currentY + rowHeight + 3 ' Отступ 3 пикселя между строками
        currentX = 0 ' Сбрасываем горизонтальную позицию
        rowHeight = 0 ' Сбрасываем высоту строки
    Next i
    '
    ' Устанавливаем размер формы frmDest
    AdjustFormSize frmDest, maxFormWidth, maxFormHeight
    '
End Sub
'
' Функция для создания PictureBox на форме frmDest
Private Sub CreatePictureBoxOnForm(ByRef destForm As Form, ByVal w As Integer, ByVal h As Integer, ByVal srcX As Integer, ByVal srcY As Integer, ByVal destWidth As Integer, ByVal destHeight As Integer, ByVal leftPos As Integer, ByVal topPos As Integer)
    '
    ' Увеличиваем индекс для массива PictureBox-ов
    picIndex = picIndex + 1
    '
    'ЗДЕСЬ ПИШЕТ "Subscript out of range"
    '
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ' Реорганизуем массив, если достигнут его текущий предел
    If picIndex > UBound(picDest) Then
        ReDim Preserve picDest(picIndex) ' Увеличиваем размер массива
    End If
    '
    ' Динамическое создание нового PictureBox
    Load picDest(picIndex)
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    '
    ' Настройка свойств нового PictureBox
    With picDest(picIndex)
        .Visible = True
        .width = w * Screen.TwipsPerPixelX ' Преобразование пикселей в твипы
        .height = h * Screen.TwipsPerPixelY ' Преобразование пикселей в твипы
        .BorderStyle = 0 ' Без рамки
        .Left = destForm.ScaleX(leftPos, vbPixels, vbTwips) ' Располагаем относительно формы
        .Top = destForm.ScaleY(topPos, vbPixels, vbTwips)
        .Container = destForm ' Размещаем PictureBox на указанной форме
    End With
    '
    ' Копирование части изображения с помощью BitBlt
    Call BitBlt(picDest(picIndex).hDC, 0, 0, destWidth, destHeight, picSource.hDC, srcX, srcY, SRCCOPY)
    '
    ' Записываем размеры в ListBox-ы
    lstWidth.AddItem destWidth
    lstHeight.AddItem destHeight
    '
End Sub
'
Private Sub AdjustFormSize(ByRef destForm As Form, ByVal totalWidth As Integer, ByVal totalHeight As Integer)
    ' Преобразуем пиксели в твипы для установки размера формы
    destForm.width = destForm.ScaleX(totalWidth, vbPixels, vbTwips) + 300 ' Добавляем небольшой запас
    destForm.height = destForm.ScaleY(totalHeight, vbPixels, vbTwips) + 300 ' Добавляем небольшой запас
End Sub
'
Private Sub Form_Resize()
    If frmMain.WindowState <> vbMinimized Then
        picSource.Move 0, 0, frmMain.ScaleWidth, frmMain.ScaleHeight
    End If
    picSource.Refresh
End Sub
Но VB выдаёт "Subscript out of range" на динамическом создании нового PictureBox уже при picIndex = 1 и я не понимаю где ошибка.
Проект прикладываю.
Вложения
Тип файла: 7z VB6 Qwen2.5-Plus.7z (7.09 Мб, 7 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2025, 20:38
Ответы с готовыми решениями:

Проба пера
Сразу не бить... Имееем библиотеку &lt;div class=&quot;sp-wrap&quot;&gt;&lt;div class=&quot;sp-head-wrap&quot;&gt;&lt;div class=&quot;sp-head folded...

Проба пера. Mitsubishi FX
Накидал первую пробную программу. Так целевого ПЛК на данный момент пока нет на руках, просьба глянуть программу, оценить первую пробу. На...

Проба пера! С чего начать?
Здравствуйте! Я начинающий программист. Подскажите с чего начать выполнение задания, так как сам я теряюсь. Сама картинки прикреплена к...

11
 Аватар для Mikle Quits
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
17.02.2025, 21:15
Visual Basic
1
Load picDest(picIndex)
Разве так можно?
То есть можно, когда picDest() - это уже имеющийся массив контролов на форме (или на другом контейнере), а не просто массив для ссылок на объекты типа PictureBox.
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
17.02.2025, 21:23
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Разве так можно?
Нет. Нужно создавать 1 контрол как массив контролов.
0
 Аватар для Mikle Quits
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
17.02.2025, 22:26
Цитата Сообщение от The trick Посмотреть сообщение
Нужно создавать 1 контрол как массив контролов.
О чём я и написал.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
17.02.2025, 23:04  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Нужно создавать 1 контрол как массив контролов.
У меня шарики за ролики закатились! Это как? Для меня это звучит примерно так: возьмите одно яблоко - теперь оно не одно яблоко, а много яблок!
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
18.02.2025, 01:37
Цитата Сообщение от giaber Посмотреть сообщение
возьмите одно яблоко - теперь оно не одно яблоко, а много яблок!
Я думаю это нужно понимать как одну корзину яблок)
0
sleep
 Аватар для I can
4916 / 4566 / 838
Регистрация: 13.04.2015
Сообщений: 9,698
18.02.2025, 06:25
Цитата Сообщение от giaber Посмотреть сообщение
Это как?
Положить. Переименовать. Копировать, Вставить. "Да". Лишнее удалить.
0
 Аватар для Mikle Quits
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
18.02.2025, 08:24
Цитата Сообщение от I can Посмотреть сообщение
Положить. Переименовать. Копировать, Вставить. "Да". Лишнее удалить.
Да просто поместить контрол на форму и в таблице свойств вписать индекс "0".
0
sleep
 Аватар для I can
4916 / 4566 / 838
Регистрация: 13.04.2015
Сообщений: 9,698
18.02.2025, 08:24
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Да просто поместить контрол на форму и в таблице свойств вписать индекс "0".
Да.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
18.02.2025, 08:57  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Да просто поместить контрол на форму и в таблице свойств вписать индекс "0".
Да это первым делом я сделал - не помогло.

Блин вот насторожился я - уже бывало что я пробовал что-то и вроде не получалось а когда здесь на форуме кто-то говорил то же самое сделать после этого вдруг получалось. Короче ща попробую ещё раз
0
 Аватар для Mikle Quits
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
18.02.2025, 09:14
giaber, после этого, естественно, нужно убрать из кода Dim этого массива - он уже есть в форме, и элемент с индексом "0" не создавать - он уже создан.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
18.02.2025, 10:42  [ТС]
Mikle Quits - да, эти моменты понятны, но тут другая напасть в процессе обнаружилась - у листбоксов lstVerX и lstHorY свойство Sorted установлено в True но в процессе выполнения строки несортированые, не могу понять в чём дело. Из-за этого при определении размеров между линиями из меньшего вычетается большее

Добавлено через 17 минут
А! Черт побери! Форматировать же надо! Старый дурак! Ведь сто раз уже делал!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2025, 10:42
Помогаю со студенческими работами здесь

Проба пера. Восьмиканальный диммер на attiny2312.
Здравствуйте. Наконец-то был приобретен осциллограф и начались игры с сетью. Успешно получилось собрать простой одноканальный диммер на...

Нейросети нейросети что это за?
Объясните популярно кто специалист зачем придумали нейросети что это такое вообще? Я узнал о нейросетях совсем недавно, и...

Windows 2000 Rus VB6, VB6 Resource Editor отсутствует
В Windows 2000 Rus + SP3 проинсталлировал Visual Studio 6 + MSDN Full (вся студия на 6 CD-R). В VB6 “Add-In Manager” всего три компонента,...

Контроль длины Label. А также VB6 Portable vs VB6 Installed.
Исходя из заголовка темы, вопроса 2: 1.) Как определить, что в Label уже не хватает места для Caption? Длина букв разная. Например,...

Проба
Private Sub btn2_Click() On Error GoTo Err_btn2_Click Dim stDocName As String Dim stLinkCriteria As String 'Dim...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru