Взаимный обмен параметров у объектов (похоже на пятнашки) - VB
Формулировка задачи:
Нужно организовать обмен текста,цвета,картинок и т.д. у лайбелов и имайджем(но не суть)
допустим у нас есть 6 лайбелов (значения от 1 до 6) и мы перетаскиваем 5й на 1й и их значения меняются местами.
Количество вот таких обменов бесконечно.
Помогите написать кусок обмена параметров.
вот на клепал примерчик.
Пример : http://youtu.be/MkRTm9weqTk
Решение задачи: «Взаимный обмен параметров у объектов (похоже на пятнашки)»
textual
Листинг программы
Dim xp As Single, yp As Single Dim t As Single, l As Single Dim ind1% Dim w%, h% Dim tr As Boolean, tr1 As Boolean Dim N%, dh Private Sub Command1_Click() For i = 1 To N Randomize (Timer) Label1(i).BackColor = RGB(Int(Rnd * 255) + 1, 255 - Int(Rnd * 255), Int(Rnd * 155) + 1) Next i End Sub Private Sub Form_Load() dh = 200 Timer1.Enabled = False: Timer1.Interval = 2 N = 9 With Label1(0) .BorderStyle = 1: .BackColor = vbGreen: .FontSize = 14: .Alignment = 2 .Caption = 1 w = .Width / 5 h = .Height / 5 .Move w, h Me.Move Me.Left, Me.Top, (N + 1) * .Width / 2, 1.5 * (N + 1) * .Height End With 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 End Sub Private Sub Label1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then yp = Y xp = X t = Label1(Index).Top l = Label1(Index).Left ind1 = Index Label1(Index).MousePointer = 15 tr1 = False End If End Sub Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) If tr = False Then If Button = 1 Then Label1(Index).ZOrder 0 Label1(Index).Move Label1(Index).Left + X - xp, Label1(Index).Top + Y - yp 'prov Index End If Else Label1(Index).Move l, t End If End Sub Private Sub Label1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) prov Index If tr1 = False Then Timer1.Enabled = True 'Label1(Index).Move l, t Label1(Index).MousePointer = 0 tr = False tr1 = False End Sub Sub prov(ind%) For i = 0 To N If i <> ind Then If Abs(Label1(i).Left - Label1(ind).Left) < w And Abs(Label1(i).Top - Label1(ind).Top) < h Then Lbl_p = Label1(ind).BackColor Label1(ind).BackColor = Label1(i).BackColor Label1(i).BackColor = Lbl_p Lbl_p = Label1(ind) Label1(ind) = Label1(i) Label1(i) = Lbl_p tr = True Exit Sub End If End If Next i tr1 = True End Sub Private Sub Timer1_Timer() If Abs(Label1(ind1).Left - l) > dh Then Label1(ind1).Left = Label1(ind1).Left - Sgn((Label1(ind1).Left - l)) * dh Else Label1(ind1).Left = l End If If Abs(Label1(ind1).Top - t) > dh Then Label1(ind1).Top = Label1(ind1).Top - Sgn((Label1(ind1).Top - t)) * dh Else Label1(ind1).Top = t End If Timer1.Enabled = Not ((Label1(ind1).Left = l And Label1(ind1).Top = t)) End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д