Δευτέρα, 24 Ιουλίου 2017

Εγχειρίδιο της Μ2000 - Τεύχος 32ο

17.3 Επιλογή (Checkbox)
Το στοιχείο ελέγχου Επιλογή, δίνει ένα οριζόντιο πλήκτρο με ένα πλαίσιο αριστερά που μπορεί να είναι "επιλεγμένο" με ένα ολόχρωμο πλαίσιο εσωτερικά, ή "μη επιλεγμένο", κενό δηλαδή. Η επιλογή γίνεται ή μέσω του ποντικιού με κλικ σε ένα ήδη εστιασμένο στοιχείο τύπου Επιλογή, ή με το πλήκτρο διάστημα, πάλι σε εστιασμένο πλήκτρο.

Προγραμματιστικά, μπορούμε να το θέσουμε στη θέση που θέλουμε, δηλαδή τσεκαρισμένο ή μη, χωρίς να παραχθεί γεγονός αλλαγής. Εκτός από μήνυμα για την αλλαγή, λειτουργεί και ως πλήκτρο, δηλαδή παράγει γεγονός Click. Επίσης αν σύρουμε δεξιά την επιγραγή (Caption) μέχρι σχεδόν το δεξιό άκρο πάλι θα λογαριαστεί ως Click. Το ίδιο θα συμβεί και αν πατήσουμε το Enter.
Συνοψίζοντας δέχεται σε πλήκτρα: Enter ή διάστημα ή Ctrl+F1 για βοήθεια.

Προς το παρόν δεν έχει ιδιότητες για να γίνεται μη ορατό. (ίσως σε άλλη έκδοση να μπει), ούτε για διάφανο, ούτε επιλογή χρωμάτων μπορούμε να κάνουμε. Ένας λόγος για αυτό είναι ότι υπάρχει ένα πιο σύνθετο στοιχείο που μπορεί να παίξει το ρόλο της Επιλογής, του CheckBox, και έχει απ' όλα τα καλά (η Λίστα ή Listbox). Η Λίστα είναι επακριβώς το μοναδικό στοχείο που πάνω σε αυτό βασίζονται όλα, ακόμα και ο διορθωτής κειμένου. Θα το δούμε σε άλλο τεύχος.

Ένας λόγος που αυτό το στοιχείο κρατήθηκε απλό είναι για να αποτελεί ένα στοιχείο φορμών για  εκπαίδευση.



Γεγονότα του στοιχείου ΕΠΙΛΟΓΗ
  • About συμβαίνει όταν πατάμε το Ctrl+F1 
  • Changed   Γυρνάει ή τον αριθμό (index) του στοιχείου (για πίνακα στοιχείων), και τη κατάσταση του "σημαδιού", με Αληθές σημαίνει τσεκαρισμένο, ή μόνο το δεύτεορ αν δεν έχουμε πίνακα στοιχείων. Συμβαίνει όταν κάνουμε κλικ στο πλαίσιο επιλογής, αριστερά από τη επιγραφή, ή όταν πατήσουμε το διάστημα αν το στοιχείο είναι επιλεγμένο.
  • Click  Συμβαίνει όταν πατήσουμε Enter (όταν είναι επιλεγμένο), ή με κλικ στην επιγραφή, ή με σύρσιμο τέρμα δεξιά (όταν το αφήσουμε εκεί).
Ιδιότητες 
  • Index αριθμός όταν ανήκει σε πίνακα στοιχείων Επιλογή (και όλα τα γεγονότα δίνουν επιπρόσθετα, ως πρώτο στοιχείο τον αριθμό Index για να αναγνωριστεί από την συνάρτηση "υποδοχής" γεγονότων.
  • Enabled δίνει και παίρνει τιμή 0 ή -1 (΄ψευδές ή αληθές). με ψευδές γίνεται ανενεργό για διόρθωση από το χρήστη, αλλά μπορεί να αλλαχθεί εσωτερικά. Το στοχείο δεν μπορεί να πάρει εστίαση αν δεν είναι ενεργό
  • Caprtion  Εδώ μπορούμε να αλλάξουμε την Επιγραφή αλλά όχι να διαβάσουμε τιμή (αν συνδέσουμε την ιδιότητα με μεταβλητή και πάμε να διαβάσουμε θα βγει λάθος).
  • CheckReset  Και εδώ μόνο αλλάζουμε τιμή, με -1 τσεκάτουμε την επιλογή, ενώ με 0 την ξετσακάρουμε!
  • Checked  Υπάρχει αυτή η ιδιότητα μόνο για ανάγνωση, που μας δείχνει αν είναι τσεκαρισμένη ή όχι η επιλογή
  • Top δίνει και παίρνει τιμή, ως την απόσταση από την πάνω ακμή της φόρμας ως το πάνω αριστερό σημείο του στοιχείου
  • Left δίνει και παίρνει τιμή ως την απόσταση  από την αριστερή ακμή της φόρμας, ως το πάνω αριστερού σημείο του στοιχείου
  •  ShowAlways παίρνει μόνο τιμή, και κάνει το εξής. Όταν αφήσουμε το στοιχείο, δηλαδή πάει αλλού η εστίαση, με ShowAlways παραμένει το χρώμα του όπως αυτό κατά την διόρθωση, αλλιώς αλλάζει σε χρώμα "ανάπαυσης" (ένα καφέ χρώμα).

Μέθοδοι  

  • Move δέχεται δυο ορίσματα συν δυο προεραιτικά, τα δυο πρώτα είναι η θέση στη φόρμα, τα left και top, και τα άλλα δυο είναι το πλάτος και ύψος του στοιχείου (σε twips).
  • FontAttr δέχεται ένα όρισμα με το όνομα γραμματοσειράς, και προαιρετικά δυο ακόμα, το μέγεθος και αν θέλουμε να έχουμε φαρδιά γράμματα (bold)  
  • GetFocus   Μεταθέτουμε την εστίαση στο στοιχείο
  • Show  επανασχεδιάζεται το στοιχείο

Απλό Παράδειγμα
Όλα τα στοιχεία ξεκινούν με προεπιλογές. Η φόρμα θα έχει μέγεθος προεπιλεγμένο από τον διερμηνευτή, και τίτλο Φόρμα1. Το στοιχεία Επιλ1 θα έχει επιγραφή Επιλ1 και δεν θα είναι τσεκαρισμένο. Το πλήκτρο Πλ1 θα έχει επιγραφή Πλ1. Μπορούμε με tab ή shift tab να αλλάζουμε στοιχείο. Στη διαδοχή των στοιχείων είναι και η φόρμα (εφόσον έχει τίτλο, δηλαδή έχει το πορτοκαλί πλαίσιο χειρισμού, για μετακίνηση και κλείσιμο). Όταν έχουμε επιλέξει τη φόρμα (από προεπιλογή η φόρμα είναι επιλεγμένη και όχι κάποιο στοιχείο). μπορούμε με Ctrl+F4 να την κλείσουμε (ή αν έχουμε συνάρτηση Φόρμα1.Unload να πάρουμε το γεγονός και να αποφασίσουμε τι θα κάνουμε).
Στο παράδειγμα δεν έχουμε κάποια συνάρτηση για να χρησιμοποιήσουμε γεγονότα. Άρα μπορούμε να κάνουμε αλλαγές στην εστίαση, να μετακινήσουμε την φόρμα, να κάνουμε επιλογή στο στοιχείο Επιλ1.

Όρισε Φόρμα1 Φόρμα
Όρισε επιλ1 Επιλογή Φόρμα Φόρμα1
Όρισε Πλ1 Πλήκτρο Φόρμα Φόρμα1
Μέθοδος Επιλ1,"move", 1000, 1400, 5000, 600
Μέθοδος Πλ1,"move", 1000, 2200, 5000, 600
Μέθοδος Φόρμα1, "Show", 1


Προχωρημένο Παράδειγμα
Σε αυτό το παράδειγμα θέλουμε όταν γίνεται επιλογή να αλλάζει ο τίτλος της φόρμας. Συνάμα θέλουμε όταν ξεκινήσει η φόρμα να μην φαίνεται η Κονσόλα, ενώ στην επιστροφή (στο κλείσιμο)  θέλουμε να εμφανιστεί ξανά η κοσνόλα. 
Κάθε φορά που τσεκάρουμε την επιλογή, αλλάζει η κατάσταση από επιλεγμένο σε όχι επιλεγμένο, και το ανάποδο. Παράλληλα αλλάζουμε τρεις επιγραφές, την επιγραφή του Πλήκτρου Πλ1, τον Τίτλο της φόρμας Φόρμα1 και το  τίτλο στην γραμμή εργασιών (TaskBar).
Επίσης φαίνεται και ο τρόπος με ένα "Αυτόματο" νήμα (η εντολή Μετά παράγει ένα νήμα που θα τρέξει μετά από κάποια χιλιοστά μια μόνο φορά), όπου θέτουμε το στοιχείο που θέλουμε να έχει την εστίαση..
Σε αυτό το πρόγραμμα στο γεγονός Πλ1.click διαβάζουμε την ιδιότητα του Επιλ1 άμεσα με μια μεταβλητή Τιμή_Επλ1 όπου ορίσαμε να είναι η ιδιότητα Checked. Θα μπορούσαμε να ορίσουμε και την Βάλε_Τιμή_Επλ1 από την ιδιότητα "CheckReset" και αντί να καλούμε την Με Επλ2, "Checked",.... να κάνουμε το ίδιο με την Βάλε_Τιμή_Επλ1=....
Όταν φτιάχνουμε ιδιότητες σε μεταβλητές, τότε έχει γίνει η διαδικασία εύρεσης της ιδιότητας και καταγράφεται ο μοναδικός αριθμός της. Αν χρησιμοποιούμε την Με Αντικείμενιο, "ιδιότητα",...τότε η αναζήτηση πραγματοποιείται από την αρχή...σε κάθε εκτέλεση της εντολής
Πληροφιακά, οι εντολές Μέθοδος και Με (διαφέρει από την Με σε μια Επιλογή Με/Τελος Επιλογής), δουλεύουν για.αντικείμενα που είναι γνωστά στα Windows, ακόμα και τα ιδιωτικά, όπως οι φόρμες της Μ2000.
Η εντολή Όρισε κάνει αρκετά πράγματα για αντικείμενα (όχι μόνο για τα στοιχεία φορμών, αλλά οποιαδήποτε αντικείμενα είναι για ελεύθερη χρήση στα Windows, όπως για παράδειγμα το Word ή το Excel, τα οποία είναι αντικείμενα για "αυτόματισμό γραφείου" και μπορεί να τα χειριστεί η Μ2000).. Επιπλέον η Όρισε μπορεί να ανοίξει αντικείμενα με γεγονότα, και να τα χειριστούμε και αυτά, με την διαφορά ότι αντί για Αντικείμενο τελεία γεγονός έχουμε Αντικείμενο κάτω  παύλα και γεγονός. Υπάρχουν παραδείγματα στο Blog, αλλά θα υπάρξει και ειδικό τεύχος εγχειριδίου για αυτό το σκοπό.


\\ Με 0 η Τίτλος κρύβει την κονσόλα (ελαχιστοποίηση)
Σημ 1 :
Τίτλος "Παράδειγμα Επιλογής", 0
\\ Άλλος τρόπος είναι να δώσουμε Επιφάνεια 0
\\ Προσοχή δεν μπορούμε να δώσουμε και τις δυο εντολές. Η Επιφάνεια δουλεύει όταν δεν είναι η κονσόλα σε ελαχιστοποίηση.
Σημ 2 : Επιφάνεια 0 \\ τιμές από 0 - τελείως διάφανο - έως 255 τελείως αδιάφανο
\\ αλλά έχει το πρόβλημα ότι αν βγει λάθος δεν θα μπορούμε να μπουμε στη κονσόλα, γιατί θα είναι αόρατη, δεν θα μπορεί να επιλεχθεί! Πρέπει να πάμε στο Task Manager των Windows και να κλείσουμε τον διερμηνευτή! Δείτε και την Σημείωση 4 (Σημ 4)
Όρισε Φόρμα1 Φόρμα
Όρισε επιλ1 Επιλογή Φόρμα Φόρμα1
Όρισε Πλ1 Πλήκτρο Φόρμα Φόρμα1


Μέθοδος Επιλ1,"move", 1000, 1400, 5000, 600
Μέθοδος Πλ1,"move", 1000, 2200, 5000, 600


Με Επιλ1, "Checked" ως Τιμή_Επιλ1, "Caption", "Επιλογή 1"
Πίνακας Βάση 0, Τ$(2)
Τ$(0):="όχι επιλεγμένο", "επιλεγμένο"
Με Πλ1, "Caption", "Άλλαξε Επιλογή σε "+Τ$(1)
Με Φόρμα1, "Title", Τ$(0)


Συνάρτηση Επιλ1.Changed {
      Διάβασε τι
      Με Φόρμα1,  "Title", Τ$(Απολ(τι))
      Τίτλος Τ$(Απολ(τι))
      Με Πλ1, "Caption", "Άλλαξε Επιλογή σε "+Τ$(Απολ(όχι τι))
}
Συνάρτηση Πλ1.click {
      Με Επιλ1,  "CheckReset", όχι Τιμή_Επιλ1
      \\ δεν θα παραχθεί γεγονός Επιλ1.Changed
      Με Φόρμα1,  "Title", Τ$(Απολ(Τιμή_Επιλ1))
      Τίτλος Τ$(Απολ(Τιμή_Επιλ1))
      Με Πλ1, "Caption", "Άλλαξε Επιλογή σε "+Τ$(Απολ(όχι Τιμή_Επιλ1))
}
\\ με ένα νήμα μπορούμε να δώσουμε την εστίαση σε 0.2 του δευτερολέπτου
\\ τα νήματα χρειάζονται ένα "παράθυρο χρόνου"....
\\ και το δίνει το άνοιγμα της φόρμας τύπου Modal, σαν φόρμα διαλόγου.
\\ δηλαδή μπαίνει ο διερμηνευτής σε μια φάση αναμονής μέχρι να κλείσει η φόρμα
\\ αλλά παράλληλα εκτελεί νήματα και γεγονότα!
Μετά 200 { Μέθοδος Επιλ1, "GetFocus"}
' Αν δώσουμε πογραμματιστικά την εστίαση χωρίς να έχει εμφανιστεί η φόρμα δεν θα δοθεί!
Μέθοδος Φόρμα1, "Show", 1
Όρισε Πλ1 Τίποτα
Όρισε επιλ1 Τίποτα
Όρισε Φόρμα1 Τίποτα
Σημ 3 :
Τίτλος "Τέλος Παραδείγματος", 1
Σημ 4 : Επιφάνεια 255




Στα Windows 10, στην εντολή Όρισε αν ακολουθεί λέξη με Ε ελληνικό κεφαλαίο δημιουργεί πρόβλημα στην εμφάνιση του στοιχείου (δείτε το...). Θα το δω όταν επιστρέψω από τις διακοπές...