Τετάρτη 25 Νοεμβρίου 2015

Γνωριμία με την οθόνη (Μέρος Α)

Η οθόνη της Μ2000 εμφανίζει στην αρχή ένα περιθώριο και μια κεντρική οθόνη. Και στα δύο μπορούμε να γράφουμε. Εδώ μας ενδιαφέρει το γεγονός ότι στην αρχή το περιθώριο καλύπτει όλη την οθόνη. Θέλουμε να μετρήσουμε το πλάτος και το ύψος της οθόνης

Ας δούμε δυο απλές εντολές:
1.Αν δεν έχουμε μετακινήσει το περιθώριο τότε τα χ.σημεία και υ.σημεία δίνουν το μέγεθος σε Twips, Αν τα διαιρέσουμε δια 15 θα πάρουμε τον αριθμό εικονοστοιχείων. Οπότε ανοίγουμε ένα μπλοκ εντολών στο περιθώριο.  (στα 96dpi έχουμε 1440/96 μέγεθος pixel σε twips = 15).

2. Η εντολή Στη ( ή LET ) δέχεται πολλαπλές αντικαταστάσεις με κόμμα, και επιπλέον, πρώτα εκτελεί το δεξιό μέρος και μετά το αριστερό (εδώ δεν έχει σημασία γιατί είναι μεταβλητή, ενώ έχει σημασία αν είναι πίνακας και σαν δείκτες έχουμε εκφράσεις με συναρτήσεις χρήστη).

3.Το ερωτηματικό ? είναι συντομογραφία για την Τύπωσε.


περιθωριο {στη χ=χ.σημεια/15, υ=υ.σημεια/15 }
? μορφη$("Ανάλυση Οθόνης {0:0}X{1:0}"χυ)


Το ίδιο κάνει και αυτό: Έχω απλά χρησιμοποιήσει το ΔΙΑ που κάνει ακέραια διαίρεση. Δείτε εδώ όμως κάτι που έχει σημασία. Για να χρησιμοποιήσεις τη ΔΙΑ ή MOD σε άλλες γλώσσες πρέπει να έχεις ακέραια μεταβλητή. Δεν συμβαίνει αυτό με την Μ2000. Οι μεταβλητές εδώ είναι πραγματικές διπλού εύρους (double).
περιθωριο {στη χ=χ.σημεια δια 15+1, υ=υ.σημεια δια 15+1}
? μορφη$("Ανάλυση Οθόνης {0}X{1}"χυ)


Έχουμε δώσει ότι το πλάτος και ύψος του εικονοστοιχείου είναι 15 twips. Αυτό αληθεύει τις περισσότερες φορές για την οθόνη. Αλλά μπορούμε να μάθουμε τι έχουμε (γιατί όλες οι εντολές που γράφουμε και σχεδιάζουμε εκτελούνται και για το χαρτί του εκτυπωτή).
? πλάτος.σημείου, ύψος.σημείου
θα δώσει 
     15     15

Τα twips είναι δυο ειδών, τα λογικά και τα πραγματικά. Στους εκτυπωτές είναι πραγματικά, δηλαδή όταν τραβάμε μια γραμμή 1440 twips είναι ακριβώς μια ίντσα. Στην οθόνη είναι λογικά διότι ουδείς φέρνει στα ίσα τα dpi της οθόνης για να έρθουν τα λογικά twips στα πραγματικά. Από τα windows 95 υπήρχε πρόβλεψη με ένα χαρακάκι που έδειχνε για να αλλάξει κανείς τα dpi βάζοντας έναν κανονικό χάρακα για να τα φέρουμε στα ίσα. Απλά οι περισσότεροι προγραμματιστές δεν έφτιαχναν προγράμματα βασισμένα σε twips αλλά σε εικονοστοιχεία για 96 dpi. Και έτσι έμεινε στα αζήτητα το θέμα. Στα Windows 7 βλέπουμε "ταρζανιές" για να ανταποκριθούν σε αυτή την κολλημένη κατάσταση με τα 96dpi, δηλαδή μπορούν να αλλάξουν το μέγεθος των προγραμμάτων προσποιούμενα ότι τα dpi είναι 96 ενώ δεν είναι! Δηλαδή το πρόβλημα των λογικών twips είναι ότι μπορούν να συνυπάρχουν προγράμματα που να βλέπουν την ίδια οθόνη με διαφορετικά twips! 

Με τις εντολές παραπάνω μπορούμε να τα δούμε όλα αυτά στη πράξη, Δηλαδή πριν εκτελέσουμε το περιβάλλον της Μ2000 μπορούμε από τις ιδιότητες του αρχείου στη Συμβατότητα να αλλάξουμε αυτό: Απενεργοποίηση της διαβάθμισης προβολής σε υψηλές ρυθμίσεις DPI (Disable display scaling on high DPI settings). Μετά αλλάζουμε τα Dpi όπως δείχνει εδώ. Έτσι μπορούμε να δοκιμάσουμε τις εντολές για να καταλάβουμε τι παίζει (σε κάθε περίπτωση τα φυσικά εικονοστοιχεία δεν έχουν αλλάξει)

Να προσθέσω εδώ ότι γενικά τη Μ2000 την τρέχουμε με τη Συμβατότητα να είναι μόνο στο "Εκτέλεση αυτού του προγράμματος με δικαιώματα διαχειριστή". Αλλά τρέχει και χωρίς αυτό.
Έστω ότι γνωρίζουμε πως μπορούμε να αλλάξουμε την ανάλυση της οθόνης σε 1024Χ768 και 1152Χ864 (μέσα σε virtual box γίνεται αυτό, αλλά δείτε τι δίνει η Αλλαγή Ανάλυσης των Windows 7 - τα παραδείγματα είναι σε Windows 7)
Μπορούμε να αλλάξουμε ανάλυση μέσα από την Μ2000 και όταν τερματίσει το περιβάλλον θα την επαναφέρει εκεί που ήταν!
Σε ένα τμήμα Α γράψτε αυτό
ΑΝΑΛΥΣΗ.ΟΘΟΝΗΣ 1152, 864
Σε ένα τμήμα Β γράψτε αυτό
ΑΝΑΛΥΣΗ.ΟΘΟΝΗΣ 1024, 768

Τώρα με Α και Β αλλάζουμε τη ανάλυση! Δείτε όμως πως το περιθώριο δεν αλλάζει.

Δείτε τώρα αυτή την εντολή:
Ορίζουμε ότι το παράθυρο (μαζί με το περιθώριο) θα είναι πλάτους 10000 twips και ύψους 8000 twips με 10pt γράμματα (δεκάρια τα λέμε, και η μονάδα τους λέγεται points, ή pt, και αντιστοιχούν 72pt σε μια ίντσα, να γιατί τα twips είναι 1440 σε μια ίντσα,  κάθε 20 twips είναι ένα pt.. Στον εκτυπωτή όπως είδαμε παραπάνω τα twips είναι πραγματικά - δηλαδή αντιστοιχούν 1440 twips σε μια ίντσα). Άρα τα 10pt γράμματα θα είναι 10/72 της ίντσας ή 10/72*2.54 για εκατοστά.

Μια παρένθεση εδώ: το  (10/72)*2.54 είναι  ίδιο με το 10/72*2.54 αλλά όχι με αυτό 10/(72*2.54)

Παράθυρο 10, 10000, 8000;
Πού είμαστε ακριβώς;
? Κινηση.πχ, Κινηση.πυ
Μας δίνει το σημείο σε twips της πάνω αριστερής θέσης του παραθύρου μας.
Τώρα μπορούμε να μετακινήσουμε το παράθυρο:
Κινηση.π 0,0

Μπορούμε να επαναφέρουμε το παράθυρο σε όλη την οθόνη γρήγορα
Παραθυρο 10,0

Θέλουμε τώρα μια οθόνη (άσχετα με το παράθυρο) με 20 χαρακτήρες επί 15 γραμμές:
Φόρμα 20,15
Η εντολή θα χρησιμοποιήσει αυτόματα διάστιχο για να καλύψει το ύψος του παραθύρου αλλά πιθανόν να μείνουν "μισά" πάνω και κάτω καθώς και αριστερά και δεξιά τα οποία τα καλύπτει το περιθώριο.
Αν έχουμε αλλάξει ανάλυση βοηθάει αυτή η εντολή:
Επιφάνεια Καθαρή
και μετά κάνουμε αυτό:
Περιθώριο {Οθόνη 3}
Οπότε καλύπτουμε με ένα πράσινο χρώμα όλο το περιθώριο.
Μπορούμε να αλλάξουμε πάλι φόρμα:
Φορμα 80,50
Μπορούμε να δούμε τι μέγεθος γραμμάτων έχει αυτόματα επιλέξει η φόρμα και τι διάστιχο καθώς, το πλάτος και ύψος σε χαρακτήρες και το ίδιο σε twips
? Τύπος, Διάστιχο, Πλάτος, Ύψος, Χ.Σημεία, Υ.Σημεία
 Οι συντεταγμένες έχουν για 0,0 το πάνω αριστερό σημείο. Η φόρμα έχει κάτω δεξιό σημείο το Πλάτος-1, Ύψος-1 και για γραφικά το Χ.Σημεία-1 έως Υ.Σημεία-1
Μπορούμε να δούμε πόσα εικονοστοιχεία έχουμε:
? Χ.Σημεία/Πλάτος.σημείου, Υ.Σημεία/Ύψος.σημείου

Πριν χρησιμοποιηθεί η Φόρμα υπήρχε μια άλλη εντολή η Τύπος (υπάρχει ακόμα) που αλλάζει την οθόνη σε σχέση με το μέγεθος, αλλά μπορεί να αλλάξει και πλάτος και ύψος.
Τυπος 14, 10000, 8000
? Τύπος, Διάστιχο, Πλάτος, Ύψος, Χ.Σημεία, Υ.Σημεία
Δείτε τώρα ότι τα Χ.Σημεία δεν είναι 10000. Αυτό συμβαίνει γιατί το τελικό μέγεθος εξαρτάται από το πόσες φορές χωράει ο "μέγιστος" χαρακτήρας σε τύπο 14, για να μην υπάρχουν άχρηστα εικονοστοιχεία. Τα άχρηστα μπορεί να είναι στο περιθώριο και αυτή ήταν αρχικά και η ιδέα του περιθωρίου. Η οθόνη είναι κεντραρισμένη στο περιθώριο.
Η παρακάτω εντολή θα επαναφέρει την οθόνη σε πλήρες μέγεθος (εντός του παραθύρου πάντα)
Φορμα 60,30
Η εντολή Φόρμα θα δώσει 60Χ30 με οποιοδήποτε μέγεθος παραθύρου! Αντίθετα η εντολή Τύπος θα δώσει συγκεκριμένο μέγεθος χαρακτήρων σε ότι ανάλυση  πλάτοςΧύψος βγει!

Τέλος για σήμερα έχει και μια γνωριμία με το τι είναι το 1Χ1 κουτάκι χαρακτήρα: Είναι ένα μέρος της οθόνης που χωράει έναν μη αναλογικά τυπωμένο χαρακτήρα. Αναλογική εκτύπωση έχουμε όταν ο δρομέας εκτύπωσης μετακινείται κατά το πλάτος του κάθε χαρακτήρα. Μη αναλογική εκτύπωση έχουμε όταν ο δρομέας μετακινείται με σταθερά διαστήματα. Στην αναλογική γραφή μιλάμε για την κίνηση στο οριζόντιο. Αυτό λοιπόν το 1Χ1 κουτάκι πρέπει να χωράει τον μεγαλύτερο χαρακτήρα. Επιπλέον έχει ληφθεί στο σχεδιασμό να χωράει την πλάγια (italic) και την φαρδιά (bold) εκδοχή.
? Γραμματοσειρά$, τύπος, πλάγια, φαρδιά
Πλάγια 1: ? "Πλάγια γράμματα"Πλάγια 0
Πλάγια : Πλάγια 1 : ? "Πλάγια γράμματα"Πλάγια 
Η εντολή Πλάγια δουλεύει και χωρίς νούμερα, και κάνει αντιστροφή. Με το Πλάγια 1 είμαστε σίγουροι ότι θα έχουμε πλάγια ευθύς μετά (σημειώστε ότι το περιβάλλον κρατάει λογαριασμό για αυτά ξεχωριστά για το περιθώριο, την οθόνη, τον εκτυπωτή και τα 32 επίπεδα πάνω από την οθόνη)

Σε επόμενες αναρτήσεις θα δούμε όλες τις χρήσεις της οθόνης για εμφάνιση και εισαγωγή στοιχείων.

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

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

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