Αφού έβαλα το αντικείμενο Γεγονός ήρθε η ώρα για GUI, διεπαφή με παραθυρικό περιβάλλον. Τα παράθυρα που φτιάχνει η VB6 δεν κάνουν για την M2000, για αρκετούς λόγους. Ένας είναι ότι δεν είναι unicode, υποχρεωτικά εξυπηρετούν μια γλώσσα. Ένας άλλος είναι ότι σπάνε την ροή νημάτων, τη πολυεπεξεργασία δηλαδή, αν μετακινήσει κανείς τη φόρμα, ή αν κρατάει πατημένο το κουμπί που την κλείνει.
Ήδη από το 2014 έχω φτιάξει τις βασικές, πχ άνοιγμα αρχείου, με δικά μου παράθυρα, τα οποία δεν σταματούν τα νήματα, είναι unicode, και βγαίνουν ακριβώς τα ίδια σε οποιαδήποτε Windows.
Στην αναθεώρηση 183 έχω βάλει φόρμες χρήστη, προς το παρόν μόνο buttons βάζουμε, αλλά σε λίγες μέρες θα έχω φτιάξει τους wrappers για τα υπόλοιπα. Οι wrappers είναι ενδιάμεσα αντικείμενα. Επειδή στις φόρμες χρήστη τα αντικείμενα όπως buttons μπαίνουν κατά βούληση, χρειάζονται ένα αντικείμενο να μαζεύει τα μηνύματά κάθε στοιχείου, ένα για το καθένα. Για να υπάρχει δηλαδή έλεγχος του κλικ, πρέπει να δηλωθεί μια άμεση σχέση. Εφόσον η φόρμα μας θα πάρει άγνωστο αριθμό γραφικών στοιχείων διεπαφής, δεν θα μπορεί άμεσα να διαχειριστεί τα γεγονότα που έχουν.και παράγουν αυτά. Τα αντικείμενα wrappers, παίρνουν τα μηνύματα από το αφοσιωμένο γραφικό στοιχείο τους και το στέλνουν στη φόρμα, η οποία κρατάει ένα αντικείμενο Γεγονός της Μ2000, και το πυροδοτεί, μεταφέροντας το μήνυμα, από το στοιχείο και μια αναφορά στή φόρμα. Η αναφορά μπορεί να χρησιμοποιηθεί στον αποδέκτη των μηνυμάτων, για επικοινωνία με τη φόρμα πριν εκτελέσει αυτός το κλικ για παράδειγμα σε ένα button.
Το ενδιαφέρον στη Μ2000 είναι ότι με τη χρήση νημάτων μπορούμε να φτιάξουμε παράδειγμα, το έχω αναρτήσει, όπου η εκτέλεση των μηνυμάτων να γίνεται ασύγχρονα. Πχ. σε ένα button έχω βάλει να ανοίγει ένα message box, φτιαγμένο με στοιχεία της Μ2000, το οποίο σταματάει την ροή εντολών περιμένοντας να πατήσουμε Εντάξει ή Άκυρο. Χωρίς την ασύγχρονη λειτουργία, κανένα άλλο μήνυμα δεν θα ήταν αποδεκτό. Βάζοντας τη αναμονή του message box σε νήμα, και επειδή έχει σχεδιαστεί να επιτρέπει την εκτέλεση νημάτων, συνεχίζει το σύστημα να δέχεται έτσι μηνύματα. Στο παράδειγμα που έχω ανεβάσει χρησιμοποιώ διπλό νήμα. Γιατί αν το ένα είναι σε αναμονή, τα μηνύματα συσσωρεύονται, και θα εκτελεστούν στην συνέχεια, ενώ με το δεύτερο νήμα εκτελούνται άμεσα. Με δύο μεταβλητές ελέγχω αν ένα νήμα, από τα δύο για την εκτέλεση των μηνυμάτων, είναι μπλοκάρισμένο και δεν το τροφοδοτώ.
ΓΚ