Σάββατο, 18 Οκτωβρίου 2014

Nice TextBoxes

Επιτέλους μετά από προσπάθεια μερικών ημερών κατάφερα να φτιάξω μια συλλογή στοιχείων ελέγχου, τα οποία μπορούν να χρησιμοποιηθούν στην Visual Basic 6.

Δύο πράγματα τα κάνουν ξεχωριστά. Ένα είναι ότι δεν απαιτούν βιβλιοθήκες και δεν αλλάζουν ανάλογα με το λειτουργικό (όπως όταν χρησιμοποιούμε τα στάνταρ στοιχεία ελέγχου των Windows). Το δεύτερο είναι η αλλαγή σχεδίασης, όπου όλα τα στοιχεία είναι ένα βασικό  και μερικές κλάσεις που το τροποποιούν παρέχοντάς μας ιδιότητες και γεγονότα για να τα χειριστούμε.
Πέρα από αυτά επιπλέον σχεδιαστικά καλούδια είναι η δυνατότητα χρήσης Unicode γραμματοσειρών χωρίς όμως δυνατότητα γραφής από δεξιά προς αριστερά. Μπορούμε όμως να εμφανίσουμε κυριλλικό αλφάβητο με ευρωπαϊκό και ελληνικό. Επίσης το υπόστρωμα, το στοιχείο δηλαδή που πράγματι εμφανίζεται, το glist, έχει την δυνατότητα να χειρίζεται την απόσταση των στοιχείων του, ή αλλιώς το line spacing. Είναι βασικό αυτό για να φαίνονται περισσότερο όμορφα τα στοιχεία, και τα κάνει ξεχωριστά. Τα αντίστοιχα της Microsoft...δεν έχουν απόσταση γραμμής, αντί αυτού ορισμένα έχουν ύψος γραμμής αλλά αυτό δεν είναι το ίδιο, η απόσταση γραμμής εδώ είναι το άνω και κάτω περιθώριο κάθε γραμμής -  TextBlock Class .NET Framework 4.5

Αποκορύφωμα των κλάσεων είναι η TextViewer κλάση που διαχειρίζεται ένα στοιχείο glist (αυτό χωρίς χρήση κλάσης είναι ένα στοιχείο που μοιάζει με το listbox), και με την χρήση μια κλάσης MyDOC (αυτή κρατάει κείμενο με παραγράφους σε μια διπλή συνδεδεμένη λίστα), προβάλει και δίνει για επεξεργασία κείμενο. Παράλληλα λειτουργούν πλήκτρα όπως Ctl X, Ctrl C & Ctrl V για αποκοπή, αντιγραφή και επικόλληση, αλλά και τα Ctrl A, επιλογή όλων, shift Ctrl A, καμία επιλογή, Ctrl Z αναίρεση (Undo), και Ctrl Y αναίρεση αναίρεσης (Redo) - μάλιστα υποστηρίζει πολλαπλά undo/redo. Επίσης δουλεύει το drag and drop,  ή ελληνικά οι ενέργειες σύρε και άφησε.

Η συλλογή των στοιχείων περιλαμβάνει διαμορφώσεις του glist ως button όπου η ενεργοποίηση γίνεται με διπλό πάτημα ή με σύρσιμο δεξιά, το checkbox όπου μια κουκκίδα αριστερά δηλώνει την  θέση διακόπτη (ανοικτός - κλειστός), το infobox που δηλώνει απλά μια ένδειξη αλλά μπορεί να αλλάξει σε εισαγωγή κειμένου για κάποια ρύθμιση. Άλλες διαμορφώσεις είναι το spin box όπου δέχεται αριθμητική τιμή και η οποία αλλάζει η με τη μπάρα ολίσθησης και τα βελάκια του πληκτρολογίου, ή αν θέλουμε με απευθείας εγγραφή τιμής. Στο παράδειγμα φαίνεται μια λίστα που τροφοδοτεί τιμές το spin box. Τέλος ένα επίσης ωραίο στοιχείο είναι το combobox όπου δυο λίστες glist συνδέονται, η μία ως ένα textbox μιας γραμμής με την προσθήκη ενός χειριστή αριστερά ο οποίος ανοίγει μια δεύτερη λίστα, μια λίστα τιμών. Μπορούμε να γράψουμε στο πρώτο textbox και αυτόματα θα εμφανίζεται το υπόλοιπο της λέξης από όποια λέξη βρεθεί στη δεύτερη λίστα. Αυτό λέγεται αυτόματη συμπλήρωση.

Όλα τα στοιχεία ελέγχου μπορούμε να τα χειριστούμε μόνο με πληκτρολόγιο (εκτός του drag & drop που απαιτεί ποντίκι εξ ορισμού). Έχει δοκιμαστεί το παράδειγμα σε Linux και Wine. Αν και στην έκδοση που έχω το Wine ενώ δίνει ελληνικά δεν αφήνει να περάσουν γράμματα με τόνο απευθείας στις φόρμες (πιστεύω σε νεότερη έκδοση του Wine, θα το έχουν λύσει το θέμα).


Παρακάτω είναι δυο εικόνες. Στην πρώτη φαίνεται το combobox, με τη δεύτερη λίστα σε προβολή, και μάλιστα φαίνεται και η μπάρα ολίσθησης (που είναι εσωτερική στο glist και όχι ξεχωριστό στοιχείο ελέγχου). Τα στοιχεία με τις πράσινες ανοικτές επικεφαλίδες είναι κινούμενα, δηλαδή μπορούμε να τους αλλάξουμε θέση. Το glist παρέχει χώρο να βάλουμε αν θέλουμε άλλα στοιχεία ελέγχου και να εκμεταλλευθούμε την επικεφαλίδα και την δυνατότητα μετακίνησης που δίνει για να μεταφέρουμε για παράδειγμα μια εικόνα.


Το στοιχεί ελέγχου change wrapping αλλάζει την αναδίπλωση γραμμής, και το Show Paragraph δείχνει ή κρύβει το σημάδι παραγράφου (φαίνεται στην εικόνα). Οι μπάρες ολίσθησης στις λίστες (και στο TextViewer) φαίνονται όταν πάμε στην άκρη το ποντίκι ή όταν κάνουμε ολίσθηση με σπρώξιμο - με πατημένο το αριστερό πλήκτρο κουνάμε το ποντίκι και μετακινούμε τη λίστα, με αυξανόμενη ταχύτητα ανάλογα με την κίνηση που κάνουμε - και αυτό δεν υπάρχει στα στάνταρ στοιχεία ελέγχου).



Εδώ υπάρχει ο κώδικας (δείτε στο τέλος την τελική έκδοση) Δημοσιευμένος Κώδικας

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

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