Τετάρτη 23 Μαρτίου 2016

Αναθεώρηση 195, περισσότερη ταχύτητα! - listbox παράδειγμα

Σε αυτήν την αναθεώρηση αυξήθηκε η ταχύτητα του διερμηνευτή, ένα 5%, μετά από βελτιστοποιήσεις.
Επίσης έγιναν μερικές βελτιώσεις στο EditBox ώστε να δουλεύει το Drag and Drop με πιο αργό οριζόντια κύλιση (όταν το κείμενο είναι σε διαμόρφωση χωρίς αναδίπλωση λέξης). Επίσης τώρα μπήκε από την αρχή να παραμένει ανοικτό (με άσπρο φόντο) το πλαίσιο κειμένου. Επίσης ο δρομέας χάνεται όταν αλλάζουμε πλαίσιο κειμένου και εμφανίζεται όταν γυρνάμε σε αυτό (πριν απλά παρέμενε σταθερός, ενώ αναβοσβήνει όταν θέλουμε να γράψουμε).
Επίσης όταν πάμε να κάνουμε drop σε κάποιο πλαίσιο κειμένου εμφανίζεται ο δρομέας και μπορεί να κυλίσει όπου θέλουμε το πλαίσιο κειμένου, αλλά αν αποσύρουμε το ποντίκι και επιλέξουμε άλλο πλαίσιο, χάνεται πάλι ο δρομέας (όπως θα έπρεπε, αλλά πριν δεν γίνονταν, διόρθωσα σε πιο χαμηλό επίπεδο, στο User Control).

Ένα παράδειγμα με μια λίστα όπου τσεκάρουμε διάφορες πόλεις, Η λίστα είναι διάφανη! Αντί να βγαίνει μια μαύρη μπάρα, τώρα έχουμε ένα χρώμα που ξεχωρίζει την επιλογή μας. Το φόντο είναι διάφανο. Αν κάνουμε κλικ στην επιφάνεια του παράθυρου τότε γίνεται ταξινόμηση. Αν θέλουμε αφήνουμε την ιδιότητα Edit να γίνει True, και τότε μπορούμε να γράψουμε στη λίστα! Το Listbox μπορεί να χρησιμοποιηθεί σαν ένα TextBox, με την διαφορά ότι έχει πολλές γραμμές, οι οποίες δεν αλλάζουν, δηλαδή δεν μπορούμε να προσθέσουμε γραμμή ή να διαγράψουμε καθώς πληκτρολογούμε. Αυτό γίνεται στο EditBox, που είναι ένας κειμενογράφος. Έτσι αν θέλουμε 5 γραμμές να συμπληρωθούν, με δεδομένα, που δεν θέλουμε ειδική μεταχείριση στο καθένα, τα περνάμε σε ένα ListBox με Edit ιδιότητα ως True (αληθής). Εισαγωγή λοιπόν κάνουμε με το Listbox, σταθερές γραμμές, EditBox, TextBox (μια γραμμή, έχει και Spinner διαμόρφωση, ώστε να αλλάζουμε αριθμητική τιμή με το ροδελάκι του ποντικιού)



Εδώ με ταξινόμηση:


Declare Simple Form
With Simple, "Title" as myTitle$
Layer Simple {
      Linespace 60
      Font "Arial Black"
      Window 16, 8000,6000
      Cls 1,0
      Cursor 0, height div 2
      Report 2,"Hello World"
}


Declare Listbox1 Listbox Form Simple
With Listbox1, "List" as MyList$()
Method Listbox1, "move", 1000,1000,6000,4000
With ListBox1,"Text",{London
                                    Paris
                                    Athens
                                    Rome
                                    Tirana
                                    Nicosia
                                    Brussels
                                    Copenhagen
                                    Berlin
                                    Dublin
                                    Luxembourg
                                    }
With Listbox1, "transparent", true ', "Edit", true
Method Simple, "Show"
With Simple,"Sizable", True
Function Simple.Unload {
      Keyboard "!"
}
Function listbox1.Color {
      Read New &rgb
            rgb=#FF7700
}
Function Listbox1.DblClick {
            Read ListIndex


            a1$= Mylist$(ListIndex)
            if Right$(Mylist$(ListIndex),1)="✓" then {
                  Mylist$(ListIndex)=leftPart$(Mylist$(ListIndex)+" "," ")
            } else {
                  Mylist$(ListIndex)=leftPart$(Mylist$(ListIndex)+" "," ")+" ✓"
            }
            Method Listbox1,"Refresh"
            Mytitle$= a1$


}
Function simple.click {
      Method listbox1,"Sort"
}
Function Simple.Resize {
Layer Simple {
      Mode 16
      Cls 1,0
      Cursor 0, height div 2
      Report 2,"Hello World"
      Method Listbox1,"Refresh"
}
}
a$=Key$ \\ no loop just wait a key, in console only
Declare Simple Nothing


Αν θέλουμε με την ταξινόμηση να επιλέξουμε το ίδιο και όχι να μείνει η επιλογή στον ίδιο αριθμό με άλλο όνομα, κάνουμε αυτό (εδώ χρησιμοποιούμε σειριακή αναζήτηση).


Function simple.click {
            With ListBox1, "ListIndex" As MyListIndex, "ListCount" As MyListCount
            If MyListIndex>=0 Then {
                  local K$=Mylist$(MyListIndex), i
                  Method listbox1,"Sort"
                  For i=0 to MyListCount {
                        If Mylist$(i)=K$ Then MyListindex=i : Exit
                  }
            } Else Method listbox1,"Sort"
}

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.