Παρασκευή 28 Ιουλίου 2017

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

17.4 Κείμενο (EditBox)
Το στοιχείο Κείμενο είναι ο επεξεργαστής κειμένου. Δεν έχει δυνατότητα για ανάμεικτα διαφορετικού μεγέθους γράμματα. Όλα δηλαδή θα έχουν την ίδια γραμματοσειρά και μέγεθος. Μπορούμε να ορίσουμε λέξεις που θα χρωματίζονται (χρωματισμός κώδικα, έχουν δοθεί παραδείγματα στο Blog για χρωματισμό κώδικα Visual Basic και της Java)

Δυνατές λειτουργίες (οι2 και 3 έχουν διαμορφωθεί από την αναθεώρηση 21 έκφοση 8.9):

1. Λειτουργία διόρθωσης κειμένου πολλών γραμμών (εξ ορισμού αυτή είναι η λειτουργία του)
2. Λειτουργία  Εισαγωγής Κειμένου σε μια γραμμή
Μοιάζει με την εισαγωγή, αν και εδώ το κείμενο είναι στοιχεισμένο στην πάνω ακμή του πλαισίου. Για να γυρίσει σε αυτήν την λειτουργία το στοχείο θα πρέπει να επιλέξουμε την ιδιότητα UsedAsTextBox με τιμή Αληθής, με μια εντολή, αν υποθέσουμε ότι το στοιχείο λεγεται Κειμ1:
Με Κειμ1, "UsedAsTextBox ", Αληθής
(η εντολή Με Αντικείμενο  παίρνει σειρά ιδιοτήτων)
Οι διαφορές με το στοιχείο Εισαγωγή είναι ότι αυτό το στοιχείο έχει δυνατότητα για να συνδέσουμε σχετιζόμενη λίστα επιλογών (context menu), μπορούμε να κάνουμε όπου θέλουμε επικόλληση, αποκοπή, και αντιγραφή (έχει πολλαπλά Undo/Redo), αλλά δεν έχει γεγονός "ολοκλήρωσης", δηλαδή δεν έχει Click ή Enter, και δεν επίσης δεν έχει γεγονός για να ελέγχουμε τις αλλαγές πριν προβληθούν. Αν πατήσουμε το enter τότε αυτό προωθείται στη φόρμα και αυτή στέλνει ένα γεγονός Enter, στη φόρμα, χωρίς να λέει από που είναι. Ουσιαστικά το enter είναι χρήσιμο για να ξεκινήσει μια συνολική διεργασία ελέγχου των στοιχείων και κατόπιν να δοθούν όπου υπάρχει πρόβλημα μηνύματα, ή αν δεν υπάρχει να προχωρήσει στο επόμενο βήμα, πχ την καταχώρηση σε βάση δεδομένων ή την εκκίνηση κάποιας διεργασίας υπολογισμού.
Σε αυτήν την λειτουργία μπορούμε να ορίσουμε το μέγιστο μήκος χαρακτήρων με την ιδιότητα MaxCharLength.
3. Λειτουργία Εισαγωγής Αριθμού
Εδώ έχουμε δυο παραλλαγές, την εισαγωγή αριθμού με κινητή υποδιαστολή ή την εισαγωγή ακέραιου. Δεν γίνεται έλεγχος μεγέθους (ισχύει και εδώ το MaxCharLength), αλλά γίνεται έλεγχος αν υπάρχει αριθμός και αν ναι τότε γίνεται αλλαγή κατά την πληκτρολόγηση, κατά την εισαγωγή μέσω κώδικα,  κατά την εισαγωγή με επικόλληση. Ισχύει και εδώ ότι αν πατήσουμε Enter θα παραχθεί το Enter γεγονός στην φόρμα.
Αλλάζουμε "πεδία" με Tab και Shift Tab (προς τα πίσω) όπως κάνουμε με κάθε στοιχείο, και σε αυτά περιλαμβάνεται και η φόρμα (το στοιχείο στην ουσία που μετακινεί την φόρμα, έχει τον τίτλο και δέχεται τα Ctrl+F1 και το Ctrl+F4 για κλείσιμο).
Αν θέλουμε αριθμό βάζουμε στην ιδιότητα NumberOnly τιμή Αληθές, ή αν θέλουμε ακέραιο βάζουμε στην ιδιότητα NumberIntOnly τιμή Αληθές. Σε κάθε περίπτωση μπορούμε να διαβάσουμε το περιεχόμενο σαν κείμενο ή σαν αριθμό. Σαν κείμενο με την ιδιότητα "text" και σαν αριθμό με την ιδιότητα "value". Μάλιστα η "text" δέχεται και αριθμό, γιατί είναι εσωτερικά τύπου Variant.

4. Λειτουργία προβολής μόνο
Αυτή η λειτουργία ξεκινάει με κλήση μεθόδου. Στη μέθοδο γίνονται οι αναγκέες αλλαγές για να μπορεί το στοιχείο να επιλέγεται, να διαβάζει τα πλήκτρα αλλαγής σελίδας και βελάκια άνω και κάτω, και να δέχεται με το ποντίκι ολίσθηση ή και χρήση την κρυμμένης κάθετης μπάρας ολίσθησης.
Η μέθοδος είναι η  TextViewOnly και δίνεται με μια εντολή:
Μέθοδος Κειμ1, "TextViewOnly"
Μπορούμε να αλλάζουμε προγραμματιστικά το κείμενο με την ιδιότητα "text". Επίσης μπορούμε να έχουμε το φόντο διάφανο με την μέθοδο Transparent. Δείτε ένα παράδειγμα παρακάτω.


Ολίσθηση με κράτημα και σπρώξιμο γραμμών!
Αν το κείμενο έχει περισσότερες γραμμές από αυτές που φαίνονται τότε μπορούμε να σύρουμε γραμμές με πατημένο το αριστερό πλήκτρο του ποντικιού κια κατεύθυνση προς τα εκεί που θέλουμε να κινηθούν οι γραμμές, σαν να σπρώχνουμε τις γραμμές. Αν πάμε στην δεξιά πλευρά εμφανίζεται η μπάρα ολίσθησης. Αυτή δουλεύει ανάποδα, όταν την κατεβάζουμε τότε η γραμμές πάνε προς τα πάνω. Μπορούμε να χρησιμοποιήσουμε τα πλήκρα για την αλλαγή σελίδας PageUp και PageDownΗ αλλαγή σελίδας γίνεται με τρόπο ώστε να εμφανίζεται η τελευταία γραμμή της προηγούμενης σελίδας στη πρώτη γραμμή της επόμενης, ή αν πάμε προς τα πίσω να εμφανίζεται στη τελευταία γραμμή η πρώτη γραμμή της επόμενης σελίδας. Επιπλέον όταν γράφουμε η γραμμή όπου εισάγουμε μετακινείται στο κέντρο (αν είναι δυνατόν, αν υπάρχουν τόσες γραμμές πριν για να φθάσουμε στο μέσον του στοιχείου). Αυτό βοηθάει όταν γράφουμε κείμενα για να κοιτάμε σε ένα σταθερό ύψος.

Αυτόματη οριζόντια ολίσθηση!
Δεν υπάρχει οριζόντια μπάρα ολίσθησης, γιατί υπάρχει αυτόματη οριζόντια ολίσθηση. Επιπλέον με το F1 μπορούμε να αλλάζουμε το τρόπο εμφάνισης με ή χωρίς αναδίπλωση λέξης. Οπότε με ενεργή την αναδίπλωση λέξης δεν υπάρχει περίπτωση να έχουμε ολίσθηση οριζόντια. Όταν αλλάζουμε με το F1 ο δρομέας δεν χάνει τη θέση του, και γίνεται αυτόματα και ομαλά με διαδοχικές αλλαγές,  αν χρειάζεται, ολίσθηση από "με αναδίπλωση" σε "χωρίς αναδίπλωση".

Απουσία Flickering
Τα στοιχεία της Μ2000 δεν έχουν "αναλαμπές" ή flickering, όπως μερικά στοιχεία των Windows. Στο κώδικα της Μ2000 δεν γίνεται χρήση των στοιχείων φορμών των Windows, για πολλούς λόγους, όπως να έχουμε απλά στοιχεία, και ένας άλλος να έχουμε κοινά στοιχεία σε όλα τα λειτουργικά, αλλά υπάρχουν και άλλοι λόγοι που δεν θα αναφερθούν εδώ, και σχετίζονται με το προγραμματισμό του διερμηνευτή. Από τις φόρμες της Visual Basic 6, η Μ2000 χρησιμοποιεί την κενή φόρμα, και ένα στοιχείο User Control που και αυτό είναι ανάλογο της κενής φόρμας, εξαιρούνται το στοιχείο για το βίντεο και το στοιχείο για τις ιστοσελίδες, οι οποίες βγαίνουν στην κονσόλα και όχι σε φόρμες, δηλαδή δεν αποτελούν στοιχεία των φορμών χρήστη. Γενικά ο ρόλος των φορμών χρήστη είναι να φτιάχνει δικές του φόρμες διαλόγων για συλλογή στοιχείων, για ενημέρωση ή προβολή αποτελεσμάτων. Όταν θέλουμε βίντεο ή κινούμενες διαφάνειες (sprites) τότε χρησιμοποιούμε την κονσόλα (και πάνω από αυτήν τα 32 επίπεδα των sprites, ή πρόσθετων οθονών όπως η οθόνη της κονσόλας). Οι φόρμες της Μ2000 βγαίνουν πάνω από την κονσόλα και όπως φάνηκε στο προηγούμενο τεύχος μπορούμε να την κρύψουμε. Ένα πρόγραμμα που δείχνει την χρήση αυτή και τη χρήση του στοιχείου Κείμενο (TextBox) είναι εδώ Eίναι το M2000 Pad με δυνατότητα προβολής χρωματισμένου κώδικα Visual Basic 6.

Και αυτό το στοιχείο έχει δυνατότητα να εμφανίζει το φόντο, το περιεχόμενο της φόρμας πίσω από τα γράμματα, αν θέλουμε.

Ο επεξεργασγτής κειμένου εμφανίζει λίστα επιλογών (το λεγόμενο context menu), με έμμεσο τρόπο. Δηλαδή μας δίνει ένα γεγονός που μας παρέχει Χ και Υ συντεταγμένες (σχετικές με το κλικ του ποντικιού, ή με την θέση του δρομέα), και μπορούμε να καλέσουμε το ενσωματωμένο μενού επιλογών, ή να κάνουμε κάτι άλλο, όπως να ανοίξουμε μια φόρμα με επιλογές! Το ενσωματωμένο μενού επιλογών, διαφέρει από αυτό του διορθωτή προγραμμάτων, στο ότι δεν έχει επικεφαλίδα, με την οποία στον διορθωτή μπορούμε να το μεταφέρουμε χωρίς να το κλείσουμε, και δεν έχει κάποιες επιλογές που αφορούν τον διορθωτή. Οι κλήσεις αυτού του μενού επιλογών μπορούν να γίνουν χωριστά με κλήσεις μεθόδων. Έτσι μπορούμε να έχουμε μια σειρά μενού επιλογών, και σε ένα από αυτά να βάλουμε την Επικόλληση και τα άλλα γνωστά μας καλά, όπως την Αποκοπή και την Αντιγραφή, κ.α. όπως θα δούμε.

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

Τα πλήκτρα στο στοιχείο λειτουργούν όπως στο διορθωτή κώδικα, με την διαφορά ότι δεν υπάρχουν τα πλήκτρα Esc (για έξοδο από το διορθωτή) και το Shift +F12 για έξοδο χωρίς αλλαγές.;Άλλα πλήκτρα είναι αυτά της αναζήτησης πάνω και κάτω F2 και F3, ή με το Shift ανοίγει φόρμα διαλόγου και βάζουμε το προς αναζήτηση κείμενο (λέξη ή λέξεις). Το F4 αλλάζει σε μια λέξη παντού στο κείμενο τα γράμματα αν αλλάξουμε κάποια από πεζά σε κεφαλαία ή το ανάποδο. Το F5 κάνει αλλαγή λέξεων μαζικά με δυνατότητα αναίρεσης (ένα προς ένα). Τα F6, F7, F8, είναι οι σελιδοδείκτες, προγραμματίζουν αυτόματα παράγραφο και θέση δρομέα.Το F9 μετράει τις λέξεις (είναι πολύ γρήγορο,λειτουργεί αστραπιαία), και εμφανίζει σε μια γραμμή  με ξεχωριστό χρώμα το αποτέλεσμα (όπως και οι λειτουργίες των σελιδοδεικτών εμφανίζουν μηνύματα). Η γραμμή μηνυμάτων εξαφανίζεται όταν γράφουμε στο κείμενο, και η γραμμή αποδίδεται στο κείμενο.Το F10 εμφανίζει ή αποκρύπτει τους μη φανερούς χαρακτήρες όπως το διάστημα (εμφανίζεται ως άνω τελεία), την παράγραφο, το μη διαχωρίσιμο διάστημα (εμφανίζετια ως διάστημα) και το διάστημα αριθμών με κάτω κουτάκι (είναι σαν παύλα με άκρες προς τα πάνω). Το μη διαχωρίσιμο διάστημα (δηλαδή το μετράει ως χαρακτήρα και όχι ως διάστημα, είναι ο χαρακτήρες 160), μπαίνει με Ctrl Shift Space, ενώ το σταθερού πλάτους διάστημα αριθμών μπαίνει με Ctrl Alt Space (αυτά ισχύουν και στον διορθωτή τμημάτων και συναρτήσεων). Μπορούμε να βάζουμε όποιον Unicode χαρακτήρα θέλουμε (μέχρι το 65535) με Alt και τον αριθμό σε δεκαδικό σύστημα, ή το Alt το  + και το δεκαεξαδικό νούμερο. (το Alt το κρατάμε μέχρι το τελευταίο νούμερο. Ο επεξεργαστής κειμένου χειρίζεται και τους χαρακτήρες που πέφτουν πάνω σε άλλους χαρακτήρες. Πχ το Alt+301 είναι ο τόνος

Μπορούμε να κάνουμε επικόλληση και αντιγραφή, και μπορούμε να σύρουμε από άλλο πρόγραμμα, ή άλλο στοιχείο Κείμενο το κείμενο που θέλουμε. Υπάρχει επιλογή στη λίστα επιλογών που επιτρέπει  αν θέλουμε την χρήση σε επιλεγμένο κείμενο με κλικ να κάνουν μεταφορά (σύρσιμο) στο ίδιο ή άλλο στοιχείο Κείμενο, ή σε άλλο πρόγραμμα, και λειτουργεί το με το Shift η αντιγραφή ή αποκοπή κατά το σύρσιμο (φαίνεται από το σημάδι + στην αντιγραφή στο βελάκι του ποντικιού).

Στη στη βασική λειτουργία μπορούν να γίνουν και αυτά:
Μια "παραξενιά" του στοιχείου αυτού είναι ότι δεν παίρνει τον χαρακτήρα Tab ως χαρακτήρα Tab αλλά τον μετατρέπει σε διαστήματα. Επιπλέον τα Shift Tab και Tab δουλεύουν για μια ή πολλές γραμμές και μεταθέτουν τις γραμμές δεξιά ή αριστερά βάζοντας εσοχή. Αν έχουμε και άλλα στοιχεία ελέγχου στην φόρμα, τότε τα Τab και Shift Tab αλλάζουν την εστίαση σε επόμενο στοιχείο (δουλεύει κυκλικά), ενώ για να βάζουμε εσοχές πρέπει να πατάμε και το Ctrl με Tab ή με Shift Tab. Υπάρχουν μέθοδοι που βάζουν ή βγάζουν την εσοχή, για να καλούνται από μενού επιλογής εκτός του στοιχείου αυτού (ή από στοιχεία τύπου Πλήκτρο)

Μπορούμε να φορτώσουμε το στοιχείο με πολύ μεγάλο κείμενο, της τάξης των MBytes, και έχει δοκιμαστεί και με κείμενο, πρόγραμμα που χρωματίζεται σε Visual Basic 6, με 45000+ γραμμές. Ο χρωματισμός γίνεται "κατ΄απαίτηση" δηλαδή όταν εμφανίζονται γραμμές τότε εμφανίζονται χρωματισμένες ενώ δεν ήταν πριν τις καλέσουμε για εμφάνιση. Μπορούμε να κάνουμε αλλαγή μεγέθους και γίνεται αυτόματα νέος υπολογισμός για αναδίπλωση λέξης. Τα δεδομένα του χρωματισμού δεν συμμετέχουν στην διεργασία της αναδίπλωσης! Εϊναι συνδεδεμένα με την παράγραφο, και η εμφάνιση χρώματος γίνεται για οποιαδήπτε αναδίπλωση. Κάθε παράγραφος έχει εσωτερικά μια δομή γραμμών, όπως υπολογίζονται στην αναδίπλωση. Η αλλαγή μεγέθους του στοιχείου μπορεί να αλλάξει τον αριθμό γραμμών της κάθε παραγράφου (αλλά δεν αλλάζει τον χρωματισμό του αφού αποθηκεύονται χωριστά). Ο χρωματισμός αλλάζει καθώς πληκτρολογούμε σε μια παράγραφο. Με το F11 μπορούμε να εξαφανίζουμε ή να εμφανίζουμε τον χρωματισμό.

Και εδώ ισχύει το διπλό αντικείμενο. Ένα αντικείμενο στη φόρμα και ένα δεύτερο που παίρνει τα γεγονότα και καθοδηγεί το αντικείμενο στη φόρμα. Εδώ μάλιστα το κείμενο δεν βρίσκεται σε κανένα από αυτά τα δύο αντικείμενα αλλά σε ένα τρίτο τύπου Document ή Έγγραφο. Κάθε φορά που αλλάζουμε θέση στην κάθετη μπάρα ολίσθησης το αντικείμενο στη φόρμα ζητάει "εικόνα" που θα δείξει στην θέση, παρέχοντας το κομμάτι του φόντου του (και έτσι γίνεται να έχουμε διαφάνεια, επειδή δίνει το στοιχείο αντί για ένα μονόχρωμο φόντο, το κομμάτι της φόρμας που αντιστοιχεί πίσω ακριβώς από το στοιχείο). Σε αυτό το κομμάτι φόντου γράφει το αντικείμενο που παίρνει τα γεγονότα, αντλώντας στοιχεία για τη γραμμή από το αντικείμενο Έγγραφο.Όταν ολισθαίνουμε πολύ γρήγορα την μπάρα ολίσθησης, αυτή δεν ακούει στο ρυθμό μας αλλά στέλνει σε ένα χρονιστή το μήνυμα...ξεκίνα να μετράς για να γράψεις...Έτσι διαδοχικές γρήγορες αλλαγές της μπάρας ολίσθησης δεν απασχολούν το σύστημα! Όταν θα έρθει η ώρα να εμφανίσει τις γραμμές το στοχείο τότε θα δει την θέση της μπάρας και θα βρει την "πάνω γραμμή" και θα συνεχίσει με τις επόμενες. Την οριζόντια μετάθεση δεν την γνωρίζει το στοιχείο πάνω στην φόρμα. Είναι σχετική με μεταβλητές στο στοιχείο που οδηγεί το στοιχείο στη φόρμα. Και αυτή όμως έχει χρονιστή και για το λόγο αυτό γίνεται με βήματα.Γενικά τα στοιχεία της Μ2000 για τις φόρμες δουλεύουν σαν "ρολόγια", και έτσι έχουν καλή απόκριση, δεν έχουν αναλαμπές- flickering, και δεν επιβαρύνουν το σύστημα.
Εκεί που ζορίζεται το στοιχείο αυτό είναι όταν έχουμε πχ 45000 παραγράφους και περιορίζουμε πολύ το πλάτος (άρα παράγονται πολλές γραμμές ανά παράγραφο). Ακόμα και εκεί όμως είναι πιο γρήγορο από το NotePad των Windows. Λόγω των ρολογιών δεν θα δούμε αναλαμπές αλλά λιγότερα ενδιάμεσα βήματα.μέχρι το σημείο που θα αφήσουμε την αλλαγή μεγέθους φόρμας (που συνάμα μέσω του γεγονότος της φόρμας Resize θα κάνουμε και αλλαγή μεγέθους του στοιχείο Κείμενο, ίσως και άλλων).

Γεγονότα
Θα παρατηρήσετε εδώ ότι δεν έχουμε click ή enter. Συνήθως υπάρχει κάποιο άλλο στοιχείο που ξεκινάει τη διακασία επεξεργασίας της πληροφορίας του στοιχείου αυτού.

  • Inform    γραμμή_δρομέα,  θέση_δρομέα
  • PopUp  θέση_Χ, Θέση_Υ, Τιμή_Πλήκτρων_ποντικού, γραμμή_δρομέα
  • MarkNo  στην μετάβαση από επιλεγμένο σε μη επιλεγμένο κείμενο
  • MarkOut στην μετάβαση ή στην αλλαγή επιλεγμένου κειμένου
  • Word στην επιλογή λέξης μόνο.
  • About όταν πατάμε το Ctrl+F1 χωρίς να έχουμε επιλέξει λέξη
  • Help  επιλεγμένη_λέξη$ όταν πατάμε το Ctrl+F1 με επιλεγμένη λέξη

Ιδιότητες
  • Index   αριθμός όταν ανήκει σε πίνακα στοιχείων Κείμενο και όλα τα γεγονότα δίνουν επιπρόσθετα, ως πρώτο στοιχείο τον αριθμό Index για να αναγνωριστεί από την συνάρτηση "υποδοχής" γεγονότων.
  • Title γράφεται - ο τίτλος σε μια γραμμή πάνω από τις γραμμές κειμένου αλλά μέσα στο πλαίσιο του κειμένου.
  • Text όλο το κείμενο (γράφεται και διαβάζεται)
  • TextLines γυρίζει τον αριθμό γραμμών (όπως έχουν διαμοφωθεί από την αναδίπλωση, ή αν δεν έχουμε αναδίπλωση τότε συμπίπτει με τον αριθμό παραγράφων
  • TextParagraphs γυρίζει τον αριθμό παραγράφων
  • CharPosStart γυρίζει τη θέση του δρομέα σε όλο το κείμενο, δηλαδή πόσους χαρακτήρες έχει το κείμενο ακριβώς πίσω από τον δρομέα.
  • InsertText εισάγει κείμενο μετά το δρομέα
  • InsertText2 εισάγει κείμενο μετά το δρομέα, διατηρεί τη θέση του δρομέα.
  • InsertTextNoRender εισάγει κείμενο χωρίς να προκαλεί επανασχεδιασμό.
  • Length  το μήκος του κειμένου μαζί με τα Cr και Lf (χαρακτήρες 13 και 10).
  • Value  η αριθμητική τιμή (γράφεται και διαβάζεται)
  • SelStart γυρίζει τη θέση του δρομέα σε όλο το κείμενο, δηλαδή πόσους χαρακτήρες έχει το κείμενο ακριβώς πίσω από την επιλογή, ή αν δεν υπάρχει επιλογή, τότε δίνει ότι και το CharPosStart
  • SelText  το επιλεγμένο κείμενο (γράφεται και διαβάζεται)
  • SelLength  γράφεται και διαβάζεται το μήκος σε χαρακτήρες της επιλογής
  • SelLengthSilent  γράφεται χωρίς να φαίνεται άμεσα
  • Visible γράφεται και διαβάζεται, κάνει το στοιχείο ορατό ή αόρατο (αν δεν είναι ορατό η SetFocus θα βγάλει λάθος, ενώ η GetFocus θα εξαφανίσει το λάθος)
  • FontSize διαβάζει η γράφει το μέγεθος χαρακτήρων
  • Font  δίνει και παίρνει αντικείμενο γραμματοσειράς.
  • BackColor διαβάζει και γράφει το χρώμα φόντου
  • ForeColor διαβάζει και γράφει το χρώμα χαρακτήρων
  • ReplaceTitle  Δείχνει μηνύματα σε μια νέα πάνω γραμμή, αν υπάρχει τίτλος τότε η γραμμή δεν φεύγει, αλλιώς με τη πρώτη επανασχεδίαση φεύγει.
  • ShowAlways  Δείχνει πάντα άσπρο φόντο, ακόμα και αν χάσει την εστίαση
  • NumberOnly   Λειτουργία αριθμού κινητής υποδιαστολής
  • NumberIntOnly Λειτουργία αριθμού ακεραίου
  • UsedAsTextBox  Λειτουργία απλής γραμμής κειμένου
  • ScrollKeyUpDown βάζει ή βγάζει τη λειτουργία ολίσθησης με τα βελάκια, δηλαδή όταν αλλάζουμε γραμμή ο διορθωτής τίνει να φέρει την γραμμή στο μέσον, με ολίσθηση. Αυτό μπορούμε να το αναιρέσουμε.
  • Linespace διαβάζεται και γράφεται 
  • LineSpacingSilent γράφεται χωρίς να γίνει εμφάνιση
  • DisplayLines   μπορούμε να ορίσουμε πόσες γραμμές θα φαίνονται, και αυτόματα ρυθμίζεται το ύψος κάθε γραμμής.
  • LineHeight διαβάζεται σε Twips
  • Locked  με Αληθές κλειδώνει για αλλαγές από τον χρήστη
  • Enabled το Aληθές ισοδυναμεί με Lociked  Ψευδές, το ψευδές δεν αλλάζει το Locked, αλλά κάνει το δρομέα να μην αναβοσβήνει, όπως δηλαδή όταν χάνει την εστίαση το στοιχείο.
  • Textinform  διαβάζεται, αλλάζει όταν αλλάζει ο δρομέας, και πριν κληθεί το γεγονός Inform.
  • NoColor διαβάζεται και γράφεται, βάζει ή βγάζει το χρωματισμό. 
  • SelHtmlText  επιστρέφει την επιλογή ως Html (κωδικοποιεί το χρώμα)
  • tabwidth 
  • CommentSymbols  σε αυτό και τα επόμενα μέχρι το ColorCollection4 ρυθμίζουμε πώς θα χρωματίζει το κείμενο το στοιχείο. Η NoColor ρυθμίζει αν θα έχει ή όχι χρωματισμό το κείμενο.
  • ComSymbolsWidth
  • MultiLineComment1
  • LineComment1
  • LineComment2
  • ColorCollection1 οι λέξεις μπαίνουν με κεφαλαία γράμματα με διαχωριστικό | (κάθετη γραμμή)
  • ColorCollection2
  • ColorCollection3
  • ColorCollection4
  • ShadowMarks
  • AutoNumber βάζει αυτόματη αρίθμηση στις παραγράφους
  • Charpos η θέση του δρομέα στη τρέχουσα παράγραφο, για καλύτερα διαβάζουμε τη θέση  με την επόμενη ιδιότητα, γιατί μπορεί να μην έχει τεθεί ο δρομέας και απλά διαβάζουμε το 0 το οποίο δεν το ξεκαθαρίζει! Σε μια παράγραφο δυο γραμμάτων η θέση του δρομέα μπορεί να είναι 0, 1 ή 2 δηλαδή πριν το πρώτο γράμμα, αμέσως μετά το πρώτο και μετά το δεύτερο.
  • ParaSelStart υπολογίζει την θέση στη παράγραφο του δρομέα. Δίνει 0 αν δεν έχει τεθεί ο δρομέας, αλλιώς δίνει από 1 τη θέση του δρομέα. Στο πρώτο γράμμα δίνει 1 είτε είναι ο δρομέας πριν το γράμμα ή ακριβώς μετά.
  • Showparagraph αν είναι αληθές τότε δείχνει τους μη φανερούς χαρακτήρες
  • SelectionColor  το χρώμα φόντου της επιλογής, η μέθοδος ResetSelColors το επαναφέρει
  • SelectionTextColor το χρώμα κειμένου της επιλογής, όπως το προηγούμενο.
  • Top  η θέση Υ πάνω αριστερά του στοιχείου σε twips
  • Left η θέση Χ πάνω αριστερά του στοιχείου σε twips
(θα συμπληρωθεί αργότερα)

Μέθοδοι
  • Show επανασχεδιάζει το στοιχείο (με χρονική καθυστέρηση), χωρίς να κάνει υπολογισμό ξανά για τυχόν αναδιπλώσεις (δες το Render)
  • SetFocus  βάζουμε την εστίαση σε αυτό το στοιχείο (εφόσον είναι ορατό).
  • GetFocus  καλεί το SetFocus αλλά μπορεί να μην γίνεται, και περιορίζει το σφάλμα.
  • SetRowColumn Γραμμή, Στήλη, και προαιρετικά αν θα εμφανιστεί στο θεατό τμήμα του παραθύρου.
  • Move δέχεται δυο ορίσματα συν δυο προεραιτικά, τα δυο πρώτα είναι η θέση στη φόρμα, τα left και top, και τα άλλα δυο είναι το πλάτος και ύψος του στοιχείου (σε twips).
  • FontAttr δέχεται ένα όρισμα με το όνομα γραμματοσειράς, και προαιρετικά δυο ακόμα, το μέγεθος και αν θέλουμε να έχουμε φαρδιά γράμματα (bold) 
  • Colors ρυθμίζει τα χρώματα
  • ColorsReset γυρνάει τα χρώματα στα αρχικά 
  • ResetSelColors γυρνάει τα χρώματα επιλογής στα αρχικά
  • Transparent  Διάφανο φόντο
  • TextViewOnly  Λειτουργία προβολής κειμένου μόνο
  • PressKey Κωδικός_πληκτρολογίου, Θέση_ειδικών_πλήκτρων.
  • PopUpMenu τίτλος$, Χ, Υ  ανοίγει την εσωτερικική λίστα επιλογής
  • Mn1sub κάνει αποκοπή στο επιλεγμένο κείμενο (αυτή τη μέθοδο την  βάζουμε καλούμε από  ένα μενού επιλογών στη φόρμα)
  • MarkCut ίδιο με το mn1sub
  • Mn2sub κάνει αντιγραφή
  • MarkCopy ίδιο με το mn2sub
  • Mn3sub κάνει επικόλληση
  • Wordwrapsub κάνει εναλλαγή από αναδίπλωση σε χωρίς αναδίπλωση 
  • Rthissub ανοίγει το διάλογο για  αλλαγή λέξης παντού στο κείμενο, με undo.
  • Mscatsub αλλάζει μια λέξη όπου την βρει με διαφορετικά κεφαλαία - πεζά, κάποια γράμματα. (αυτό που κάνει το F4 στο διορθωτή)
  • Supsub αναζήτηση προς τα πάνω, βάσει του επιλεγμένου
  • Sdnsub αναζήτηση προς το κάτω, βάσει του επιλεγμένου
  • HelpmeSub προκαλεί το γεγονός Help
  • SearchUp λέξη_αναζήτησης$ και προαιρετικά αληθές αν ψάχνουμε οτιδήποτε και όχι μια λέξη.
  • SearchDown λέξη_αναζήτησης$ και προαιρετικά αληθές αν ψάχνουμε οτιδήποτε και όχι μια λέξη.
  • ReColor κάνει επαναχρωματισμό
  • Resize το εκτελούμε μετά από μια Move για να κάνει τις απαιτούμενες ενέργειες.
  • GetLCIDFromKeyboard συνάρτηση γυρίζει τον αροθμό "τοπικού" της γλώσσας του πληκτρολογίου. Καλούμε συνάρτηση έτσι:.   Μέθοδος Κειμ1, "GetLCIDFromKeyboard" ως Κ
  • WrapAll κάνει αναδίπλωση σε όλες τις παραγράφους 
  • Render  επανασχεδιάζει το στοιχείο
(θα συμπληρωθεί αργότερα)



Παράδειγμα 1




Σε αυτό το παράδειγμα έχουμε επιλέξει σε μια φόρμα, την Φόρμα1 να έχουμε ένα μόνο στοιχείο, το στοιχείο Κειμ1. Σε αυτό το στοιχείο θέλουμε να φαίνεται μια επικεφαλίδα που θα γράφει ότι είναι δήθεν το αρχείο alfa.txt, στοιχισμένο στα αριστερά. Δίπλα στον τίτλο, δηλαδή στην ίδια γραμμή μπορούμε να εμφανίζουμε πληροφορίες. Αν δεν δώσουμε το "Title" τότε οι πληροφορίες θα εμφανίζονται και στην επόμενη φορά που θα μετακινήσουμε το δορμέα θα εξαφανιστεί η γραμμή πληροφορίας. Το πρόγραμμα διαβάζει δυο γεγονότα, το MarkNo και το MarkOut. Το πρώτο συμβαίνει όταν από επιλεγμένο κείμενο πάμε σε μη επιλεγμένο. Το δεύτερο συμβαίνει κάθε φορά που αλλάζει το επιλεγμένο κείμενο, ακόμα και την πρώτη φορά που από μηδενικό γίνετια κάποιο. Στα δυο αυτά γεγονότα ενημερώνουμε τον τίτλο του στοιχείου, και παράλληλα γράφουμε και στην κονσόλα πίσω από την φόρμα. Η ιδιότητα ShowAlways απλά κάνει το στοιχείο να φαίνεται με λευκό φόντο συνέχεια, ακόμα και αν χάσει την εστίαση (πραγματικά υπάρχει ένα στοιχείο ακόμα, ο τίτλος της φόρμας, και μπορεί και αυτό να πάρει εστίαση, απλά δεν φαίνεται ότι παίρνει)
Όταν κάνουμε κλικ στη φόρμα τότε αλλάζει μια μεταβλητή κατάσταση (από αληθές σε ψευδές, και την επόμενη το ανάποδο), και αυτό γίνεται με το Ζ=όχι Ζ που γράφεται για μεταβλητές για πιο σύντομα έτσι Z~, και στην αλλαγή κλειδώνουμε ή ξεκλειδώνουμε το στοιχείο. Όταν είναι κλειδωμένο το στοιχείο δεν μπορούμε να το διορθώσουμε.





Όρισε Φόρμα1 Φόρμα
Όρισε Κειμ1 Κείμενο Φόρμα Φόρμα1
Μέθοδος Κειμ1, "Move", 1000,1200,6000,3000
Με Κειμ1, "ShowAlways", Αληθές, "SelText" ως ΕπιλΚειμ$ , "Title", "alfa.txt", "ReplaceTitle",""

Συνάρτηση Κειμ1.MarkNo {
      Τύπωσε "Όχι"
      Με Κειμ1, "ReplaceTitleHold","Όχι"
      Ανανέωση
}
Συνάρτηση Κειμ1.MarkOut {
      Τύπωσε "Ναι", ΕπιλΚειμ$
      Με Κειμ1, "ReplaceTitleHold","Ναί"
      Ανανέωση
}
Ζ=Ψευδές
Συνάρτηση Φόρμα1.Click {
      Με Κειμ1,"Locked", Ζ
      Ζ~
}
Μέθοδος Φόρμα1, "Show",1
Όρισε Κειμ1 Τίποτα
Όρισε Φόρμα1 Τίποτα

Παράδειγμα 2


Σε αυτό το παράδειγμα θα φτιάξουμε τρια στοιχεία Κείμενο, και θα τα χρησιμοποιήσουμε για εισαγωγή/εμφάνιση τιμών (λειτουργίες 2 και 3)
Δείτε επίσης ότι ορίζουμε μεταβλητές όπως την Τιμ1, Τιμ2 και Τιμ3$ που συνδέονται με ιδιότητες αντικειμένων. (Αυτές οι μεταβλητές μπορούν να χρησιμοποιηθούν για διάβασμα, μέσα σε εκφράσεις, ή για εκχώρηση τιμής, επειδή είναι ιδιότητες και για γραφή και για ανάγνωση).

Αριστερά από κάθε Κείμενο βάζουμε μια ετικέτα. Οι ετικέτες γράφονται στο φόντο, στη φόρμα. Δηλαδή δεν αποτελούν κάποιο στοιχείο. Θα μπορούσαμε να είχαμε άλλα στοιχεία Κείμενο με λειτουργία προβολής μόνο και με διαφάνεια, αλλά αυτό στην περίπτωση που θα θέλαμε να αλλάζαμε το περιεχόμενό τους, σε κάποια αλλαγή κατάσταση. Εδώ δεν μας ενδιαφέρει να αλλάξουμε τις ετικέτες. Επιπλέον μας ενδιαφέρει οι τελευταίες δυο γραμμές να αλλάζουν, για να τις χρησιμοποιήσουμε ως οθόνη κατάστασης (κάτι σαν status line, αλλά εδώ εχουμε περισσότερες από μια γραμμές). Χρησιμοποιούμε την δυνατότητα να ορίζουμε χωριστή οθόνη ακόμα και σε φόρμα χρήστη, με την εντολή Οθόνη, ώστε το κάτω μέρος να ολισθαίνει μόνο, και η επόμενη εντολή οθόνη σε αυτό το επίπεδο (δείτε ότι καλούμε την εντολή Επίπεδο με το όνομα της φόρμας) θα καθαρίσει το κάτω μέρος όπως έχουμε ορίσει. Πρέπει να λέμε τι χρώμα θέλουμε να καθαρίσει, αλλιώς βάζει το χρώμα της κοσνόλας!
Έχουμε ρυθμίσει στο Click και στο Enter της φόρμας να αυξάνεται κατά ένα η τιμή στο Κειμ1 που ορίσαμε ως αριθμό κινητής υποδιαστολής. Όποτε στα Κειμ1, Κειμ2 και Κειμ3 πατήσουμε το Enter, θα κληθεί το Φόρμα1.Enter και αυτό θα κάνει την αλλαγή τιμής!
Αν πατήσουμε το Ctrl+F1 μέσα στα Κειμ1, Κειμ2 και Κειμ3 θα κληθούν ξεχωριστά γεγονότα. Δείτε όμως εδώ πώς κατευθύνουμε αυτά τα γεγονότα στην συνάρτηση που εξυπηρετεί το Ctrl+F1 της φόρμας (γεγονός About).
Δείτε λίγο τι κάνουμε στην εντολή Επίπεδο Φόρμα1 {} με την εντολή Παράθυρο καθορίζουμε το μέγεθος χαρακτήρων και δίνουμε και ένα επιθυμητό μέγεθος σε πλάτος και ύψος. Αυτή η εντολή θα κόψει αν χρειαστεί από το ύψος για να έρθουν οι γραμμές χαρακτήρων χωρίς περίσσευμα, πχ μισής γραμμής.
Μπορείτε να πάτε στην μεθεπόμενη παράγραφο (παρακάτω υπάρχουν πληροφορίες για τη λειτουργία της Μ2000 και τα Επίπεδα)
Ο τρόπος εμφάνισης στην Τύπωσε μπορεί να αλλάξει (από το 0 έως το 9) και αυτό έχει να κάνει με το πώς γράφει, αναλογικά ή μη αναλογικά, και πώς στοιχίζει γράμματα και αριθμούς. Ο τρόπος 4 είναι η αναλογική γραφή. Η Τύπωσε είναι μια πολύπλοκη εντολή, και μπορεί κανείς να διαβάσει την βοήθεια για αυτήν ή να δει παραδείγματα. Επειδή επιφέρει αλλαγές που σχετίζονται με τις επόμενες Τύπωσε, η Μ2000 κρατάει για κάθε επίπεδο χωριστή κατάσταση, που περιλαμβάνει πολλές παραμέτρους, όπως για παράδειγμα τη θέση του δρομέα γραφικών, του δρομέα χαρακτήρων, τα χρώματα φόντου και πένας και άλλα. Μέχρι και για 100 φόρμες χρήστη μπορεί να κρατήσει στοιχεία επιπέδου. Κρατάει για το περιθώριο (Επίπεδο πίσω από την Κονσόλα), για την Κονσόλα, για 32 επίπεδα πάνω από την κονσόλα αλλά εντός του περιθωρίου (η κονσόλα και τα 32 επίπεδα -αυτά τα τελευαία γίνονται και κινούμενα αντικείμενα) ανήκουν στο περιθώριο, τη βασική φόρμα της Μ2000, και όλες οι φόρμες χρήστη βρίσκονται πάνω από αυτό, ακόμα και αν η βασική φόρμα είναι ελαχιστοποιημένη. Υπάρχει άλλο ένα επίπεδο, το χαρτί του εκτυπωτή, και μια φόρμα που λέγεται Επιφάνεια, και βρίσκεται κάτω από την βασική φόρμα, και μέσω αυτής ρυθμίζουμε την διαφάνεια, και το τρόπο που λειτουργεί αυτή, για την βασική φόρμα. Με την χρήση της επιφάνειας μπορούμε να δώσουμε σχήμα στην κονσόλα και να φύγουμε από το τετράπλευρο!

Η εντολή επιγραφή μπορεί να τυπώνει με γραμματοσειρά ανεξάρτητηα από την τρέχουσα, αλλά εδώ λέμε να δουλέψει με την τρέχουσα (για την φόρμα, όχι για τα στοιχεία της φόρμας). Αυτή η εντολή γράφει κείμενο βάσει του δρομέα γραφικών, και έχει την δυνατότητα να περιστρέφει το κείμενο. Εδώ έχουμε γωνία 0. Έχει επίσης την δυνατότητα από τη θέση που θέλουμε να δείξουμε την επιγραφή να κάνει δεξιά ή αριστερή ή στο κέντρο στοίχιση. Εδώ θέλουμε τη δεξιά στοίχιση. Για να διευκολύνουμε το προγραμματισμό, έχει οριστεί μια μεταβλητή θέσηΧ ώστε μελλοντικά αν αλλάξει το μέγεθος των επιγραφών να μετακινήσουμε τις επιγραφές και τα στοιχεία ανάλογα.

Όρισε Φόρμα1 Φόρμα
Όρισε Κειμ1 Κείμενο Φόρμα Φόρμα1
Όρισε Κειμ2 Κείμενο Φόρμα Φόρμα1
Όρισε Κειμ3 Κείμενο Φόρμα Φόρμα1
θεσηΧ=4000
Μέθοδος Κειμ1, "Move", θεσηΧ,1200,5000,400
Μέθοδος Κειμ2, "Move", θεσηΧ,1800,5000,400
Μέθοδος Κειμ3, "Move", θεσηΧ,2400,5000,400
νγ$={
}
Με Κειμ1, "ShowAlways", Αληθές, "NumberOnly",Αληθές, "Value" ως Τιμ1
Με Κειμ2, "ShowAlways", Αληθές, "NumberIntOnly",Αληθές, "Value" ως Τιμ2
Με Κειμ3, "ShowAlways", Αληθές, "UsedAsTextBox", Αληθές,"Text" ως Τιμ3$
Τιμ1=93.112
Τιμ2=1456
Τιμ3$="Μια γραμμή μόνο"
Συνάρτηση Κειμ1.About {
      Κάλεσε Τοπικά Φόρμα1.About()
}
Συνάρτηση Κειμ2.About {
      Κάλεσε Τοπικά Φόρμα1.About()
}
Συνάρτηση Κειμ3.About {
      Κάλεσε Τοπικά Φόρμα1.About()
}
Συνάρτηση Φόρμα1.About {
      Επίπεδο Φόρμα1 {
            Οθόνη #606060
            Τύπωσε $(Τρόπος),"Κάνε κλικ εδώ ή πάτα Enter"
      }
}
Συνάρτηση Φόρμα1.Enter {
      Κάλεσε Τοπικά Φόρμα1.Click()
}
Συνάρτηση Φόρμα1.Click {
      Επίπεδο Φόρμα1 {
            Τιμ1=Τιμ1+1 \\ δεν δουλεύει το Τιμ1++ γιατί είναι αντικείμενο και όχι μεταβλητή
            Οθόνη #606060
            Τύπωσε Τιμ1, Τιμ2, " Ctrl+F1"
            Τύπωσε Πάνω $(9), Τιμ3$
            Ανανέωση
            Μέθοδος Κειμ1, "Show"
      }
}
Τρόπος=4
Επίπεδο Φόρμα1 {
      Γραμματοσειρά "Arial Black"
      Παράθυρο 16, 10000,4500
      Πένα 15
      Οθόνη #202020
      Οθόνη #606060, Ύψος-2
      Θέση θεσηΧ, 1200+400
      Επιγραφή "Ετικέτα ", Γραμματοσειρά$, Τύπος, 0, 1
      Θέση θεσηΧ, 1800+400
      Επιγραφή "Άλλη ετικέτα ", Γραμματοσειρά$, Τύπος, 0, 1
      Θέση θεσηΧ, 2400+400
      Επιγραφή "Και άλλη ετικέτα ", Γραμματοσειρά$, Τύπος, 0, 1
      Πένα 13
      Τύπωσε $(Τρόπος),"Κάνε κλικ εδώ ή πάτα Enter"
}
Μέθοδος Φόρμα1, "Show",1
Όρισε Κειμ1 Τίποτα
Όρισε Φόρμα1 Τίποτα



Παράδειγμα 3

Σε αυτό το παράδειγμα έχουμε δυο στοιχεία, ένα Κειμένο και ένα Εισαγωγή. Είχε δοθεί παλαιότερα, στα αγγλικά και εδώ είναι στα ελληνικά! Το στοιχείο Κείμενο το χρησιμοποιούμε για προβολή μόνο. Το ενδιαφέρον του προγράμματος είναι ότι έχουμε βάλει διαφάνεια και στα δύο στοιχεία και έχουμε βάλει ένα νήμα να αυξομειώνει μια έλλειψη με γέμισμα (ελλειπτικός δίσκος). Αυτό γίνεται συνέχεια μέχρι να κλείσει η φόρμα. Κατά την εκτέλεση του νήματος, μπορούμε να χειριζόμαστε τα στοιχεία, όπως να κάνουμε ολίσθηση στο κείμενο, ή να γράφουμε στην εισαγωγή κειμένου.
Αν πατήσουμε το enter στο Εισ1 (το αντικείμενο Εισαγωγή) θα δώσουμε το περιεχόμενο στο τίτλο της φόρμας και θα καθαρίσουμε το αντικείμενο για νέα εισαγωγή.


Όρισε Φόρμα1 Φόρμα
Επίπεδο Φόρμα1 { Οθόνη 7
   Θέση χ.σημεία/2, υ.σημεία/2
   Πένα 14 { Κύκλος Γέμισμα 14, 100, 0.5}
   Πλ=χ.σημεία
}
Όρισε Κειμ1 Κείμενο Φόρμα Φόρμα1
Όρισε Εισ1 Εισαγωγή Φόρμα Φόρμα1
Μέθοδος Κειμ1, "move",1000,1000,Πλ-2000,2000
Μέθοδος Εισ1, "move",1000,3600,Πλ-2000,600
Με Φόρμα1, "Title" ως Τιτλ1$
Με Εισ1, "VarText" ως Εισ1$
Εισ1$="Γράψε εδώ ότι θες..."
Με Κειμ1, "Text",{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
}
Μέθοδος Κειμ1,"TextViewOnly"
Μέθοδος Κειμ1, "Transparent"
Μέθοδος Κειμ1, "Colors", 15, 15
Μέθοδος Εισ1, "Transparent"
Μέθοδος Εισ1, "Colors", 15,15
μ=10 : σ=1
Επίπεδο Φόρμα1 {
      Νήμα {
            Οθόνη 7
            Πένα 0 { Κύκλος Γέμισμα 0, μ*100, 0.5}
            μ+=σ
            Αν μ>=40 Τότε σ=-1
            Αν μ<2 Τότε σ=1
            Μέθοδος Φόρμα1, "RefreshAll"
      } ως μμ κάθε 30
}
Συνάρτηση Εισ1.Enter {
      Τιτλ1$=Εισ1$
      Εισ1$=""
}
Μέθοδος Φόρμα1, "Show", 1
Νήματα Σβήσε
Όρισε Φόρμα1 Τίποτα





Υπάρχουν και άλλα παραδείγματα τα οποία θα τα δούμε σε συνδυασμό με άλλα στοιχεία, όπως το μεγάλο παράδειγμα με το M2000 Pad, ένα σημειωματάριo με μενού επιλογής, σε φόρμα με δυνατότητα αλλαγής μεγέθους, και ταυτόχρονης αλλαγής μεγέθους του στοιχείου Κείμενο, και συνάμα αλλαγής αναδίπλωσης λέξεων (επανακαθορισμό γραμμών βάσει παραγράφων και αναδίπλωσης), και όλα αυτά με χρωματισμό εντολών (στο σημειωματάριο δουλεύει ο χρωματισμός Visual Basic 6 προγραμμάτων, επειδή καθορίστηκαν οι λέξεις και ο τρόπος χρωματισμού)







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

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

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