#DEFINE Quit Inkey=Chr(255,107)
Dim Shared As Integer mx,my,mb,anz_win,move_win
Type WizWindow
As Integer id
As String title
As Integer x
As Integer y
As Integer w
As Integer h
End Type
Dim Shared As WizWindow win()
Dim Shared As Uinteger winZ()
Declare Sub InitGUI()
Declare Sub DrawGadgets()
Declare Sub DrawWindow(id As Integer)
Declare Sub WinAdd()
Screenres 640,480,32
InitGUI()
Dim Shared anz_alloc As Uinteger
Sub WinAdd()
anz_win+=1
If anz_win > anz_alloc Then
anz_alloc += 25
Redim Preserve win(anz_alloc) As WizWindow
Redim Preserve winZ(anz_alloc) As Uinteger
End If
With win(anz_win)
.id=1
.title="Testwindow-" & Str(anz_win)
.x=anz_win * 25
.y=anz_win * 25
.w=300
.h=200
End With
winZ(anz_win) = anz_win
End Sub
Dim oldwin As Integer
Do
oldwin = move_win
Getmouse mx,my,,mb
If move_win = 0 Then 'erstmal prüfen ob n fenster aktuell bewegt wird. (Drag-crosslock schutz)
For i As Integer= anz_win To 1 Step -1
If (mx>win(winZ(i)).x And mx<win(winZ(i)).w+win(winZ(i)).x) And (my>win(winZ(i)).y And my<win(winZ(i)).h+win(winZ(i)).y) And mb=1 Then
If i < anz_win Then 'ist ganz sinvoll, um nicht jedes mal die liste zu durchlaufen, wenn das fenster sowieso schon am ende is.
Dim TWinID As Uinteger = winZ(i)
For X As Uinteger = i To anz_win -1
winZ(x) = winZ(x + 1)
Next
winZ(anz_win) = TWinID
End If
'einfach noch eine prüfung hinzu fügen (kann man natürlich optimieren)
'welche prüft, ob man auf das ""bar klickt.
If (mx>win(winZ(i)).x And mx<win(winZ(i)).w+win(winZ(i)).x) And (my>win(winZ(i)).y And my<24+win(winZ(i)).y) And mb=1 Then
'wen dem so ist, dann:
'move
move_win = winZ(i)
End If
Exit For 'exit danach
End If
Next
End If
'wenn move gesetzt, dann move es
If mb=1 Then 'wenn knop gedrückt, dann move ausführen, wenn ...
If move_win = oldwin Then '... fenster selectiert
'diese variante ist deutlich schöner, udn auch sicherer, bei schnellen mausbewegungen.
win(move_win).x = mx
win(move_win).y = my
Else
oldwin = move_win 'ansonsten selektieren (wenn vorhanden)
End If
Else: oldwin = 0 'beim loslassen wird auch drag gelöscht
End If
Sleep 10,1
Screenlock
Cls
Line (0,0)-(640,480),&h376ea5,BF
DrawGadgets()
Screenunlock
Loop Until Quit
End
Sub InitGUI()
For X As Uinteger = 1 To 10
WinAdd()
Next
End Sub
Sub DrawGadgets()
For i As Integer=1 To anz_win
If win(winZ(i)).id=1 Then DrawWindow(winZ(i))
Next
End Sub
Sub DrawWindow(id As Integer)
If id=winZ(anz_win) Then
Line (win(id).x,win(id).y)-(win(id).w+win(id).x,win(id).h+win(id).y),&hFFFFFF,BF
Line (win(id).x,win(id).y)-(win(id).w+win(id).x,win(id).h+win(id).y),&h000000,B
Else
Line (win(id).x,win(id).y)-(win(id).w+win(id).x,win(id).h+win(id).y),&hc0c0c0,BF
Line (win(id).x,win(id).y)-(win(id).w+win(id).x,win(id).h+win(id).y),&h000000,B
End If
End Sub