Παρασκευή 23 Δεκεμβρίου 2016

Classic Spaceship Example (OOP)

Παρακάτω είναι το κλασικό παράδειγμα με το διαστημόπλοιο, το οποίο σε C++ έχει πρόβλημα, γιατί οι συναρτήσεις μπορούν να καθοριστούν με overload να δουλέψουν για διαφορετικά αντικείμενα αλλά αυτό γίνεται την ώρα που κάνουμε compile, οπότε χάνουμε την δυναμική συμπεριφορά όταν αλλάζουμε interface.
Στη Μ2000 δεν έχουμε πολλαπλά interface, αλλά κάνουμε χρήση του αντικειμένου Ομάδα (Group) τα οποία μπορούμε να φτιάξουμε είτε απευθείας με την εντολή Ομάδα ή με συνάρτηση που γυρίζει Ομάδα και φτιάχνεται με την εντολή Κλάση. Οι κλάσεις στην Μ2000 είναι συναρτήσεις που δίνουν αντικείμενα ενός και μόνο τύπου: Ομάδα. Εδώ για να ξεχωρίσουμε τύπους, βάζουμε σε κάθε περίπτωση ένα όνομα τύπου σε μια "συμφωνημένη" ιδιότητα (μεταβλητή στην ομάδα), εδώ Iam$.
Αντί να κάνουμε Overload στο τμήμα (module) το οποίο δεν έχει νόημα στην Μ2000, δίνουμε μια παράμετρο Α η οποία όμως πρέπει να είναι ομάδα. Κάθε φορά ελέγχουμε το Iam$ για να κάνουμε αυτό που θέλουμε στη συγκεκριμένη ομάδα. Εδώ το πέρασμα της ομάδας γίνεται με αντιγραφή (by value). Αν χρεισιμοποιούσαμε το &Α τότε θα έπρεπε στην κλήση του τμήματος (module) να δώσουμε το χαρακτήρα & μπροστά από το όνομα της ομάδας για να την περάσουμε με αναφορά.


\\ M2000 has no types for classes
\\ so for this example we use property Iam$ for indicator of type
\\ A Class is a function which return an object (Group named in M2000)
\\ In M2000 modules and functions are open to include any list of parameters
\\ list of parameters added to a special stack
\\ functions clear this stack at the end
\\ modules use the same special stack to return values also
\\ Here we use module Collide only with one parameter
\\ But module SpaceShip (Look class SpaceShip) is a constructor and can be called
\\ as a function and return an object and this is the real constructor
\\ or as an object module for manipulating (we can add temporary functions or modules)

\\ This is an example from https://en.wikipedia.org/wiki/Double_dispatch#Classic_Spaceship_Example
\\
Class ApolloSpacecraft {
      Iam$="ApolloSpacecraft"
}
Class Asteroid {
      Iam$="Asteroid"
      Module CollideWith {
            \\ A is a Group (object in m2000)
           Read A
           Select case A.Iam$
           Case "SpaceShip"
                 Print "Asteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "Asteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }

}
Class SpaceShip {
      Iam$="SpaceShip"
      module SpaceShip {
            \\ this is module but stand for a construction function for Class
            If match("G") then {
                  \\ if we provide an object (Group) then we can use it
                  read A
                  \\ in next statement we copy A properties to this
                  \\ so we copy a new value for Iam$
                  this=A
            }
      }
}
Class ExplodingAsteroid {
      Iam$="ExplodingAsteroid"
      Module CollideWith {
           Read A
           Select case A.Iam$
           Case "SpaceShip"
                 Print "ExplodingAsteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "ExplodingAsteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }      
}
\\ at the left side we make a group from the function at the right
\\ inside interpreter push an unamed object to a register and then
\\ all elements (variables, functions, modules, etc) get name prefix and became static in this module
theAsteroid=Asteroid()
theSpaceShip=SpaceShip()
theApolloSpacecraft=SpaceShip(ApolloSpacecraft())
theAsteroid.CollideWith theSpaceShip
theAsteroid.CollideWith theApolloSpacecraft
\\ ok
theExplodingAsteroid=ExplodingAsteroid()
theExplodingAsteroid.CollideWith theSpaceShip
theExplodingAsteroid.CollideWith theApolloSpacecraft
\\ ok
\\ link make all variables of theExplodingAsteroid references to a new group
\\ named theAsteroidReference. Second reference for a name is an error.
link theExplodingAsteroid to theAsteroidReference
theAsteroidReference.CollideWith theSpaceShip
theAsteroidReference.CollideWith theApolloSpacecraft
\\ ok
link theApolloSpacecraft to theSpaceShipReference
theAsteroid.CollideWith theSpaceShipReference
theAsteroidReference.CollideWith theSpaceShipReference
\\ ok
\\ print  Asteroid hit an ApolloSpacecraft
\\ and   ExplodingAsteroid hit an ApolloSpacecraft


anotherSpaceShip=SpaceShip()
theAsteroid.CollideWith anotherSpaceShip
theAsteroidReference.CollideWith anotherSpaceShip
\\ prints  Asteroid hit a SpaceShip
\\ and     ExplodingAsteroid hit a SpaceShip
\\ We put a join of theApolloSpacecraft to anotherSpaceShip
\\ if anotherSpaceShip has some other items then these are also there.
\\ so only the same items changed and for the example Iam$ is changed too.
anotherSpaceShip=theApolloSpacecraft
theAsteroid.CollideWith anotherSpaceShip
theAsteroidReference.CollideWith anotherSpaceShip
\\ prints  Asteroid hit an ApolloSpacecraft
\\ and     ExplodingAsteroid hit an ApolloSpacecraft
finalSpaceShip=SpaceShip(theApolloSpacecraft)
theAsteroid.CollideWith finalSpaceShip
theAsteroidReference.CollideWith finalSpaceShip
\\ prints  Asteroid hit an ApolloSpacecraft
\\ and     ExplodingAsteroid hit an ApolloSpacecraft

In an new module we place the program bellow. Here we simulating the visitor pattern. We place a module to SpaceShip.
Class ApolloSpacecraft {
      Iam$="ApolloSpacecraft"
}
Class Asteroid {
      Iam$="Asteroid"
      Module CollideWith {
            \\ A is a Group (object in m2000)
           Read A
           Select case A.Iam$
           Case "SpaceShip"
                 Print "Asteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "Asteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }
  
}
Class SpaceShip {
      Iam$="SpaceShip"
      module SpaceShip {
            \\ this is module but stand for a construction function for Class
            If match("G") then {
                  \\ if we provide an object (Group) then we can use it
                  read A
                  \\ in next statement we copy A properties to this
                  \\ so we copy a new value for Iam$
                  this=A
            }
      }
      module CollideWith {
            Read &inAsteroid
            inAsteroid.CollideWith this
      }
}
Class ExplodingAsteroid {
      Iam$="ExplodingAsteroid"
      Module CollideWith {
           Read A
           Select case A.Iam$
           Case "SpaceShip"
                 Print "ExplodingAsteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "ExplodingAsteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }      
}
theAsteroid=Asteroid()
theSpaceShip=SpaceShip()
theApolloSpacecraft=SpaceShip(ApolloSpacecraft())
theExplodingAsteroid=ExplodingAsteroid()

link theApolloSpacecraft to theSpaceShipReference
link theExplodingAsteroid to theAsteroidReference
theSpaceShipReference.CollideWith &theAsteroid
theSpaceShipReference.CollideWith &theAsteroidReference
\\ prints  Asteroid hit an ApolloSpacecraft
\\ and     ExplodingAsteroid hit an ApolloSpacecraft



Now all calls to CollideWith need a group (object) by reference. I put (&) in the first parameter in Link statement (is optional). We have the same output.

Class ApolloSpacecraft {
      Iam$="ApolloSpacecraft"
}
Class Asteroid {
      Iam$="Asteroid"
      Module CollideWith {
            \\ A is a Group (object in m2000)
           Read &A
           Select case A.Iam$
           Case "SpaceShip"
                 Print "Asteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "Asteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }
   
}
Class SpaceShip {
      Iam$="SpaceShip"
      module SpaceShip {
            \\ this is module but stand for a construction function for Class
            If match("G") then {
                  \\ if we provide an object (Group) then we can use it
                  read A
                  \\ in next statement we copy A properties to this
                  \\ so we copy a new value for Iam$
                  this=A
            }
      }
      module CollideWith {
            Read &inAsteroid
            inAsteroid.CollideWith &this
      }
}
Class ExplodingAsteroid {
      Iam$="ExplodingAsteroid"
      Module CollideWith {
           Read &A
           Select case A.Iam$
           Case "SpaceShip"
                 Print "ExplodingAsteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "ExplodingAsteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }      
}
theAsteroid=Asteroid()
theSpaceShip=SpaceShip()
theApolloSpacecraft=SpaceShip(ApolloSpacecraft())
theExplodingAsteroid=ExplodingAsteroid()

link &theApolloSpacecraft to theSpaceShipReference
link &theExplodingAsteroid to theAsteroidReference
theSpaceShipReference.CollideWith &theAsteroid
theSpaceShipReference.CollideWith &theAsteroidReference


27/12/2018
Και να η έκδοση του προηγούμενου με δείκτες (ενώ η αναφορά ετοιμάζεται μόνο για μια σύνδεση με ένα αντικείμενο ή μεταβλητή, ο δείκτης στις ομάδες μπορεί να αλλάζει)
Δείτε επίσης ότι χρησιμοποιούμε το => αντί για τελεία στους δείκτες. Επίσης για να φτιάξουμε δείκτες χρησιμοποιούμε το -> ή αν θέλουμε να το περάσουμε ως παράμετρο, όπως το this, το Pointer(this) ή Δείκτης(Αυτό).

Εδώ έχει σημασία να κατανοήσει κανείς ότι υπάρχουν δυο ειδών δείκτες. Οι δείκτες που δείχνουν στατική ομάδα, και οι δείκτες που δείχνουν πτητική (μεταφερόμενη δηλαδή). Το Αυτό είναι στατική ομάδα, και κάθε πτητική όταν χρησιμοποιείται γίνεται στατική πρώτα αλλά δεν ξέρουμε τι όνομα έδωσε ο διερμηνευτής οπότε χρησιμοποιούμε το Αυτό.
Δείκτες που δείχνουν αποτέλεσμα μιας συνάρτησης τύπου κλάση είναι δείκτες σε πτητική ομάδα. Αν είχαμε μια πιο πολύπλοκή έκφραση (όχι δηλαδή μια απλή συνάρτηση) θα έπρεπε να βάλουμε μετά το λεπτό βέλος παρένθεση. Ομοίως βάζουμε παρένθεση γύρω από ένα όνομα ομάδας για να μας γυρίσει δείκτη σε αντίγραφό της (που είναι πτητικό). Το πρόβλημα στις στατικές ομάδες είναι ότι ο δείκτης τους δεν ισχύει αν η ομάδα διαγραφεί, δηλαδή δεν έχει μέλλον έξω από το το χώρο που το χρησιμοποιούμε. Αντίθετα δείκτες σε πτητικές ομάδες κρατάνε τις ομάδες "ζωντανές", και αυτές διαγράφονται όταν ο τελευταίος δείκτης διαγραφεί ή πάρει τιμή 0& (πχ Δ->0& θα κάνει το δείκτη Δ να δείχνει μια άδεια ομάδα, όχι Τίποτα  ή Null).

 
Class ApolloSpacecraft {
      Iam$="ApolloSpacecraft"
}
Class Asteroid {
      Iam$="Asteroid"
      Module CollideWith {
            \\ A is a Group (object in m2000)
           Read A
           Select case A=>Iam$
           Case "SpaceShip"
                 Print "Asteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "Asteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }
   
}
Class SpaceShip {
      Iam$="SpaceShip"
      module SpaceShip {
            \\ this is module but stand for a construction function for Class
            If match("G") then {
                  \\ if we provide an object (Group) then we can use it
                  read A
                  \\ in next statement we copy A properties to this
                  \\ so we copy a new value for Iam$
                  this=A
            }
      }
      module CollideWith {
            Read inAsteroid
            inAsteroid=>CollideWith pointer(this)
      }
}
Class ExplodingAsteroid {
      Iam$="ExplodingAsteroid"
      Module CollideWith {
           Read A
           Select case A=>Iam$
           Case "SpaceShip"
                 Print "ExplodingAsteroid hit a SpaceShip"
           Case "ApolloSpacecraft"
                 Print "ExplodingAsteroid hit an ApolloSpacecraft"
           Else
                 Print "???"
           End Select
      }      
}
theAsteroid->Asteroid()
theSpaceShip->SpaceShip()
theApolloSpacecraft->SpaceShip(ApolloSpacecraft())
theExplodingAsteroid->ExplodingAsteroid()
theSpaceShipReference=theApolloSpacecraft
theAsteroidReference=theExplodingAsteroid
theSpaceShipReference=>CollideWith theAsteroid
theSpaceShipReference=>CollideWith theAsteroidReference

Σάββατο 3 Σεπτεμβρίου 2016

Τα νέα μου: Σεπτέμβριος 2016!

Πολλές αλλαγές τελευταία στη ζωή μου. Από υγεία καλά, ευτυχώς. Το πρώτο νέο (κακό) είναι ότι έχασα τον πατέρα μου 85 χρονών. Το τελευταίο χρόνο δεν πήγαινε καλά, και ήταν αναμενόμενο, αν και λυπηρό. Άφησε δυο παιδιά και πέντε εγγόνια.

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

Το τρίτο "άγνωστο ή θα δείξει"...Μετακόμισα στη Πρέβεζα και πάω για μια νέα αρχή! Προς το παρόν η Μ2000 μένει πίσω για άλλες εργασίες άσχετες με το προγραμματισμό!

ΓΚ.


Πέμπτη 11 Αυγούστου 2016

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

Τελευταία ανανέωση σελίδας: 17 Φεβρουαρίου 2022

17. Αντικείμενα γραφικού περιβάλλοντος (GUI)  της Μ2000. 
Ο διερμηνευτής της Μ2000 είναι γραμμένος σε γλώσσα που δίνει την δυνατότητα χρήσης παραθύρων, που έχουν προκαθοριστεί με τα στοιχεία που θέλουμε πριν την μετάφραση σε εκτελέσιμο αρχείο. Έτσι δεν είναι δυνατόν να δώσει η Μ2000 τις φόρμες και τα στοιχεία της Visual Basic, καθώς και να φορτώνει "ξένα" στοιχεία (τύπου ocx,- Object Linking and Embedding (OLE) custom control - activeX δηλαδή). Μετά την ενσωμάτωση της χρήσης γεγονότων στη γλώσσα και επειδή όλα τα στοιχεία για τις σταθερές φόρμες (φόρμες διαλόγου που είχαν ήδη φτιαχτεί, με στατικό τρόπο) στηρίζονται σε ένα στοιχείο χρήστη (user control), βρέθηκε μια διέξοδος, που έδωσε πραγματικά φόρμες με στοιχεία που θα μπορούσε να ορίσει ο χρήστης καθώς τρέχει το εκτελέσιμο του διερμηνευτή. Το πρόβλημα που παλαιότερα δεν επέτρεπε να φτιαχτεί κάτι τέτοιο ήταν η ανάγνωση των γεγονότων από την γλώσσα. Αυτό λύθηκε με την ένταξη των γεγονότων (Events) στη γλώσσα. 

Πώς λειτουργεί το γραφικό περιβάλλον:

Ουσιαστικά κάθε φόρμα που φτιάχνουμε είναι  ένα αντίγραφο μιας φόρμας GuiM2000 (ο κώδικας της γλώσσας είναι διαθέσιμος και εδώ είναι ο κώδικας της βασικής φόρμας), και πάνω σε αυτήν υπάρχουν δυο στοιχεία, η επικεφαλίδα και ένα μικρό πλαίσιο για να τραβάμε τη φόρμα από την κάτω δεξιά γωνία. Η επικεφαλίδα είναι ένα στοιχείο glist το οποίο είναι και το μοναδικό user control που δίνει όλα τα πλαίσια διαλόγου της Μ2000 (όπως το πλαίσιο διαλόγου Ρυθμίσεις, ή το Έλεγχος), αλλά και το αντικείμενο επεξεργασίας κειμένου. Ουσιαστικά το glist πάνω στη φόρμα GuiM2000 μπορεί να φορτωθεί πολλές φορές. Με το παρακάτω παράδειγμα μπαίνει κανείς στο νόημα:

Αν έχουμε μια φόρμα ΑΛΦΑ (δώσαμε αυτό το όνομα με την Όρισε) και θέλουμε να βάλουμε ένα στοιχείο Πλήκτρο (Button), τότε ένα νέο στοιχείο glist φορτώνεται σε μια φόρμα GuiM2000 (ξέρουμε ποια φόρμα είναι, γιατί το όνομα ΑΛΦΑ είναι αναφορά στη φόρμα) και σε ένα νέο αντικείμενο GuiButton παρέχεται η αναφορά στο στοιχείο glist και μια αναφορά στη φόρμα με όνομα Callback, και επιπλέον υπάρχει αντίστροφη σύνδεση, από τη φόρμα στα εξωτερικά αντικείμενα, όπως το GuiButton, στο GuiControls της φόρμας, μια συλλογή (λίστα) στο GuiM2000, όπου προστίθεται μια αναφορά για το GuiButton του παραδείγματος, (το οποίο δεν  είναι Gui στοιχείο, αλλά κάνει sub classing το glist, δηλαδή παίρνει αυτό τα γεγονότα που παράγει το στοιχείο, και τα προωθεί στο πρόγραμμά μας, επειδή έχει όλα τα στοιχεία). Όταν κάνουμε κλικ στο glist (το πραγματικό αντικείμενο) τότε το σήμα πάει στο GuiButton  και αυτό καλεί την μέθοδο CallBack του αντικειμένου CallBack (είναι η αναφορά στο GuiM2000 μέσα στο GuiButton). Η μέθοδος CallBack ανήκει στο GuiM2000 και το μήνυμα πηγαίνει εκεί (στο τμήμα) που έχει οριστεί η φόρμα με την εντολή Όρισε. Αν η φόρμα καταστραφεί, με unload, ή όταν ορίσουμε  να είναι "τίποτα", τότε αποδεσμεύονται οι αναφορές μεταξύ στοιχείων γραφικών glist και GuiM2000 και του στοιχείου GuiButton. Για το λόγο αυτό χρησιμοποιείται η λίστα GuiControls στην φόρμα GuiM2000 η οποία έχει αναφορές στο GuiButton, και σε κάθε στοιχείο καλεί τη μέθοδο deconstruct. Τα αντικείμενα αυτά "πεθαίνουν" όταν δεν υπάρχει ούτε ένας δείκτης να τα κρατάει “εν ζωή”. 

Αν δει κανείς το κώδικα του διερμηνευτή θα δει ότι οι φόρμες GuiM2000 είναι πιο πολύπλοκες από την παραπάνω περιγραφή και αυτό συμβαίνει γιατί πρέπει να εξυπηρετούν ορισμένους σκοπούς όπως την διαδοχική (πολυεπίπεδη) χρήση Modals (modal είναι η φόρμα που ανοίγει ενώ κάνει μη προσβάσιμες τις άλλες φόρμες που είναι προσβάσιμες μέχρι στη στιγμή εκείνη, μέχρι να κλείσει).
Επίσης η πολυπλοκότητα υπάρχει και σε άλλο επίπεδο: Μπορούμε να έχουμε πίνακες με φόρμες, που σημαίνει ότι τα μηνύματα από φόρμες γυρίζουν και τον αριθμό φόρμας. Και επειδή μπορούμε να έχουμε και πίνακες με στοιχεία, και πίνακες με φόρμες, μπορούμε να έχουμε με μια συνάρτηση εξυπηρέτηση γεγονότος μια εξυπηρέτηση για πολλές φόρμες και πολλά στοιχεία στη κάθε φόρμα. (Στη Visual Basic 6 δεν έχουμε πίνακες φορμών, μόνο πίνακες στοιχείων, αλλά εδώ γίνεται αφού υπάρχει προσθήκη λογικής για να διαχειρίζεται αυτό το ζήτημα).

Τα μηνύματα από τη φόρμα GuiM2000 μπορούν να είναι απλά μιας εκπομπής, ή αν χρησιμοποιούμε ειδικό στοιχείο γεγονός να είναι πολλαπλής εκπομπής (multicast), και τα δύο όμως δεν επιστρέφουν τιμές στο αντικείμενο, που έστειλε τα μηνύματα.  Υπάρχουν όμως μηνύματα για το GuiM2000 που δεν εκτελούνται με τον "απλό" τρόπο αλλά με άλλο ξεχωριστό κανάλι, κλήσεων (CallBackNow) ο οποίος περνάει by reference (μέθοδος copy in - copy out) τις τιμές.

Μια διαφορά με άλλα συστήματα για γεγονότα είναι ότι δεν χρειάζεται να γνωρίζει ο διερμηνευτής ποια γεγονότα θα εξυπηρετήσουμε. Για όλα τα γεγονότα υπάρχει εκπομπή, και αν δεν υπάρχει ανταπόκριση τότε το μήνυμα χάνεται (διαγράφεται). Με την χρήση του απλού τρόπου μπορούμε να μαζεύουμε τα μηνύματα για να τα ικανοποιήσουμε πιο μετά!  Ο άμεσος τρόπος (CallBackNow) δεν μπορεί να "μαζευτεί" αλλά αν έχουμε ανταπόκριση (συνάρτηση με το όνομα της φόρμας και το όνομα_μηνύματος) τότε θα έχουμε επιστροφή κατάστασης διαφορετικής από την "τωρινή" (δηλαδή αυτή που περιγράφουν οι τιμές που συνοδεύουν το μήνυμα).

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


Μπορούν να εμφανίζονται αρκετές φόρμες και μπορούν να τρέχουν και νήματα στο περιθώριο. Υπάρχει παράδειγμα με τριάντα παράθυρα και αυτόματη χάραξη γραμμών σε κάθε παράθυρο από νήματα, η οποία συνεχίζεται καθώς μετακινούμε ή φέρνουμε στο προσκήνιο κάποιο παράθυρο.




Στην έκδοση 11, υπάρχει επιπλέον το IMAGE στοιχείο ελέγχου που δεν είναι glist τύπος, αλλά VB.Picturebox. Και αυτό το στοιχείο έχει ένα αντικείμενο που παίρνει τα γεγονότα και τα στέλνει στο πρόγραμμά μας. Το αντικείμενο (widget) αυτό το ορίζουμε με την Όρισε ως IMAGE ή Εικόνα. Επίσης και αυτό γράφεται στο GuiContols της φόρμας τύπου GuiM2000. Το στοιχείο αυτό παρέχει μόνο Layer ή Επίπεδο για να το χρησιμοποίησουμε για εξαγωγή γραφικών (εικόνες και σχέδια), αλλά και κειμένου, καθώς επίσης για να χρησιμοποιηθεί ως κονσόλα εισαγωγής. Οι παλιότερες εκδόσεις της γλώσσας δεν είχαν αυτή τη δυνατότητα. Η εισαγωγή γίνοταν με τα  EDITBOX (Κείμενο), TEXTBOX (Εισαγωγή), LISTBOX.(Λίστα), καθώς και με χρήση γεγονότων στη φόρμα. Στην Εικόνα, εμφανίζεται όταν θέλουμε ο δρομέας σε θέση χαρακτήρα, και έτσι δίνουμε την αίσθηση της εισαγωγής. Το πώς και που θα εμφανίσουμε την εισαγωγή είναι θέμα προγραμματισμού, δεν γίνεται αυτόματα. Υπάρχει παράδειγμα που κάνουμε εισαγωγή χωρίς όριο σε μια γραμμή (η Εικόνα έχει έναν αριθμό γραμμών και έναν αριθμό χαρακτήρων ανά γραμμή). Όταν η γραμμή που γράφουμε είναι μεγαλύτερη σε χαρακτήρες από το πλάτος γραμμής σε χαρακτήρες κανονικά αλλάζει γραμμή (ή γίνεται ολίσθηση αν είμαστε στην τελευταία), αλλά κατά την εισαγωγή δεν το θέλουμε αυτό (στο παράδειγμα) οπότε κάνουμε ολίσθηση οριζόντια μόνο στη γραμμή, με το τρόπο που δείχνει το παράδειγμα (όχι έτοιμο στο στοιχείο, αλλά με κατάλληλο προγραμματισμό στη γλώσσα Μ2000).

Το στοιχείο Εικόνα μπορεί να χρησιμοποιηθεί χωρίς να παίρνει εστίαση (να μην μεταφέρεται η εστίαση σε αυτό όταν πατάμε τα Tab ή Shift Tab). Ο λόγος που δεν θέλουμε την εστίαση είναι επειδή μας ενδιαφέρει να δείχνουμε εικόνα ως ένα τύπο ετικέτας.

Επίσης και αυτό είναι αρκετά ενδιαφέρον, η Εικόνα μπορεί να χρησιμοποιηθεί για να περιέχει άλλα στοιχεία. Πριν την έκδοση 11 (εκτός από τις τελευταίες αναθεωρήσεις της 10), δεν υπήρχε δυνατότητα να έχουμε ομάδες στοιχείων ελέγχου, εκτός από την ειδική σύνδεση στοιχείων COMBOBOX ή Λίστα.Εισαγωγής για μενού (για να δουλεύουν τα βελάκια που επιλέγουμε επόμενο προηγούμενο μενού). Όταν ορίζουμε ένα στοιχείο λέμε σε ποια φόρμα θα είναι και μπορούμε να προσθέσουμε το Εικόνα και το όνομα της εικόνας πάνω στο οποίο θα είναι. Με το τρόπο αυτό φτιάχνουμε καρτέλες με στοιχεία που όλα μαζί μπορούν να κρυφτούν με μια εντολή visible. Όταν δεν θέλουμε να εμφανιστεί μια καρτέλα (εικόνα) στο άνοιγμα της φόρμας τότε δεν αρκεί το Visible για να δώσουμε false, αλλά πρέπει να έχουμε το Locked  false (έτσι δουλεύουν και τα άλλα στοιχεία). Το Enable στην Εικόνα το κάνει να δέχεται εστίαση ή όχι. Τα στοιχεία που βάζουμε πάνω (εκτός από το Checkbox ή Επιλογή που δεν έχει διαφάνεια) μπορούν να έχουν διαφάνεια η οποία δείχνει την εικόνα και όχι τη φόρμα. Τα στοιχεία θα έχουν το 0,0 στην πάνω αριστερή γωνία της εικόνας.

Τέλος η Εικόνα μπορεί να διαθέτει όπως και η φόρμα στόχους, δηλαδή πλαίσια τα οποία δεν αποτελούν πραγματικά στοιχεία ελέγχου αλλά προγραμματιστικά, και έτσι έχουν λιγότερους πόρους, και επίσης δεν παίρνουν εστίαση - δηλαδή μπορούν μόνο να μεταφέρουν μήνυμα ότι έγινε κλικ από το ποντίκι. Οι στόχοι στην Κονσόλα, στο Περιθώριο και στα 32 επίπεδα πάνω στη κονσόλα λειτουργούν μόνο με την Σάρωσε όταν θέλουμε, ενώ στις φόρμες και στις εικόνες πάνω στις φόρμες λειτουργούν συνέχεια (μπορούμε να βγάζουμε εκτός όποιο θέλουμε). Επίσης μπορούμε οποιαδήποτε στιγμή να καθαρίσουμε τους στόχους και να φτιάξουμε νέους. Προς το παρόν η 11 και οι προηγούμενες εκδόσεις δεν αφαιρούν στοιχεία (η αφαίρεση γίνεται όταν καταργηθεί η φόρμα, στο πέρας εκτέλεσης του τμήματος που τη δημιουργήσαμε). Οι στόχοι σχηματίζονται με συντεταγμένες για χαρακτήρες.  Μπορούμε σε μια εικόνα να επιλέξουμε μέγεθος χαρακτήρων. Επίσης οι στόχοι εκτός από γράμματα μπορούν να εμφανίζουν εικόνα ή εικόνα και γράμματα. Επίσης οι στόχοι μπορούν να εμφανίζουν ιστόγραμμα οριζόντιο ή κάθετο (με αλλαγή μιας τιμής έχουμε άμεση εμφάνιση στο στόχο του ιστογράμματος).

Η Μ2000 υποστηρίζει πίνακες φορμών και πίνακες στοιχείων. Αυτό σημαίνει ότι τα γεγονότα όταν καλούν τις συναρτήσεις εξυπηρέτησης δίνουν επιπλέον το νούμερο (δείκτη) στοιχείου όταν το στοιχείο ανήκει σε πίνακα στοιχείων. Οι πίνακες μπορούν να αυξηθούν σε μήκος, δηλαδή μπορούμε να προσθέσουμε στοιχεία. Υπάρχει ένα όριο 254 ονομάτων στοιχείων στη φόρμα (στη Μ2000 όλα τα στοιχεία εσωτερικά είναι με όνομα, δηλαδή δεν είναι πραγματικά στοιχεία πίνακα). Το όριο μπαίνει από την VB6 (που έχει γραφτεί η Μ2000). Δεν υπάρχει λόγος να έχουμε τόσα στοιχεία πάνω σε μια φόρμα. Με χρήση των στόχων έχουμε όσα στοιχεία, είτε για ένα "κλικ" είτε για ένα κείμενο που αλλάζει είτε για ένα ιστόγραμμα! 




17.1.  Φόρμες Χρήστη

Οι φόρμες χρήστη, είναι παράθυρα που δημιουργεί ο χρήστης, και έχουν τα παρακάτω βασικά χαρακτηριστικά:

  • Τίτλο  (Ιδιότητα "Title"). Το πλαίσιο του τίτλου μετακινεί το παράθυρο αν με το ποντίκι κρατήσουμε πατημένο το αριστερό πλήκτρο. Η πάνω αριστερή γωνία δεν μπορεί να βγει εκτός επιφάνειας εργασίας. Στο πλαίσιο αυτό υπάρχει αριστερά το πλαίσιο για το κλείσιμο (απόκρυψη) του παραθύρου. Όταν επιλέγουμε ένα παράθυρο τότε εμφανίζεται ο τίτλος ως τίτλος της εφαρμογής. Αν ο τίτλος δεν χωράει στο πλάτος του πλαισίου του, τότε αναδιπλώνει όσες γραμμές χρειάζεται αλλά δεν μεγαλώνει το πλαίσιο. Μπορούμε να αλλάξουμε μέγεθος γραμμάτων στο τίτλο, και να μεγαλώσουμε το πλαίσιό του (θα δούμε παράδειγμα σε αυτό). Υπάρχει τρόπος να επιλέξουμε το αντικείμενο του πλαισίου του τίτλου και να το "εξαφανίσουμε".
  • Επίπεδο. Είναι η επιφάνεια κάτω από το πλαίσιο, η οποία μπορεί να χρησιμοποιηθεί ως οθόνη και έχει δυνατότητα για χωριστή οθόνη (το κάτω μέρος να κάνει ολίσθηση, scroll), χωρίς να κρατάει στοιχεία που χάνονται στην ολίσθηση. Όλες οι εντολές γραφικών λειτουργούν (εκτός από τα hardware sprites, γιατί αυτά υπάρχουν μόνο για την κονσόλα, το επίπεδο πίσω από τα παράθυρα, το οποίο μπορούμε να το έχουμε φανερό ή όχι). Επίσης δεν επιτρέπονται οι εντολές για εισαγωγή. Για εισαγωγή τιμών χρησιμοποιούμε μόνο στοιχεία φορμών όπως θα δούμε παρακάτω. Με την εντολή Παράθυρο μπορούμε να δώσουμε το μέγεθος των γραμμάτων και το μέγεθος της φόρμας σε twips, μέσα από την εντολή επίπεδο. Και η εντολή φόρμα μπορεί να δώσει συγκεκριμένο αριθμό χαρακτήρων και γραμμών στη φόρμα χρήστη.
  • Μέγεθος Επιπέδου. Αν έχουμε επιλέξει την ιδιότητα "Resizable" να είναι αληθείς τότε είναι ενεργό ένα μικρό στοιχείο στην κάτω δεξιά γωνία, με το οποίο μπορούμε να αλλάξουμε μέγεθος στη φόρμα και να στείλουμε το γεγονός "Resize" ώστε να ετοιμάσουμε κατάλληλα το επίπεδο.
  • Διαφάνεια. Υπάρχει η μέθοδος"Opacity" η οποία αλλάζει την διαπερατότητα, αλλά επίσης δηλώνει και το χρώμα που θα είναι πάντα 100% διαπερατό.
  • Μέθοδος Εμφάνισης κατά τύπο Modal. Μπορούμε να επιλέξουμε την εμφάνιση της φόρμας με ταυτόχρονο πάγωμα των άλλων φορμών (μπορούν να ανανεώνουν στοιχεία, αλλά δεν μπορούμε να τα μετακινήσουμε ή να τα επιλέξουμε). Η μέθοδος εμφάνισης λέγεται "Show" και μια μη μηδενική τιμή δηλώνει ότι θα είναι Modal.
  • Μέθοδος μετακίνησης και μεγέθους. Μπορούμε με την μέθοδο "move" να μετακινήσουμε προγραμματιστικά την φόρμα μας και να δώσουμε (προαιρετικά) το μέγεθός της. (υπάρχει εξ ορισμού ένα μέγεθος, σε twips 8000 X 5000.
  • Μέθοδος για άμεσο κλείσιμο: "CloseNow".
  • Μέθοδος για ανανέωση όλων των στοιχείων: "RefreshALL"
  • Μέθοδος εμφάνισης: "Show". Καθορίζει το πώς θα εμφανιστεί μια φόρμα. (δες παραπάνω την αναφορά στο τύπο εμφάνισης Modal).
  • Μέθοδος για εμφάνιση όλων των στοιχείων: "ShowmeALL" (αν το οποιοδήποτε στοιχείο έχει την ιδιότητα enable αληθές τότε δίνει το σύστημα μια εντολή σχεδιασμού, αυτή η εντολή είναι μέρος της "Show"
  • Ιδιότητα που δείχνει αν είναι ορατή ή όχι η φόρμα: "Visible"
  • Ιδιότητα για το ύψος του τίτλου: "TitleHeight"
  • Μέθοδος για τη ρύθμιση γραμματοσειράς τίτλου: "FontAttr", δέχεται τρεις παραμέτρους, μια για τη γραμματοσειρά και προαιρετικά το μέγεθος και αν είναι φαρδιά ή όχι (εξ ορισμού είναι στην επιλογή Φαρδιά).
  • Μέθοδος για τη ρύθμιση γραμματοσειράς στοιχείων: "CtrlFontAttr" (ομοίως όπως το προηγούμενο)
  • Ιδιότητες για την γραμματοσειρά στα στοιχεία (μόνο ανάγνωση, για να δούμε τι έχουμε στα στοιχεία): "CtrlFontName", "CtrlFontsize", CtrlFontBold"
  • Άνοιγμα πρόσκαιρης φόρμας πάνω στη φόρμα με την μέθοδο "PopUp". Αν κάνουμε κλικ σε άλλη φόρμα ή στην αρχική τότε η φόρμα τύπου popup αυτόματα κλείνει. Παίρνει τρεις παραμέτρους, τη φόρμα που θα χρησιμοποιήσουμε ως Popup και δυο μεταβλητές για την θέση Χ και Υ του δείκτη την στιγμή που κάνουμε κλικ πάνω στη φόρμα (παράγεται γεγονός που μας δίνει αυτά τα στοιχεία καθώς και πιο πλήκτρο του δείκτη - ποντίκι- έχουμε πατήσει, αν έχουμε πατήσει).
  • Ιδιότητα για εμφάνιση του τίτλου και του πλαισίου για μετακίνηση: "Header", δέχεται αληθές ή ψευδές (true/false), και είναι και για ανάγνωση και για εγγραφή
Παράδειγμα με φόρμα που όταν κάνουμε κλικ εξαφανίζεται και εμφανίζεται διαδοχικά. Στο παράδειγμα μπορούμε να αφαιρέσουμε από τη πρώτη γραμμή το Γεγονός Ένα (ώστε να χρησιμοποιηθεί ένα αυτόματα αποδιδόμενο), καθώς και παρακάτω η συνάρτηση Μία και η εντολή Γεγονός που συνδέει αυτή τη συνάρτηση. Όταν βάζουμε ένα δικό μας αντικείμενο γεγονός τότε μπορούμε να παίρνουμε "ανάδραση" ή να επεκτείνουμε τον έλεγχο, αφού τα μηνύματα από τη φόρμα θα περάσουν από αυτή τη συνάρτηση. Εδώ να υπενθυμίσω ότι τα μηνύματα που δέχονται απάντηση/επιστροφή, (έχουν πέρασμα τιμών με αναφορά) δεν μπαίνουν από αυτό το γεγονός αλλά πάντα εκτελούνται με άμεσο τρόπο (δεν είναι φανερός στο χρήστη).

Στη φόρμα, στο παράδειγμα, δεν βάλαμε κάποιο στοιχείο ελέγχου. Όμως βλέπουμε τον τίτλο και το τετραγωνάκι αριστερά που κλείνει τη φόρμα (αυτό παράγει το μήνυμα Unload, και είναι άμεσο, δέχεται δηλαδή επιστροφή σε μια μεταβλητή οκ. Αν δεν είχαμε καμία χρήση του οκ στο τμήμα, τότε δεν θα υπήρχε θέμα με μια απλή Διάβασε. Αν όμως υπάρχει η οκ, τότε θα έχουμε θέμα επειδή δεν μπορούμε να αποδώσουμε νέα αναφορά σε μεταβλητή που ήδη δείχνει κάπου. Η χρήση της Διάβασε Νέο κάνει κάτι άλλο, δημιουργεί μια μεταβλητή οκ ακόμα και αν υπάρχει ήδη, και δίνει την αναφορά, και μόλις τερματίσει η συνάρτηση Απλό.unload διαγράφεται η τελευταία οκ, αυτή που δημιουργήθηκε. Να θυμίσω εδώ ότι ενώ στις κανονικές κλήσεις συναρτήσεων οι μεταβλητές σχετίζονται με τα ονόματα συναρτήσεων, σε αυτές που καλούνται από γεγονότα (αυτό το κάνει η συνάρτηση οκν$()) οι κλήσεις είναι σαν να έγιναν στο τμήμα, και για το λόγο αυτό μπορεί να προκύψει πρόβλημα, αν δεν χρησιμοποιήσουμε σωστά τις Διάβασε και τα ονόματα των μεταβλητών. 

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

Στο πρόγραμμα θέλω να φανεί το πώς συνδέουμε μια μεταβλητή με ένα αντικείμενο-ιδιότητα. Δηλαδή με την εντολή Με Απλό, "visible" ως ορατό δημιουργούμε ένα αντικείμενο propreference (έτσι ονομάζεται μέσα στο κώδικα της Μ2000 και έτσι εμφανίζεται ως τύπος) το οποίο συνδέει την ιδιότητα  ενός συγκεκριμένου αντικείμενου με ένα όνομα. Το αντικείμενο αυτό δεν δεσμεύει τη φόρμα λόγω της αναφοράς σε αυτήν, και για το λόγο αυτό μεσολαβεί για την χρήση της φόρμας. Η μεταβλητή ορατό δεν είναι μια απλή μεταβλητή, και δεν μπορούμε να την χειριστούμε ως απλή μεταβλητή, αλλά έχει την ιδιότητα της εγγραφής και της ανάγνωσης (αν πράγματι το παρέχει το αντικείμενο), και η γραφή γίνεται με το ίσον (ως αντικατάσταση τιμής) και η ανάγνωση απλά με το όνομα στο δεξί μέρος.

Όρισε Απλό Φόρμα Γεγονός Ένα
Επίπεδο Απλό {
      Διάστιχο 0 \\ 30, 60, ...
      Γραμματοσειρά "Arial Black"
      Παράθυρο 16, 8000,6000 \\ μέγεθος γραμμάτων, Χ, Υ σε twips
      \\ τα πραγματικά Χ και Υ θα είναι εδώ Χ.Σημεία και Υ.Σημεία
      \\ Η εντολή Παράθυρο κόβει ανάλογα για να κρατήσει το πλάτος όσο ακριβώς το κείμενο
      Οθόνη 1,0 \\ χρώμα όπως #AAFF22 ή Χρώμα(r,g,b), αριθμός χωρίσματος οθόνης
      Δρομέας 0, Ύψος Δια 2 \\ Ύψος Πλάτος είναι σε χαρακτήρες
      Αναφορά 2,"Hello World"
}
Μέθοδος Απλό, "Show"
Με Απλό , "visible" ως ορατό
\\ τα γεγονότα και οι μέθοδοι είναι σε μία γλώσσα, αγγλική
Συνάρτηση Απλό.Unload {
             Διάβασε Νέο &οκ
             οκ=Αληθές
}
Στη Κ=Ψευδές
Συνάρτηση Απλό.Click {
      Με Απλό, "Title", "Πάτα άλλη μια"
      Τύπωσε ορατό
      Αν Κ Τότε Πληκτρολόγιο "Α"
      Κ~
}
Συνάρτηση Μία {
      Διάβασε μνμ$
      Σημ 1 : Τύπωσε μνμ$
      Δες {Κάλεσε τοπικά μνμ$}
}
Γεγονός Ένα Νέο οκν$(&Μία())
Τύπωσε ορατό
α$=Κομ$ \\ περιμένει να πατήσουμε κάτι
Γεγονός Ένα Κράτησε \\ τώρα δεν ακούει
ορατό=Ψευδές
Τύπωσε ορατό
Για ι=1 εώς 10 {
      \\ δεν υποστηρίζει αυτό ορατό~
      \\ πρέπει να το δώσουμε κανονικά με ορατό = όχι ορατό
      \\ η ορατό είναι ειδικό αντικείμενο, που συνδέει ένα όνομα με μια ιδιότητα
      ορατό= όχι ορατό
      ανανέωση
      Αναμονή 500
}
Τύπωσε Τύπος$(ορατό)
Όρισε Απλό Τίποτα


Στο παρακάτω παράδειγμα δημιουργούμε μια απλή φόρμα με δυνατότητα να αλλάξουμε τις διαστάσεις της με το ποντίκι, από τη κάτω δεξιά γωνία:

Όρισε Απλό Φόρμα
Επίπεδο Απλό {
      Διάστιχο 0
      Γραμματοσειρά "Arial Black"
      Παράθυρο 16, 8000,6000
      Οθόνη 1,0
      Δρομέας 0, Ύψος Δια 2
      Αναφορά 2,"Γειά σου Κόσμε"
}
Με Απλό,"Sizable", Αληθές
Συνάρτηση Απλό.Resize {
      Επίπεδο Απλό {
            Τύπος 16
           
Οθόνη 1,0
            Οθόνη 1,0
            Δρομέας 0, Ύψος Δια 2
            Αναφορά 2,"Γειά σου Κόσμε"
      }
}
Μέθοδος Απλό, "Show",1
Όρισε Απλό Τίποτα


Δείτε επίσης ότι έχουμε ανοίξει τη φόρμα με τύπο modal (αυτό κάνει το 1 που δίνουμε στη "Show")

Αφού ολοκληρωθούν τα τεύχη για τα στοιχεία ελέγχου, θα υπάρξει ένα ακόμα που θα έχει όλα τα Γεγονότα, τις ιδιότητες και τις μεθόδους της φόρμας χρήστη (γιατί στην συνέχεια καθώς ετοιμάζω τα τεύχη έρχονται ιδέες και μπορεί να προσθέσω και άλλα). Άλλη λύση να μάθει κανείς τα επιπλέον γεγονότα είναι να διαβάσει το κώδικα της Μ2000. Επίσης το info αρχείο έχει πολλά παραδείγματα με χρήση γραφικού περιβάλλοντος.

Δυο προγράμματα, το καθένα τρέχει σε δικό του διερμηνευτή (μπορούμε να καλέσουμε προγράμματα με το ποντίκι, αν δηλώσουμε στο σύστημα να ανοίγουμε με το M2000.exe). Το ένα είναι ένα ρολόι με διαφάνεια (η κονσόλα έγινε στρογγυλή, και έχει και διαφάνεια!). Το άλλο είναι ένα σημειωματάριο, με τα χρώματα της Μ2000 για τα παράθυρα (το πορτοκαλί πλαίσιο). Φαίνονται και τα μενού επιλογής. Ο συγκεκριμένος επεξεργαστής κειμένου χρωματίζει διάφορες γλώσσες, εδώ είναι σε διαμόρφωση για Visual Basic και χωρίς χρώμα για απλό κείμενο. Έχει δυνατότητα να μετακινεί πολλές γραμμές μαζί αριστερά ή δεξιά (για να αφήνουμε περιθώριο), και βάζει αυτόματα εσοχή όταν έχουμε ήδη βάλει στη τρέχουσα γραμμή κατά την αλλαγή γραμμής. Επίσης έχει δυνατότητες εύρεσης και αλλαγής λέξεων, καταμέτρησης λέξεων και έχει και τρεις σελιδοδείκτες που λειτουργούν ανεξάρτητα από το αν εισάγουμε ή διαγράφουμε παραγράφους. Ο επεξεργαστής κειμένου είναι γραμμένος και αυτός από το συγγραφέα της Μ2000, από το στοιχείο χρήστη, το αντικείμενο Document (Έγγραφο), και το αντικείμενο GuiTextBox. (υπάρχει και δεύτερο αντικείμενο TextBox για τον διορθωτή τμημάτων, που λειτουργεί στην κονσόλα, και μια κύρια διαφορά είναι ότι αυτός έχει χρωματισμό μόνο για τη Μ2000 ενώ αυτός για τις φόρμες έχει δυνατότητες να ρυθμίζεται, και έχει ειδικές ρύθμισεις για να χρωματίζει κωδικα Μ2000, καθώς και html).

Στο αρχείο εγκατάστασης υπάρχει το info.gsb το οποίο έχει και το ρολόι και τέσσερις επεξεργαστές κώδικα, όπως για C# (cs), Μ2000 (m2000editor), HTML (htmlEditor), για το μάθημα της ΑΕΠΠ η ΓΛΩΣΣΑ (ΓΛΩΣΣΑ). σε παρενθέσεις τα ονόματα των τμημάτων στο info. (με F8 ξεκινάει ο m2000editor).






Όταν πρώτη φορά εγκαταστήσουμε τη γλώσσα, πάμε στη κονσόλα της (ξεκινάμε το m2000.exe) και γράφουμε στα αγγλικά (υπάρχουν και στα ελληνικά τα αντίστοιχα)
Dir Appdir$
Load Info
τώρα έχει ξεκινήσει το Info και έχει επιστρέψει ο τρέχον κατάλογος στο κατάλογο χρήστη.
Με F1 σώνουμε στο κατάλογο χρήστη
Αφού έχουμε σώσει στο κατάλογο χρήστη μπορούμε να δώσουμε το CLOCK το οποίο θα ξεκινήσει ένα δεύτερο διερμηνευτή της Μ2000, θα φορτώσει το Info χωρίς να εκτελεστούν οι εντολές εκτός από τους ορισμούς τμημάτων  και θα καλέσει το ρολόι. Έτσι το ρολόι βγαίνει σε δική του εκτέλεση. Για να κλείσει το ρολόι αφού το επιλέξουμε πατάμε διάστημα, ή με ctrl+F1 βλέπουμε τη βοήθεια). Μπορούμε να το μετακινήσουμε από το κέντρο του με το ποντίκι. Έχει ξυπνητήρι 12 ωρών το πολύ.

Τεχνικά θέματα:
Ενώ η Vb6 δεν χρησιμοποιούσε το ροδελάκι στο ποντίκι, εδώ στις φόρμες γίνεται χρήση, με ένα σύστημα που επινόησε ο συγγραφέας, αυτό της διαδοχής κυριότητας. Δηλαδή κάθε φορά που αλλάζουμε στοιχείο, ένα μοναδικό sub classing αλλάζει αντικείμενο, και ακολουθεί το τρέχον. Αυτό ήταν δυνατόν να γίνει επειδή όλα τα αντικείμενα είναι ίδια (είναι το glist) και αφού έχει φτιαχτεί από το συγγραφέα της γλώσσας έχει τα απαραίτητα γεγονότα για να υποστηρίξει αυτή τη λειτουργία. Επίσης το glist δεν έχει flickering, τρεμόπαιγμα, και αυτό φαίνεται ακόμα και με χιλιάδες γραμμές στον διορθωτή, τόσο στη κονσόλα όσο και στις φόρμες.

Στα buttons ή όπου έχουμε επιλογή πλαισίου σε στοιχείο ελέγχου κάτω από επικεφαλίδα (checkbox, listbox, combo με popup listbox) μπορούμε ή να δώσουμε κλικ (στο δεύτερο ακούει, το πρώτο είναι η επιλογή), ή να το τραβήξουμε δεξιά, με πατημένο το πλήκτρο επιλογής και να το αφήσουμε εντός του πλαισίου. 

Δεν υπάρχει χωριστό timer control. Οποιοδήποτε button μπορεί να γίνει και timer control.

Επειδή προ της εμφάνισης του GUI συστήματος η Μ2000 έφτιαχνε buttons ως TARGETS (στόχοι) στην κοσνόλα, φτιάχτηκε ένας τρόπος να βγαίνουν στόχοι και στην επιφάνεια της φόρμας. Η διαφορά των στόχων αυτόν είναι ότι ενεργοποιούν events - γεγονότα, και ότι δεν στηρίζονται σε πραγματικό User Control. Για το λόγο αυτό λειτουργούν με απλό κλικ (απευθείας). Η χρησιμότητά τους είναι διπλή αφενός ως πλήκτρα (ελαφριά έκδοση), αφετέρου ως ενδεικτικά δηλαδή να μην δουλεύουμε με τα γεγονότα (να μην ακούν δηλαδή), αλλά να αλλάζουμε το χρωματισμό τους σαν να είναι φωτεινές ενδείξεις (επειδή η Μ2000 έχει εντολή να αλλάζει τον χρωματισμό τους, γνωρίζοντας τα στοιχεία κατασκευής τους, με μια εντολή κάνουμε την αλλαγή).

Το παράδειγμα υπάρχει στο info ως FORMTARGET  (παράδειγμα με TARGET στην κοσνόλα υπάρχει ως WIND4)

Declare form1 Form
m=false
Module zz {
    \\ target call zz to own object
    \\ so we have to use Layer {} to send to console
    Layer {
        print "ok", timecount
        refresh
        }
    change A, text "ok"
}
Function form1.MouseDown {
    Stack
    refresh
}
Function form1.Target {
    \\ normal events executed to console
    \\ so we have to use Layer to redirect to Form1 layer
    Print "target:", number, A
    Refresh
    Layer Form1 {
        Target A, m
        if m then
            change A, back 2
        else
            change A, back 0
        end if
    }
    m~
}
Layer form1 {
    window 12, 12000, 8000
    form 32, 20
    motion.w; ' center window
    cls #333333, 0
    cursor 4, 4
    \\ we use immediate execution, in this module
    \\ so we call zz as this module (call local pass current scope to zz)
    target A, "call local zz", 10, 3, 2,15, 105, "press me"
    cursor 4, 8
    \\ 115 means 5 center, 10 use target event, 100 proportional font rendering
    target B,"z", 10, 3, 5,15, 115, "press me too"
}
Method form1,"show",1
Declare form1 nothing

Δευτέρα 8 Αυγούστου 2016

Γεια χαρά από Καναλλάκι Πρέβεζας

Συνεχίζω τις διακοπές για έναν ακόμα μήνα, και από Σεπτέμβριο ξεκινώ πάλι εργασία. Προς το παρόν γράφω το κεφάλαιο 17 για τις φόρμες (GUI) της Μ2000. Είναι πολύ κουραστικό θέμα και για το λόγο αυτό δεν δείχνω και πολύ ζήλο!
Οπότε καλό χειμώνα για όσους τέλειωσαν ή τελειώνουν με την άδεια και τα λέμε σύντομα!

Παρασκευή 1 Ιουλίου 2016

Το μικρό εγχειρίδιο της Μ2000 (pdf) νέο 24-5-2023

Το μικρό εγχειρίδιο της Μ2000
78 σελίδες με θέματα και προγράμματα σε Μ2000.

Έκδοση 24 Μαΐου 2023, 475 σελίδες, έκδοση γλώσσας 12, αναθεώρηση 31:

https://drive.google.com/open?id=0BwSrrDW66vvvS2lzQzhvZWJ0RVE

https://github.com/M2000Interpreter/Environment/releases

Δεν αντικαθιστά το εγχειρίδιο χρήσης που υπάρχει στο Blog και το οποίο θα εμπλουτίζεται. Είναι μια προσέγγιση με πίνακες όπου περιγράφεται η γλώσσα. Αυτά που περιγράφονται μπορούν να αναζητηθούν σε προγράμματα είτε που υπάρχουν στο κείμενο, είτε σε άλλα που βρίσκονται ήδη στο blog αυτό.

Υπάρχουν βιβλία για τη Μ2000 εδώ: https://www.ebooks4greeks.gr/tag/γιωργοσ-καρρασ

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

Το αρχείο είναι υβριδικό pdf μαζίε με πληροφορίες αρχείο κειμένου σε LibreOffice Writer, οπότε το ανοίγουμε εκεί από όπου μπορούν να εξαχθούν με αντιγραφή τα προγράμματα σωσά.

Περιεχόμενα:

Μικρό Εγχειρίδιο της Μ2000.................................................................................................1
Πρόλογος.............................................................................................................................1
1. Σύντομη περιγραφή του Περιβάλλοντος της Μ2000.......................................................5
Χαρακτηριστικά προγράμματος Διερμηνευτή......................................................................5
Λειτουργικά Συστήματα...................................................................................................5
Linux (Xfce περιβάλλον παραθύρων)........................................................................5
Υποστήριξη Ελληνικής Γλώσσας στον Υπολογιστή........................................................6
Όρια Αναδρομής.............................................................................................................7
Χρήστες...........................................................................................................................8
Εμφάνιση σε πλήρη Οθόνη.................................................................................................9
Σύστημα με Πολλές Οθόνες.................................................................................................9
Ενσωματωμένη Βοήθεια....................................................................................................10
Διαμόρφωση της Κονσόλας...............................................................................................11
Ρύθμιση του Περιβάλλοντος για άτομα με μειωμένη όραση.........................................11
Γραμμή Εντολών...............................................................................................................12
Χρήση Διορθωτή Κειμένου για τις εντολές στη Γραμμή Εντολών.................................13
Η εντολή Συγγραφή η Σ................................................................................................13
Χρήση του περιβάλλοντος ως αριθμομηχανή...............................................................14
Ενσωματωμένος Διορθωτής..............................................................................................15
Έξοδος από την εφαρμογή του διερμηνευτή.....................................................................15
Χρήση των Πλήκτρων Esc και Break............................................................................16
2. Πρόγραμμα Γεια σου Κόσμε!..........................................................................................21
Απλά Παραδείγματα στη Μ2000........................................................................................21
Προχωρημένο παράδειγμα Γεια σου Κόσμε......................................................................25
Ενδεικτικές εικόνες.............................................................................................................27
3. Κονσόλα Διερμηνευτή.....................................................................................................29
Γραμμή Εντολών...............................................................................................................29
Αντικείμενα στην κονσόλα.................................................................................................33
Ειδικά αντικείμενα στην κεντρική φόρμα............................................................................35
Φόρμες Διαλόγου...............................................................................................................36
Φόρμα Έλεγχος........................................................................................................36
Κυρίαρχα Παράθυρα (Modal)........................................................................................37
Επιλογές Μορφής Φορμών (Παραθύρων)....................................................................37
Χρήση Επιπέδου Φόρμας.............................................................................................37
Κρυφή Μπάρα ολίσθησης.............................................................................................37
Αναδυόμενο Μενού Επιλογών......................................................................................38
Εμφάνιση Αυτόματης Βοήθειας.....................................................................................38
Παραδείγματα με Χρήση Αντικειμένων Περιβάλλοντος.....................................................39
Λίστα Επιλογών............................................................................................................39
Διορθωτής Κειμένου......................................................................................................39
Φόρμα Χρήστη..............................................................................................................39
Παράδειγμα Αμερικάνικο Σταυρόλεξο................................................................................40
4. Εισαγωγή στη Γλώσσα Μ2000.......................................................................................45
Αντικείμενο Εκτέλεσης.......................................................................................................45
Συντακτικό Γλώσσας..........................................................................................................48
Εμπλουτισμός Λεξικού.......................................................................................................50
Περί Αναγνωριστικών........................................................................................................51
Σταθερές Τιμές..............................................................................................................52
Αριθμός.........................................................................................................................52
Ακέραιος........................................................................................................................53
Αλφαριθμητικό...............................................................................................................53
Παράδειγμα με Αναγνωριστικά..........................................................................................54
Ακέραια Μεταβλητή (οποιουδήποτε αριθμητικού τύπου)..................................................54
Δεκαεξαδική μορφή εμφάνισης.....................................................................................56
Αριθμητική αναπαράσταση χρωμάτων.........................................................................57
Αναπαράσταση ημερομηνίας – χρόνου........................................................................57
Αναπαράσταση μουσικού κομματιού............................................................................58
Μεταβλητές & Σταθερές.....................................................................................................59
Αναγνωριστικά με μεταβλητές τιμές..............................................................................59
Αναγνωριστικά με σταθερές τιμές.................................................................................59
Ορισμός Αριθμητικών Μεταβλητών Με Τύπο...............................................................61
Ορισμός Απαρίθμησης..................................................................................................62
Άτυπη Μεταβλητή.........................................................................................................64
Αναγνωριστικά Ομάδων Μεταβλητών...........................................................................66
Τελικές Τιμές σε Ομάδες Μεταβλητών.....................................................................67
Χειρισμός Ομάδας με δείκτη θέσης μεταβλητής (μέλους)........................................68
Πίνακες Μεταβλητών.....................................................................................................70
Πίνακες με τύπους....................................................................................................71
Βάση Πινάκων..........................................................................................................72
Βάση Πίνακα ανά Διάσταση.....................................................................................73
Γέμισμα τιμών πίνακα με λάμδα συνάρτηση............................................................74
Πίνακας ως επιστροφή πολλών τιμών από συνάρτηση...........................................75
Αυτόματοι Πίνακες.............................................................................................................76
Παράδειγμα με αλφαριθμητικά και δείκτη σε πίνακα................................................77
Ειδικές Συναρτήσεις Αυτόματων Πινάκων................................................................78
Στατικές Μεταβλητές..........................................................................................................79
Πολλαπλή Εκχώρηση Τιμών σε Μεταβλητές.....................................................................81
Επέκταση Τύπου Μεταβλητής...........................................................................................81
Έγγραφο.......................................................................................................................83
Ψηφίο, Ακέραιος, Μακρύς, Απλός,...............................................................................83
Μακρύς Μακρύς, Λογιστικός, Αριθμός, Διπλός, Ημερομηνία.......................................83
Χρήση τύπου Μακρύς (Long) για εξωτερικές βιβλιοθήκες............................................84
Παράδειγμα: Μετατροπή σε βάση 64 (base64)........................................................84
Παράδειγμα #1 με χρήση C συναρτήσεων...............................................................85
Παράδειγμα #2 με χρήση C συναρτήσεων...............................................................86
Παράδειγμα με Έγγραφο και χρήση εξαγωγής στο Excel.............................................87
Αλφαριθμητικά ως Εικόνες................................................................................................90
Παράδειγμα με Εικόνα και χρήση εξαγωγής σε αρχείο.................................................90
Άλλοι τύποι μεταβλητών (Έτοιμα Αντικείμενα)..................................................................91
Αντικείμενο Κατάσταση (Κλειδί/Τιμή)............................................................................92
Κατάσταση Ουρά......................................................................................................94
Εύρεση Ν-οστού Όμοιου Κλειδιού σε Κατάσταση τύπου Ουράς..................................94
Αντικείμενο Σωρός........................................................................................................95
Αντικείμενο Διάρθρωση (Διάρθρωση Μνήμης και Δομές).............................................98
Αντιγραφή Διάρθρωσης σε ή από Αλφαριθμητικό..................................................100
Παράδειγμα με την χρήση Διάρθρωσης σε πίνακα................................................101
Διάρθρωση Κώδικα (Για εκτέλεση κώδικα μηχανής)..............................................103
Προχωρημένο Παράδειγμα Γλώσσας Μηχανής.....................................................104
Γεγονός.......................................................................................................................106
Αντικείμενο Ομάδα...........................................................................................................110
Τύποι Ομάδων............................................................................................................110
Συγχώνευση Ομάδας..................................................................................................111
Παράδειγμα Αποθήκη (Κληρονομικότητα Αντικειμένων)............................................112
Ιδιότητα.......................................................................................................................114
Παράδειγμα με Ιδιότητα μόνο για ανάγνωση..........................................................115
Τελεστές σε Ομάδα που επιστρέφει τιμή (Αξία)..........................................................117
Τελεστές σε Ομάδα που δεν επιστρέφει τιμή (επιστρέφει ομάδα)..............................118
Παράδειγμα με γεγονός και ομάδα..............................................................................119
Ομάδα με γεγονότα με στατική σύνδεση.....................................................................120
Κλάση..............................................................................................................................123
Τύπος Κλάσης - Κληρονομικότητα στο κώδικα...........................................................123
Κατασκευαστής Κλάσης..............................................................................................124
Κλάσεις σε Κλάσεις.....................................................................................................124
Διαγραφή Ομάδας.......................................................................................................125
Πεδία στην Κλάση.......................................................................................................127
Παράδειγμα με Κατάσταση ιδιωτική σε κλάση............................................................128
Παράδειγμα με κλάσεις Κληρονομικότητα σε Ορισμούς.............................................129
Δείκτες σε Ομάδα........................................................................................................131
Υπερκλάση......................................................................................................................132
Παράδειγμα με Υπερκλάση.........................................................................................134
Παράδειγμα με δυο Υπερκλάσεις σε μια ομάδα..........................................................135
Συνδυασμός Υπερκλάσης και Ελαφριών Γεγονότων..................................................136
Κλείσιμο...........................................................................................................................137
Αντικείμενο Λάμδα (ή Λάμδα Συνάρτηση).......................................................................138
Παράδειγμα Λατινικοί Αριθμοί (Λάμδα με Αναδρομή).................................................139
Εξωτερικά Αντικείμενα.....................................................................................................141
Microsoft.XMLHTTP....................................................................................................141
WScript.Shell...............................................................................................................141
Msxml2.DOMDocument..............................................................................................142
Παράδειγμα Αντίστροφη Μέτρηση (Χρήση Γραφικού Περιβάλλοντος).......................144
5. Στοιχεία Γραμμών Κώδικα............................................................................................145
Βοηθητικά Στοιχεία Γραμμής Κώδικα..............................................................................145
Σημειώσεις..................................................................................................................145
Αριθμοί Γραμμών - Ετικέτες........................................................................................145
Σύμβολα για διαχωρισμό εντολών..............................................................................146
Χρήση Μπλοκ Κώδικα { }.................................................................................................146
Κυκλικά........................................................................................................................147
Συνέχισε......................................................................................................................147
Ξεκίνα..........................................................................................................................147
Έξοδος........................................................................................................................147
Διέκοψε.......................................................................................................................147
Εντολές Διακλάδωσης.....................................................................................................148
Προς............................................................................................................................148
Από Προς....................................................................................................................148
Διαμέσου Επιστροφή..................................................................................................148
Από Διαμέσου.............................................................................................................148
Αν Τότε........................................................................................................................148
Αν Αλλιώς....................................................................................................................148
Αν Τότε Αλλιώς...........................................................................................................148
Αν Τότε Αλλιώς.Αν Τότε Αλλιώς..................................................................................149
Αν με μπλοκ κώδικα {}................................................................................................149
Αν Τέλος Αν σε πολλαπλές γραμμές χωρίς μπλοκ κώδικα........................................150
Επίλεξε Με ή Επέλεξε Με...........................................................................................151
Επώνυμος Κώδικας.........................................................................................................152
Απλή Ρουτίνα..............................................................................................................152
Ρουτίνα........................................................................................................................153
Απλή Συνάρτηση.........................................................................................................153
Τμήμα..........................................................................................................................153
Συνάρτηση..................................................................................................................154
Λάμδα Συνάρτηση.......................................................................................................154
Γενικός Σκοπός................................................................................................................155
Λάθη στην κατανόηση του σκοπού (ή αλλιώς της θέασης) αναγνωριστικών..................160
Σωρός Τιμών...................................................................................................................161
Χειρισμός του Σωρού..................................................................................................163
Πέρασμα τιμών σε κλήσεις..........................................................................................164
Εντολές σχετικές με το σωρό τιμών............................................................................165
Διάβασε..................................................................................................................165
Διάβασε Νέο...........................................................................................................165
Διάβασε ?...............................................................................................................165
Βάλε........................................................................................................................165
Σειρά.......................................................................................................................166
Σωρός.....................................................................................................................166
Άδειασε...................................................................................................................166
Πέτα........................................................................................................................166
Πάνω......................................................................................................................167
Φέρε.......................................................................................................................167
ΦέρεΠίσω...............................................................................................................167
Μεταβλητές σχετικές με το σωρό τιμών......................................................................167
Τιμή ή Αριθμός.......................................................................................................167
Πίνακας...................................................................................................................168
Ομάδα....................................................................................................................168
Γράμμα$.................................................................................................................168
Κενό........................................................................................................................168
ΕίνΑρ......................................................................................................................168
ΕινΓρ......................................................................................................................168
Μέγεθος.Σωρού......................................................................................................168
Σωρός.....................................................................................................................168
[]..............................................................................................................................168
Συναρτήσεις σχετικές με το σωρό τιμών.....................................................................168
ΤιμήΣωρού()...........................................................................................................168
ΤιμήΣωρού$().........................................................................................................169
ΣωρούΤύπος$()......................................................................................................169
Σωρός()..................................................................................................................169
Σωρός$()................................................................................................................169
Ταύτιση()................................................................................................................170
Φάκελος$().............................................................................................................170
Μήκος()...................................................................................................................170
Δομές σχετικές με το σωρό τιμών...............................................................................171
Σωρός Νέος { }.......................................................................................................171
Σωρός ΔείκτηςΣεΣωρό {}........................................................................................171
Διάβασμα τιμών από το σωρό βάσει τύπου μεταβλητής............................................171
Κλήση τμημάτων με ονομαστικές παραμέτρους.........................................................172
Επιστροφή με τη χρήση του σωρού τιμών..................................................................172
Σύμβολα εκχώρησης τιμών.............................................................................................173
Χρήση του <= για εκχώρηση τιμής.........................................................................177
Χρήση του := για εκχώρηση τιμής..........................................................................177
Σύμβολα αλλαγής τιμών σε μεταβλητές...........................................................................178
++...........................................................................................................................179
--.............................................................................................................................179
+=...........................................................................................................................179
-=............................................................................................................................179
*=............................................................................................................................179
/=............................................................................................................................179
|δια..........................................................................................................................179
|υπολ......................................................................................................................180
|υπόλοιπο...............................................................................................................180
|δια#........................................................................................................................180
|υπολ#....................................................................................................................180
|υπόλοιπο#.............................................................................................................180
-!.............................................................................................................................180
~.............................................................................................................................180
Σύμβολα σε αριθμητικές εκφράσεις και συγκρίσεις.........................................................180
+ και -......................................................................................................................180
- (πρόσημο)............................................................................................................180
* και /......................................................................................................................180
** και ^....................................................................................................................180
Υπόλ και Υπόλοιπο................................................................................................181
Δια#........................................................................................................................181
Υπόλ# και Υπόλοιπο#............................................................................................182
( ) και (,)..................................................................................................................182
Με...........................................................................................................................182
<<...........................................................................................................................182
==...........................................................................................................................183
=.............................................................................................................................183
<, >, <=, >=, <>.......................................................................................................184
<=>.........................................................................................................................184
!...............................................................................................................................184
#..............................................................................................................................184
* (αστερίσκος).........................................................................................................184
. (τελεία)..................................................................................................................184
.Αναγνωριστικό.......................................................................................................184
Α$.Αναγνωριστικό..................................................................................................185
Λάμδα -> 0..............................................................................................................185
Σωρός.....................................................................................................................185
Ομάδα()..................................................................................................................186
Αριθμητικές Συναρτήσεις για Αριθμούς...........................................................................186
Χρώμα()..................................................................................................................186
Ακ(), Δαπεδ(), Οροφ()............................................................................................186
Απόλ()....................................................................................................................186
Σημ().......................................................................................................................186
Δεκ().......................................................................................................................186
Στρογγ(), Τραπ().....................................................................................................187
Εφαπ()....................................................................................................................187
Τοξ.εφ()..................................................................................................................187
Συν().......................................................................................................................187
Ημ()........................................................................................................................187
Λογ().......................................................................................................................187
Λφ()........................................................................................................................187
Ρίζα()......................................................................................................................187
Αν() τριπλός τελεστής.............................................................................................188
Αν() πολλαπλός τελεστής.......................................................................................188
Αν() τελεστής Έλβις................................................................................................188
Σύμβολα σε αλφαριθμητικές εκφράσεις και συγκρίσεις...................................................188
+.............................................................................................................................188
=.............................................................................................................................188
<, >, <=, >=, <>.......................................................................................................188
<=>.........................................................................................................................188
~.............................................................................................................................189
Αλφαριθμητικά ως Αντικείμενα........................................................................................189
Ομάδα$()................................................................................................................189
Λάμδα$ ->""............................................................................................................189
Αριθμητικές Συναρτήσεις για Αλφαριθμητικά...................................................................190
Μήκος()...................................................................................................................190
Μήκος.Εμφ()...........................................................................................................190
Εγγράφου.Μήκος().................................................................................................190
Τάξη().....................................................................................................................190
Εκφρ().....................................................................................................................191
Τιμή()......................................................................................................................191
ΧαρΚωδ()...............................................................................................................191
Κωδ()......................................................................................................................191
Αλφαριθμητικές Συναρτήσεις για αλφαριθμητικά.............................................................191
Επαν$()..................................................................................................................191
Δεξι$().....................................................................................................................192
Αρισ$()....................................................................................................................193
Μεσ$()....................................................................................................................193
ΑριστερόΜέρος$()..................................................................................................193
ΔεξίΜέρος$()..........................................................................................................193
Αποκ.Αρ$().............................................................................................................194
Αποκ.Δε$().............................................................................................................194
Μέρος$().................................................................................................................195
Αν$() τριπλός τελεστής...........................................................................................195
Αν$() πολλαπλός τελεστής.....................................................................................195
Γραφή$() με αλφαριθμητικό....................................................................................195
Αλφαριθμητικές Συναρτήσεις για αριθμούς.....................................................................196
Γραφή$() με αριθμό................................................................................................196
Συγκρίσεις, Μέγιστο, Ελάχιστο και Αλλαγές μεταξύ δυο Μεταβλητών.............................197
Τύπωσε Σύγκρινε(Α, Β)..........................................................................................197
Άλλαξε Α, Β............................................................................................................197
Μικρό(), Μεγάλο()...................................................................................................197
Μέγιστο Ελάχιστο Πολλαπλών Εκφράσεων....................................................................198
Μεγάλο.Σειράς(), Μεγάλο.Σειράς$().......................................................................198
Μικρό.Σειράς(), Μικρό.Σειράς$()............................................................................198
Τελεστές για λογικές εκφράσεις.......................................................................................198
Όχι, Δεν..................................................................................................................198
Και..........................................................................................................................198
Ή.............................................................................................................................198
Από.........................................................................................................................198
Αλλαγή προτεραιότητας τελεστών..........................................................................198
Είναι........................................................................................................................198
Σύμβολα - Εκφράσεις στην υποδοχή τιμών.....................................................................199
Διάβασε ?...............................................................................................................199
Διάβασε..................................................................................................................199
&.............................................................................................................................199
Διάβασε Νέο...........................................................................................................199
Ταύτιση()................................................................................................................199
Σύμβολα - Εκφράσεις για το πέρασμα τιμών...................................................................200
τα σύμβολα ! και @................................................................................................200
&.............................................................................................................................200
Ειδικές Συναρτήσεις.........................................................................................................200
Τμήμα()...................................................................................................................200
Έγκυρο().................................................................................................................201
Οκν$().....................................................................................................................201
Ισχνή$()..................................................................................................................202
Λάμδα()..................................................................................................................202
Λάμδα$()................................................................................................................203
Πίνακας()................................................................................................................203
Πίνακας$()..............................................................................................................203
Συνάρτηση()...........................................................................................................204
Συνάρτηση$().........................................................................................................204
Ειδικά σύμβολα σε εντολές..............................................................................................204
!...................................................................................................................................204
Διάρθρωση.............................................................................................................204
Μενού επιλογών.....................................................................................................204
Κατάσταση..............................................................................................................204
Τυχαίος...................................................................................................................204
Γρήγορα..................................................................................................................205
Δείκτη. Μορφή........................................................................................................205
Δοκιμή....................................................................................................................205
Διάστιχο..................................................................................................................205
Εισαγωγή και Επιγραφή.........................................................................................205
Εισαγωγή................................................................................................................205
Εκτυπωτής.............................................................................................................205
Περί........................................................................................................................205
Δρομέας..................................................................................................................206
Θέση.......................................................................................................................206
Βάλε & Σειρά..........................................................................................................206
?..................................................................................................................................206
Κατάλογος..............................................................................................................206
Τμήματα..................................................................................................................206
Εκτυπωτής.............................................................................................................206
Διάβασε..................................................................................................................206
Επιλογή..................................................................................................................206
Αρχεία.....................................................................................................................206
Επιστροφή Δείκτη από Ομάδα (Κλειστή Ομάδα).............................................................206
Παράδειγμα διαχειρίσιμων και μη δεικτών σε ομάδες.................................................207
Είδη Δεικτών Ομάδων............................................................................................208
Οκνηρή Αποτίμηση..........................................................................................................210
Ρεύμα Τιμών (Stream).....................................................................................................211
6. Στοιχεία Κώδικα.............................................................................................................215
Χώρος Μνήμης................................................................................................................215
Μνήμη - Χώρος Μεταβλητών......................................................................................215
Μνήμη - Χώρος Τμημάτων και Συναρτήσεων.............................................................215
Μνήμη - Σωρός Τιμών.................................................................................................216
Πίνακες στοιχείων κώδικα της Μ2000.........................................................................217
Μεταφορά τιμών κατά τις κλήσεις...............................................................................220
Σκίαση/Αντικατάσταση τμημάτων και συναρτήσεων...................................................220
Παράδειγμα Λατινικοί Αριθμοί (χρήση σωρού - χωρίς αναδρομή).........................222
Προγραμματιστικά Παραδείγματα....................................................................................225
Τμηματικός προγραμματισμός....................................................................................225
Διαδικαστικός Προγραμματισμός................................................................................226
Συναρτησιακός Προγραμματισμός..............................................................................227
Αντικειμενοστραφής Προγραμματισμός......................................................................227
Καθοδηγούμενος από Γεγονότα Προγραμματισμός...................................................229
Πολυεπεξεργασία........................................................................................................229
Παραδείγματα.............................................................................................................230
Παράδειγμα με χρήση εξωτερικού αρχείου της Μ2000..........................................231
Πρόγραμμα Διαδικαστικού Προγραμματισμού Με Αντικείμενα..............................231
Χρήση της Για και της Ρουτίνας για αντικείμενα.....................................................235
Πρόγραμμα με νήματα............................................................................................236
Εμβέλεια ονομάτων.........................................................................................................238
Όνομα Χώρου.............................................................................................................239
Πέρασμα με αναφορά Συνάρτησης.............................................................................239
Γενικές μεταβλητές - τμήματα......................................................................................240
Σκίαση μεταβλητών - τμημάτων - συναρτήσεων.........................................................240
Χαρακτηριστικά ανά Είδος Αναγνωριστικού....................................................................241
Τμήμα..........................................................................................................................241
Συνάρτηση..................................................................................................................242
Ρουτίνα........................................................................................................................242
Απλή Ρουτίνα..............................................................................................................242
Νήμα...........................................................................................................................243
Συνάρτηση Λάμδα.......................................................................................................243
Γεγονός.......................................................................................................................244
Πίνακας.......................................................................................................................245
Αυτόματος Πίνακας.....................................................................................................246
Κατάσταση..................................................................................................................246
Δομή............................................................................................................................247
Διάρθρωση..................................................................................................................247
Ομάδα.........................................................................................................................248
Κλάση..........................................................................................................................248
Ορισμοί COM..............................................................................................................249
Επίπεδα Γραφικών......................................................................................................249
Στόχος.........................................................................................................................249
Λίστα Επιλογής...........................................................................................................250
Διορθωτής...................................................................................................................250
Ταινία - Μουσική.........................................................................................................250
Αναλόγιο.....................................................................................................................250
Αρχεία.........................................................................................................................251
Βάσεις Δεδομένων......................................................................................................252
Φωνές Μουσικής.........................................................................................................252
Συνθέτης Λόγου..........................................................................................................252
Περί στοιχείων παραθυρικού περιβάλλοντος..................................................................253
ΦΟΡΜΑ.......................................................................................................................253
ΠΛΗΚΤΡΟ...................................................................................................................253
ΕΙΣΑΓΩΓΗ...................................................................................................................253
ΕΠΙΛΟΓΗ....................................................................................................................253
ΚΕΙΜΕΝΟ....................................................................................................................254
ΛΙΣΤΑ..........................................................................................................................254
ΛΙΣΤΑ.ΕΙΣΑΓΩΓΗΣ.....................................................................................................254
IMAGE.........................................................................................................................254
EIKONA.......................................................................................................................254
Παραδείγματα Στοιχείων........................................................................................255
Παράδειγμα με Πλήκτρα μέσα σε Πλαίσιο (Προχωρημένο)...................................256
7. Προγραμματιστικά Παραδείγματα με Παραδείγματα..................................................257
Προστακτικός Προγραμματισμός.....................................................................................257
Τμηματικός Προγραμματισμός........................................................................................259
Διαδικαστικός Προγραμματισμός.....................................................................................262
Δομημένος Προγραμματισμός.........................................................................................269
Αν Τότε ή Αν Τότε { } ή Αν Τότε <αλλαγή γραμμής> Τέλος Αν...................................273
Αν Αλλιώς ή Αν Αλλιώς { } ή Αν Αλλιώς <αλλαγή γραμμής> Τέλος Αν.......................273
Χρήση της Αλλιώς.Αν Τότε και Αλλιώς.Αν Αλλιώς εντός της Αν.................................273
Ενώ {} ή Ενώ <αλλαγή γραμμής> Τέλος Ενώ.............................................................273
Επανέλαβε { } Μέχρι ή Επανέλαβε <αλλαγή γραμμής> Μέχρι...................................274
Επανάλαβε { } Όσο ή Επανάλαβε <αλλαγή γραμμής> Όσο.......................................274
Επανάλαβε { } Πάντα ή Επανάλαβε <αλλαγή γραμμής> Πάντα.................................274
Για {} ή Για Επόμενο....................................................................................................275
Επίλεξε Με Τέλος Επιλογής ή Επέλεξε Με Τέλος Επιλογής.......................................277
Συναρτησιακός Προγραμματισμός..................................................................................278
Συνδυαστής Υ.............................................................................................................279
Η συνάρτηση Αν() (και Αν$()).....................................................................................280
Σύνθεση Λάμδα Συναρτήσεων....................................................................................281
Αντικειμενοστραφής Προγραμματισμός...........................................................................284
Παράδειγμα Συνδεδεμένη Λίστα.................................................................................287
Παράδειγμα Κλάσματα................................................................................................295
Παράδειγμα ο Πέτρος, ο Λύκος και το Πρόβατο.........................................................302
Πρόγραμμα ο Πέτρος, ο Λύκος, το πρόβατο και το χορτάρι.......................................305
Πρόγραμμα Εργάτης..................................................................................................311
8. Ο διερμηνευτής της Μ2000 εσωτερικά.........................................................................323
Εκτέλεση Κώδικα.............................................................................................................323
Αντικείμενο Εκτέλεσης.....................................................................................................325
Σωρός Τιμών...............................................................................................................325
Στατικές Μεταβλητές...................................................................................................325
Πως λειτουργεί το πέρασμα με αναφορά....................................................................328
Πως εκτελούνται τα νήματα της Μ2000......................................................................330
Περί παραθύρων (φορμών χρήστη)............................................................................331
Μεγάλο Παράδειγμα...............................................................................................331
Σύνταξη Κώδικα της Μ2000.............................................................................................338
Ονόματα που περιέχουν κώδικα που καλείται με το όνομά τους................................338
Κώδικας που καλείται χωρίς όνομα............................................................................341
Κώδικας που καλείται έμμεσα από άλλο όνομα..........................................................341
Ονόματα που δεν αλλάζουν "περιεχόμενο"................................................................347
Τυπική σύνταξη κώδικα...................................................................................................348
Εισαγωγή στοιχείων προς επεξεργασία......................................................................348
Τρόποι να τερματίσουμε ένα πρόγραμμα πριν το κανονικό τέλος του...................348
Επεξεργασία στοιχείων και μερική ενημέρωση (αρχεία καταγραφής)........................349
Εξαγωγή στοιχείων επεξεργασίας, και τελική ενημέρωση..........................................349
Αναμονή Επεξεργασίας...................................................................................................350
Χρήση του Αναλυτή.....................................................................................................350
Παράδειγμα Αναμονής με Χρήση Αυλού....................................................................351
Παράδειγμα με χρήση γεγονότων από εξωτερικό αντικείμενο (SAPI.SpVoice)..........352
Παράδειγμα εξωτερικής συνάρτησης του συστήματος των Windows.........................353
9. Γραφικά 2Δ στη Μ2000..................................................................................................355
Μονάδες Μέτρησης Twips και Pixels...............................................................................355
Πόντοι (pt) γραμματοσειράς.............................................................................................356
Χρήση Λογικών Μονάδων...............................................................................................357
GDI ή GDI+......................................................................................................................358
Καρτεσιανές συντεταγμένες, Απόλυτες και Σχετικές........................................................358
Πολικές Συντεταγμένες....................................................................................................360
Πολύγωνα........................................................................................................................362
Καμπύλες.........................................................................................................................363
Τόξα και Κυκλικοί Τομείς.................................................................................................364
Χρωματισμός...................................................................................................................364
Εντολή Γέμισε.............................................................................................................364
Εντολή Φόντο..............................................................................................................365
Εντολή Βάψε...............................................................................................................365
Εντολή Χρώμα............................................................................................................367
Τύπος γραμμής................................................................................................................369
Κράτηση Οθόνης.............................................................................................................370
Κίνηση (Animation).....................................................................................................371
Κράτηση Οθόνης σε Μεταβλητή.................................................................................372
Εικόνες.............................................................................................................................373
Εργασίες με εικόνες σε επίπεδα.................................................................................374
Κίνηση Επιπέδων........................................................................................................376
Παίκτες........................................................................................................................379
Αλλαγή Διάστασης Εικόνας.............................................................................................381
Μεταφορά με αλλαγή μεγέθους..................................................................................381
Αποθήκευση εικόνας σε bmp......................................................................................381
Αποθήκευση εικόνας σε jpg........................................................................................381
Διαφάνειες........................................................................................................................381
Εμφάνιση Κειμένου με την Επιγραφή..............................................................................383
Δημιουργία QR Code.......................................................................................................384
Σχέδια – Διανυσματικές Εικόνες......................................................................................385
Παράδειγμα Χρήσης Σχεδίων.....................................................................................386
Παράδειγμα Δένδρο του Πυθαγόρα.................................................................................389
Παράδειγμα Ιστόγραμμα..................................................................................................390
Παράδειγμα Γράφημα Πίτας............................................................................................392
Παράδειγμα Γράφημα Ζεύγη Τιμών.................................................................................394
10. Αρχεία στη Μ2000........................................................................................................397
Τα αρχεία κείμενων ως πάροχοι στοιχείων.....................................................................397
Αρχεία με χρήση του αντικειμένου Έγγραφο...................................................................398
Δημιουργία και Αποθήκευση Εγγράφου.....................................................................400
Έγγραφο και Παράγραφοι (Μέγεθος).........................................................................400
Περί Κωδικοποίησης (CodePage)...............................................................................401
Περί προτύπων κωδικοποίησης κειμένου...................................................................402
Δημιουργία Αντικειμένου Εγγράφου............................................................................403
Περί επεξεργασίας Εγγράφου.....................................................................................405
Αρχεία με χρήση Χειριστών Αρχείων...............................................................................406
Σειριακά Αρχεία με χρήση της ΤΥΠΩΣΕ (Print)..........................................................407
Παράδειγμα Τεράστιου Αρχείου (12GByte)................................................................409
Σειριακά Αρχεία με χρήση της ΓΡΑΨΕ (Write)............................................................410
11. Παραθυρικό Περιβάλλον της Μ2000...........................................................................413
Φόρμα Κονσόλας.............................................................................................................413
Φόρμες Χρήστη...............................................................................................................414
Κατηγορίες Φορμών Χρήστη...........................................................................................422
Φόρμες και Νήματα.........................................................................................................426
Στοιχεία ελέγχου σε στοιχείο ελέγχου Εικόνα..................................................................429
Επίλογος..........................................................................................................................432
Παράρτημα Ι........................................................................................................................433
Οδηγίες εγκατάστασης της Μ2000 και εκτέλεσης ενός προγράμματος......................433
1. Για εγκατάσταση σε Ubuntu με Wine 1.8 (32 ή 64bit):............................................433
2. Για εγκατάσταση σε Windows (από Xp έως και 10, σε 32 ή 64 bit)........................434
Το πρόγραμμα του παραδείγματος.............................................................................442
Παράρτημα ΙΙ.......................................................................................................................443
Ομάδες Αναγνωριστικών στα Ελληνικά...........................................................................443
ΔΙΕΡΜΗΝΕΥΤΗΣ........................................................................................................443
ΧΕΙΡΙΣΜΟΣ ΤΜΗΜΑΤΩΝ...........................................................................................443
ΡΟΗ ΠΡΟΓΡΑΜΜΑΤΟΣ.............................................................................................443
ΕΝΤΟΛΕΣ ΣΩΡΟΥ......................................................................................................443
ΟΡΙΣΜΟΙ.....................................................................................................................443
ΕΓΓΡΑΦΑ....................................................................................................................444
ΧΕΙΡΙΣΜΟΣ ΑΡΧΕΙΩΝ................................................................................................444
ΕΝΤΟΛΕΣ ΚΟΝΣΟΛΑΣ..............................................................................................444
ΟΘΟΝΗ ΚΑΙ ΑΡΧΕΙΑ..................................................................................................444
ΧΕΙΡΙΣΤΕΣ ΤΗΣ ΤΥΠΩΣΕ..........................................................................................444
ΣΤΟΧΟΙ ΚΑΙ ΕΠΙΛΟΓΗ...............................................................................................444
ΓΡΑΦΙΚΑ 2Δ...............................................................................................................444
ΕΝΤΟΛΕΣ ΕΙΚΟΝΩΝ..................................................................................................444
ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ...............................................................................................444
ΗΧΟΙ ΚΑΙ ΤΑΙΝΙΕΣ......................................................................................................445
ΕΝΤΟΛΕΣ ΔΕΙΚΤΗ.....................................................................................................445
ΕΝΤΟΛΕΣ ΙΣΤΟΥ.......................................................................................................445
ΚΟΙΝΕΣ ΦΟΡΜΕΣ......................................................................................................445
ΑΡΙΘΜΗΤΙΚΑ..............................................................................................................445
ΑΛΦΑΡΙΘΜΗΤΙΚΑ......................................................................................................446
ΜΕΤΑΒΛΗΤΕΣ ΣΥΣΤΗΜΑΤΟΣ...................................................................................446
ΣΤΑΘΕΡΕΣ.................................................................................................................446
ΕΚΤΥΠΩΣΕΙΣ..............................................................................................................447
Ομάδες Αναγνωριστικών στα Αγγλικά.............................................................................447
INTERPRETER...........................................................................................................447
MODULE COMMANDS..............................................................................................447
FLOW CONTROL.......................................................................................................447
STACK COMMANDS..................................................................................................447
DEFINITIONS.............................................................................................................447
DOCUMENTS.............................................................................................................447
FILE OPERATIONS....................................................................................................448
CONSOLE COMMANDS............................................................................................448
SCREEN AND FILES..................................................................................................448
OPERATORS IN PRINT.............................................................................................448
TARGET AND MENU.................................................................................................448
DRAWING 2D.............................................................................................................448
BITMAP COMMANDS................................................................................................448
DATABASES...............................................................................................................448
SOUNDS AND MOVIES.............................................................................................448
MOUSE COMMANDS.................................................................................................448
BROWSER COMMANDS...........................................................................................448
COMMON DIALOGUES.............................................................................................449
ARITHMETIC FUNCTIONS........................................................................................449
STRING FUNCTIONS.................................................................................................449
VARS READ ONLY.....................................................................................................449
CONSTANTS..............................................................................................................450
PRINTINGS.................................................................................................................450
Παράρτημα III......................................................................................................................451
Συντακτικό της Μ2000 σε μορφή πίνακα....................................................................451
Παράρτημα IV.....................................................................................................................459
Πρόγραμμα Info..........................................................................................................459
Χρήση του Info.GSB...................................................................................................459
Παιχνίδια στο info.gsb.................................................................................................461
Προγράμματα επίδειξης..............................................................................................462
Παράρτημα V......................................................................................................................473
Περί του διορθωτή της Μ2000....................................................................................473
Σχέση με τη Λειτουργία της Χωριστής Οθόνης (Split Screen Function).................473
Λειτουργία Διορθωτή...................................................................................................473
Μεταφορά σε αριθμό γραμμής διορθωτή....................................................................473
Περί της χρήσης του TAB............................................................................................474
Χρήση σελιδοδεικτών..................................................................................................474
Επιλογή/επικόλληση κώδικα από άλλο τμήμα/συνάρτηση ή από την βοήθεια...........475
Αυτοματισμοί στο Διορθωτή........................................................................................475
Αναζήτηση...................................................................................................................475
Αλλαγή λέξης, με χρήση UNDO..................................................................................475
Αλλαγή λέξης με ίδια γράμματα κεφαλαία ή πεζά.......................................................475
Ελεύθερη Γραμμή Διόρθωσης....................................................................................475
Μέτρηση λέξεων στο διορθωτή...................................................................................475