Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169

Взаимный обмен параметров у объектов (похоже на пятнашки)

06.02.2013, 19:39. Показов 3241. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно организовать обмен текста,цвета,картинок и т.д. у лайбелов и имайджем(но не суть)

допустим у нас есть 6 лайбелов (значения от 1 до 6) и мы перетаскиваем 5й на 1й и их значения меняются местами.
Количество вот таких обменов бесконечно.

Помогите написать кусок обмена параметров.

вот на клепал примерчик.

Добавлено через 23 минуты
Пример : http://youtu.be/MkRTm9weqTk
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2013, 19:39
Ответы с готовыми решениями:

Взаимный обмен значений указателей в параметрах функции
Необходимо создать шаблонную функцию void f(int *x, float *y) в которой *х - указатель на массив, состоящий из целых чисел, *у -...

Обмен картинок в игре "Пятнашки"
Пишу игру пятнашки но без использования элементов формы. Работаю со списками. При нажатии на части картинок должна происходить их замена,...

Обмен данными между главной программой и подпрограммой – через списки параметров
Составить схему алгоритма главной программы и подпрограммы, главную программу и подпрограмму. Значения исходных данных выбрать...

37
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
09.02.2013, 22:30
Студворк — интернет-сервис помощи студентам
Кстати, при запуске кода inv.DS с повышенными правами (Windows 7) форма не воспринимает перетаскиваемый объект (файл) - знак запрета.

Код gaw в порядке.
Миниатюры
Взаимный обмен параметров у объектов (похоже на пятнашки)  
0
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
10.02.2013, 21:54  [ТС]
Запускал без прав и все норм роботало
0
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
11.02.2013, 16:03  [ТС]
Помогите исправить баг (пока заметил только один)
Во втором столбике когда делаешь обмен , то после обмена у кубика начинаются конвульсии.

Еще вопрос:
Что означает % ? (то что величина типа интежер?)
Вложения
Тип файла: rar form9 v2.rar (2.2 Кб, 6 просмотров)
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
11.02.2013, 16:36
Цитата Сообщение от 8i_class Посмотреть сообщение
Что означает % ? (то что величина типа интежер?)
да, именно так

Добавлено через 28 минут
Visual Basic
1
2
Private Sub Timer2_Timer()
If Abs(Label2(ind2).Left - l1) > dh1 Then
1
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
11.02.2013, 18:31  [ТС]
Спасибо
как то не увидел

Добавлено через 1 час 53 минуты
новый баг (код тот же)
второй столбик.
после нескольких случайных перетаскиваний отказывают первые 2 лайбла
отказывают в плане : перетаскиваешь их на другой , они не меняются. (и тот возвращается обратно)
и каждый раз , в разный комбинациях отказывают (первый и второй во втором столбике)
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
11.02.2013, 19:43
уберите второй столбик
работайте с одним столбиком, а размещайте как угодно
(или переделать код в виде функции или процедуры - надо в теме оговаривать что к чему
Цитата Сообщение от 8i_class Посмотреть сообщение
допустим у нас есть 6 лайбелов (значения от 1 до 6)
1
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
11.02.2013, 19:49  [ТС]
сделать больше штук и прописать для каждого координаты ?
ок. попробую...
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
11.02.2013, 19:55
в событии Form_Load загрузку лабелей можно убрать
вот этот фрагмент
Visual Basic
1
2
3
4
5
6
7
8
'For i = 1 To N
'Load Label1(i)
'Label1(i).Move Label1(i - 1).Left + w, Label1(i - 1).Top + 1.2 * Label1(0).Height
'Randomize (Timer)
'Label1(i).BackColor = RGB(Int(Rnd * 255) + 1, 255 - Int(Rnd * 255), Int(Rnd * 255) + 1)
'Label1(i) = i + 1
'Label1(i).Visible = True
'Next i
обозначить сколько их есть N= и просто расставить на форме вручную (копи-вставить)
с нужными фоном и содержимым
1
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
13.02.2013, 13:35  [ТС]
И еще вопрос
Вот я совершил какое то количество операций обмена.
Как проверить все ли стоят на своем месте ?
Ну например расставить обозначения и названия хим. элементов.
При нажатии на кнопку нужно проверить все ли надписи мы правильно расставили ?
~как то так
Миниатюры
Взаимный обмен параметров у объектов (похоже на пятнашки)  
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
13.02.2013, 14:07
У тебя создано на старте "правильное" множество параметров ?? По нему и сверяй...
0
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
13.02.2013, 14:10  [ТС]
А что конкретно запоминать ?
положения каждого лейбла ?
но ведь у них еще и значение меняется ...
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
13.02.2013, 14:25
Цитата Сообщение от 8i_class Посмотреть сообщение
А что конкретно запоминать ?
положения каждого лейбла ?
но ведь у них еще и значение меняется ...
Запомнить надо всё !! Раз решил менять не только координаты (что было бы проще), то и запоминай всё... "Type" наверно нужен....
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
13.02.2013, 15:37
1 задачу желательно ставить до написания кода
2 как можно четче обозначить последовательность шагов
3 определить перменные (массивы) для работы
4 пробовать ваять код

в противном случае приходится переписывать

по этой задачке
1 количество надписей фиксировано или нет
2 ввести массив для обозначений и названий рус/лат элементов
эти (этот) массив желательно большей размерности чем предполагаемое число выводимых
тогда можно случайно выбирать комбинации, что б не было как бы повторяющихся
3 данные из этих массивов прописываются (случайно) в лейблы
остается в цикле по колич лейб сравнить индексы эл массивов
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
13.02.2013, 18:25
8i_class, тебе надо запомнить группами по три (знакЭлемента + русское + латинское), а потом проверять по рядам - если весь ряд совпал с какой-то группой, значит верно...
0
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
07.06.2013, 19:04  [ТС]
Еще вопрос.
теперь все это нужно переделать под image чтобы менять картинки.
у меня не получается , ошибки всякие вылетают )
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
07.06.2013, 20:16
Цитата Сообщение от 8i_class Посмотреть сообщение
Еще вопрос.
теперь все это нужно переделать под image чтобы менять картинки.
у меня не получается , ошибки всякие вылетают )
Поконкретнее, плз: что делаешь с image и какие ошибки ??!!
0
374 / 12 / 3
Регистрация: 07.12.2012
Сообщений: 169
07.06.2013, 21:09  [ТС]
ну в последней версии программы мы таскали лейбл с его цветом и текстом.
а теперь нужно таскать image и менять местами параметр picture
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.06.2013, 21:15
Лучший ответ Сообщение было отмечено как решение

Решение

Может лучше обернуть нужные типы контролов в класс?
Форма:
Кликните здесь для просмотра всего текста
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
Option Explicit
 
Dim Fld As clsField
 
Private Sub cmdLabels_Click()
    Set Fld = Nothing
    Set Fld = New clsField
    Set Fld.Parent = Me
    Fld.LoadControls "VB.Label", 15
    LocateLabels 40, 20, 50, 50, 100, 50, 5
End Sub
Private Sub cmdPictures_Click()
    Set Fld = Nothing
    Set Fld = New clsField
    Set Fld.Parent = Me
    Fld.LoadControls "VB.PictureBox", 15
    LocatePictureBoxes 35, 35, 50, 50, 100, 50, 5
End Sub
 
Private Sub LocateLabels(Width As Long, Height As Long, _
                   X As Long, Y As Long, _
                   SpacingW As Long, SpacingH As Long, _
                   Rows As Long)
    Dim lX As Long, lY As Long, i As Long, Itm As clsItem
    lX = X: lY = Y
    For Each Itm In Fld.Items
        Itm.Control.Move lX, lY, Width, Height
        Itm.Control.Visible = True
        Itm.Control.Caption = i
        Itm.Control.BackStyle = 1
        Itm.Control.BackColor = QBColor(Rnd * 15)
        lY = lY + SpacingH
        i = i + 1
        If i And (i Mod Rows) = 0 Then lX = lX + SpacingW: lY = Y
    Next
End Sub
Private Sub LocatePictureBoxes(Width As Long, Height As Long, _
                   X As Long, Y As Long, _
                   SpacingW As Long, SpacingH As Long, _
                   Rows As Long)
    Dim lX As Long, lY As Long, i As Long, Itm As clsItem
    lX = X: lY = Y
    For Each Itm In Fld.Items
        Itm.Control.Move lX, lY, Width, Height
        Itm.Control.Visible = True
        Set Itm.Control.Picture = iglIcon.ListImages(Int(iglIcon.ListImages.Count * Rnd) + 1).Picture
        lY = lY + SpacingH
        i = i + 1
        If i And (i Mod Rows) = 0 Then lX = lX + SpacingW: lY = Y
    Next
End Sub

Класс clsField (Обертка для создания группы контролов):
Кликните здесь для просмотра всего текста
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
Option Explicit
 
Dim mItems As New Collection
Dim mParent As Form
 
Public Property Get Items() As Collection
    Set Items = mItems
End Property
Public Property Get Parent() As Form
    Set Parent = mParent
End Property
Public Property Set Parent(Value As Form)
    Set mParent = Value
End Property
Public Function LoadControls(Class As String, ByVal Count As Long) As Boolean
    Dim Tmp As clsItem, Counter As Long
    If mParent Is Nothing Then Exit Function
    Do Until Counter = Count
        Set Tmp = New clsItem
        Set Tmp.Control = mParent.Controls.Add(Class, "arrCtl" & Counter, mParent)
        mItems.Add Tmp
        Counter = Counter + 1
    Loop
End Function
Private Sub Class_Initialize()
    Set mItems = New Collection
End Sub
Private Sub Class_Terminate()
    Dim i As Long, Itm As clsItem
    If Not mParent Is Nothing Then
        i = 0
        Do While i < mParent.Controls.Count
            For Each Itm In mItems
                If mParent.Controls(i) Is Itm.Control Then mParent.Controls.Remove (i): i = i - 1: Exit For
            Next
            i = i + 1
        Loop
    End If
    Set mItems = Nothing
End Sub

Класс clsItem (Непосредствено ловит события и обменивает контролы). Здесь можно сделать в виде интерфейса если планируется добавлять другие типы контролов:
Кликните здесь для просмотра всего текста
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
Option Explicit
 
Dim WithEvents Lab As Label
Dim WithEvents Pic As PictureBox
Dim Ctl As Control
 
Public Property Get Control() As Control
    Set Control = Ctl
End Property
Public Property Set Control(Value As Control)
    Set Ctl = Value: If Ctl Is Nothing Then Unload Me: Exit Property
    Ctl.DragMode = vbAutomatic
    If TypeOf Ctl Is PictureBox Then
        Set Pic = Value: Set Lab = Nothing
    ElseIf TypeOf Ctl Is Label Then
        Set Pic = Nothing: Set Lab = Value
    End If
End Property
 
Private Sub Lab_DragDrop(Source As Control, X As Single, Y As Single)
    If Source Is Ctl Then Exit Sub
    X = Source.Left: Y = Source.Top
    Source.Left = Lab.Left: Source.Top = Ctl.Top
    Lab.Left = X: Lab.Top = Y
End Sub
Private Sub Pic_DragDrop(Source As Control, X As Single, Y As Single)
    If Source Is Ctl Then Exit Sub
    X = Source.Left: Y = Source.Top
    Source.Left = Pic.Left: Source.Top = Pic.Top
    Pic.Left = X: Pic.Top = Y
End Sub
Миниатюры
Взаимный обмен параметров у объектов (похоже на пятнашки)  
Вложения
Тип файла: rar MegaDrag.rar (13.2 Кб, 17 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.06.2013, 21:15
Помогаю со студенческими работами здесь

Сохранение параметров объектов
У меня для моей программы при закрытии второй формы надо как то сделать так, что бы при следующем открытии все параметры объектов этой...

Используя подпрограмму и обмен данными с подпрограммой. Должен быть организован с обязательным использованием параметров
Пожалуйста помогите написать программу и блок-схему к ней. ее надо написать используя подпрограмму и обмен данными с подпрограммой должен...

Сравнение объектов типовых параметров
Как сравнить объекты типовых параметров? Например:class Test&lt;K&gt; { private K a, b; public Test(K x, K y) { a = x;...

Рандомное генерирование параметров объектов
Пишу игрушку..создал класс Rocks namespace StarTrack { class Rocks { public Texture2D RockTexture; ...

Сохранение динамических объектов и их параметров
В общем такая ситуация. Создаю динамические объекты, присваиваю процедуры, чтобы они двигались на форме. Как сохранить эти динамические...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru