Type Liste sortieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

BigSnake

Betreff: Type Liste sortieren

BeitragMo, Mai 03, 2004 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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-BIT

Gast

BeitragMo, Mai 03, 2004 12:04
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

BeitragMo, Mai 03, 2004 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
FoundIndex = CurIndex

das wird noch im Code davor zugewiesen
 

HOT-BIT

Gast

BeitragMo, Mai 03, 2004 12:47
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

BeitragMo, Mai 03, 2004 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wars. Dickes Danke Very Happy
 

HOT-BIT

Gast

BeitragMo, Mai 03, 2004 13:06
Antworten mit Zitat
Hi !

Bitte !

Bin dir aber viel mehr schuldig Smile

Toni

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group