Type Liste sortieren
Übersicht

![]() |
BigSnakeBetreff: Type Liste sortieren |
![]() Antworten mit Zitat ![]() |
---|---|---|
Folgender Code dient dazu eine Fensterliste so umzustellen, daß das aktivierte Fenster nach oben geholt wird und das vorerst obere um eins nach unten rutscht. Das funktioniert soweit ganz gut. Hat man jedoch nur zwei Fenster und wechselt öfter zwischen dem einen und dem anderen verschwindet plötzlich das eine und das andere kann nicht mehr aktiviert werden. Es muß also irgendwo ein Fehler beim Sortieren passieren.
Code: [AUSKLAPPEN] GUI_LastActive = GUI_WindowActive GUI_WindowActive = GUI_CurWindow ; 1.) Neuen Platz feststellen. Das ist der letzte Freie Platz -1 For CurIndex = GUI_WINDOWS To 1 Step -1 If GUI_Window(CurIndex)\Active <> 0 Then ; Hat ein besetztes Fenster gefunden Exit EndIf Next ; 2.) Alle von dem gefundenen Index bis zum neuen aktiven Fenster um eins nach ; hinten ; 2.1.) Speichert zuerst das neue aktive Fenster zwischen PointerBackup = GUI_Window(FoundIndex) ; 2.2.) Schiebt die anderen nach hinten For Index = FoundIndex To CurIndex Step 1 GUI_Window(Index) = GUI_Window((Index+1)) Next ; 3.) Das zwischengespeicherte Fenster wird an das Ende gesetzt GUI_Window(CurIndex) = PointerBackup GUI_Window ist ein Array mit den Types. Es ist folgendermaßen definiert. Code: [AUSKLAPPEN] Dim GUI_Window.GUI_T_Window(GUI_WINDOWS) EDIT So wie es aussieht liegt das Problem eher im Verschieben der Fenster in Kombination mit dem Fensterwechsel. Hier also der gesamte entsprechende Code Code: [AUSKLAPPEN] If MouseHit(1) Then If (OverActive = False) And (GUI_MoveWindow = 0) Then If GUI_CurWindow > 0 Then ; Die Maus befindet sich über einem Fenster. Jenes wird durch den Click ; automatisch aktiv gemacht. Es wird ganz in den Vordergrund geholt. GUI_LastActive = GUI_WindowActive GUI_WindowActive = GUI_CurWindow ; 1.) Neuen Platz feststellen. Das ist der letzte Freie Platz -1 For CurIndex = GUI_WINDOWS To 1 Step -1 If GUI_Window(CurIndex)\Active <> 0 Then ; Hat ein besetztes Fenster gefunden Exit EndIf Next ; 2.) Alle von dem gefundenen Index bis zum neuen aktiven Fenster um eins nach ; hinten ; 2.1.) Speichert zuerst das neue aktive Fenster zwischen PointerBackup = GUI_Window(FoundIndex) ; 2.2.) Schiebt die anderen nach hinten For Index = FoundIndex To CurIndex Step 1 GUI_Window(Index) = GUI_Window((Index+1)) Next ; 3.) Das zwischengespeicherte Fenster wird an das Ende gesetzt GUI_Window(CurIndex) = PointerBackup EndIf Else ; Elemente des aktiven Fensters bedienen Select GUI_ElementType Case GUI_ELEMENT_TITLEBAR ; Es wurde auf die Titelleiste geklickt. Daraufhin läßt sich das Fenster ; verschieben ... If GUI_MoveWindow <> 0 Then GUI_MoveWindow = 0 ; Läßt ein bewegtes Fenster fallen Else GUI_MoveWindow = FoundIndex ; Berechnet die Koordinaten Verschiebung GUI_MoveDivX = GUI_Window(FoundIndex)\X - GUI_MouseX GUI_MoveDivY = GUI_Window(FoundIndex)\Y - GUI_MouseY EndIf End Select EndIf EndIf If MouseHit(2) Then ; Deaktivieren von bestimmten Funktionen If GUI_MoveWindow <> 0 GUI_MoveWindow = 0 ; Läßt ein bewegtes Fenster fallen EndIf ; Fenster bewegen, die an der Maus haften If GUI_MoveWindow Then GUI_Window(GUI_MoveWindow)\X = GUI_MouseX + GUI_MoveDivX GUI_Window(GUI_MoveWindow)\Y = GUI_MouseY + GUI_MoveDivY EndIf |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi !
hast du nicht vergessen : PointerBackup = GUI_Window(FoundIndex) FoundIndex zu deklarieren ? Welchen Wert hat FoundIndex ? Den Wert von CurIndex, oder ? Toni |
||
![]() |
BigSnake |
![]() Antworten mit Zitat ![]() |
---|---|---|
FoundIndex = CurIndex
das wird noch im Code davor zugewiesen |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hmm,
dann kann ich mir nur vorstellen, daß du du nur bis CurIndex-1 sortieren lassen kannst. Es werden ja alle nach hinten verschoben. Code: [AUSKLAPPEN] For Index = FoundIndex To CurIndex Step 1
GUI_Window(Index) = GUI_Window((Index+1)) Next Wenn du 5 offen hast, das erste und das letzte gewählt sind, geht das nicht Wegen: Index+1 Toni |
||
![]() |
BigSnake |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das wars. Dickes Danke ![]() |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi !
Bitte ! Bin dir aber viel mehr schuldig ![]() Toni |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group