Home

Add

Edit

With Linenumbers

Code in Textfield

Download

#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