Κυριακή 17 Απριλίου 2016

Αναθεώρηση 219

1. Προσθήκη unicode τίτλου στον μικρό παράθυρο στη TaskBar. Δοκιμάστηκε σε Windows 8 χωρίς ελληνικά ως γλώσσα επιλογής.
2. Επίσης μετακινήθηκε μια γραμμή κώδικα από την εντολή Τύπωσε που είχε μπει στην 218 και μπορούσε να δημιουργήσει μήνυμα λάθους όταν πατούσαμε το Esc (τώρα ο έλεγχος γίνεται στο πέρας της εντολής αυτής)

Για Linux-Wine
Δοκιμάστηκε σε Linux. Επιλέχθηκε στο Wine Native OleAut32 και δουλεύει η Μ2000.Έχει ένα μικρό πρόβλημα ακόμα αλλά η ταχύτητα είναι καλή πια. Το μικρό πρόβλημα είναι ότι όταν δίνουμε το όνομα ενός τμήματος για να το τρέξει..μερικές φορές δεν το βρίσκει! Ακόμα δεν ξέρω γιατί το κάνει αυτό!


Σάββατο 16 Απριλίου 2016

Αναθεώρηση 218.

Η 217..δεν βγήκε ποτέ. Η νέα αναθεώρηση έχει αλλαγές στο κώδικα με στόχο τη βελτίωση της ταχύτητας. Δεν θα αναφέρω τα τεχνικά ζητήματα, αλλά όποιος θέλει βλέπει στο Git τις αλλαγές.
Είναι έτσι ο κώδικας ώστε να δουλεύει μισό-μισό, δηλαδή ένα μέρος με το παλιό σύστημα και ένα με το νέο, ώστε σε επόμενη αναθεώρηση να ολοκληρωθεί χωρίς να φαίνεται αλλαγή στη λειτουργικότητα.
Διόρθωσα και το EditBox (μια λεπτομέρεια)!

Λάμδα Συναρτήσεις & Σύλληψη - Παράδειγμα

Οι συναρτήσεις λάμδα στη Μ2000 είναι ένα νέο κεφάλαιο που δίνει πρόσθετες δυνατότητες βάσει των χαρακτηριστικών ότι είναι συνάμα και μεταβλητές και ότι έχουν δυνατότητα σύλληψης αντικειμένων-μεταβλητών. Η σύλληψη νοείται ως αντιγραφή στο περιβάλλον της λάμδα συνάρτησης. Από τη στιγμή της αντιγραφής μιλάμε για άλλη μεταβλητή ή πίνακα ή αντικείμενο


Α=λάμδα -> αριθμός**2
Τύπωσε Α(10) \\ 100
X=10
\\ σύλληψη Χ στο περιβάλλον της Α
Α=λάμδα X -> αριθμός**2+X
Τύπωσε Α(10) \\ 110
\\ σύλληψη λάμδα Α στην Β
Β=λάμδα Α -> Α(αριθμός*2)
Τύπωσε Β(10) \\ 410
Α=λάμδα Κ=1001->{=Κ : Κ++}
Τύπωσε Α(),Α() \\ 1001  1002
Τύπωσε Β(10) \\ 410  γιατί έχει κρατήσει δική του Α()
Πίνακας Α(3,3)
Α(0,0)=1,0,0,0,1,0,0,0,1
\\ σύλληψη πίνακα Α()
Γ=Λάμδα Α()->{ Διάβασε Χ, Υ, Β :=Α(Χ, Υ)*Β}
Πίνακας Α() \\ τον σβήνουμε γιατί έχει κρατηθεί αντίγραφο στη Γ
Τύπωσε Γ(1,1, 3), Γ(1,0, 3) \\ 3, 0
Τμήμα Κάτι {
      Διάβασε Α, Β, Γ
      Τύπωσε Α(10) \\ 1003  -- 1003 την δεύτερη φορά
      Τύπωσε Β(10) \\ 410
      Τύπωσε Γ(0,0,3) \\  3
}
Κάτι Α, Β, Γ \\ δίνουμε αντίγραφα
Κάτι Α, Β, Γ
Τμήμα Κάτι2 {
      Διάβασε &Α, &Β, &Γ
      Τύπωσε Α(10) \\ 1003  -- 1004 την δεύτερη φορά
      Τύπωσε Β(10) \\ 410
      Τύπωσε Γ(0,0,3) \\  3
}
Κάτι2 &Α, &Β, &Γ \\ δίνουμε αναφορές
Κάτι2 &Α, &Β, &Γ


Το παρακάτω θέλει δυνατό μυαλό:

Κλάση Αλφα {
      Χ, Υ , Ζ
}
\\ φτιάχνουμε το Κ από τη κλάση Άλφα
\\ το Κ είναι τύπου Ομάδα και όχι Άλφα
\\ το ότι είναι όπως το Άλφα απλά το γνωρίζουμε εμείς
Κ=Άλφα()
Κ.Χ+=100
Κ.Υ+=50
Κ.Ζ-=200
Για Κ { Τύπωσε .Χ, .Υ, .Ζ}
\\  Η συνάρτηση λάμδα Α συλλαμβάνει το Κ στην τρέχουσα τιμή και διαμόρφωση
Α=Λάμδα Κ -> {
      Διάβασε Χ
      Μ=Κ
      Για Μ {
            .Χ*=Χ
            .Υ*=Χ
            .Ζ*=Χ
      }
      =Μ
}


Κ=Α(10)
Για Κ { Τύπωσε .Χ, .Υ, .Ζ}
Κ=Α(5)
Για Κ { Τύπωσε .Χ, .Υ, .Ζ}
Κ=Α(1)
Για Κ { Τύπωσε .Χ, .Υ, .Ζ}
Ομάδα Κ { Οκ=αληθές}
Τύπωσε Κ.Οκ
Κ=Α(0) \\ έχουμε συγχώνευση όχι αντικατάσταση (αλλάζουν μόνο ίδιες ιδιότητες)
Για Κ { Τύπωσε .Χ, .Υ, .Ζ, γραφη$(.Οκ,";Αληθές;Ψευδές;")} \\ 0 0 0 Αληθές


\\ για πίνακα αντικειμένων
\\ πίνακες αντικειμένων με δήλωση με κλάση δεν παίρνουν νέες συναρτήσεις/τμήματα αλλά παίρνουν νέες ιδιότητες
Σημ 2.1 : Πίνακας Μ(100)=Άλφα()
\\ Δείτε με δηλώσεις ξεχωριστές
Σημ 2.2 :
Πίνακας Μ(100)
Σημ 2.2.1 :
Μ(3)=Άλφα()
Σημ 2.2.1 :
Μ(4)=Άλφα()


\\ Η Για ανοίγει πρόσκαιρα το αντικείμενο, κάνουμε εργασίες και το κλείνει ξανά
\\ στο κλείσιμο πετάει ότι νέο έχουμε κάνει, εκτός από νέες ιδιότητες
\\
\\ και αν δεν έχουμε ορίσει μια κλάση για όλο το πίνακα, τότε μπορούμε να αλλάξουμε/ορίσουμε
\\ νέες συναρτήσεις-τμήματα. Όμως μπορούμε να ορίζουμε λάμδα συναρτήσεις σε κάθε περίπτωση
Για Μ(3) {
      \\ προσθήκη ιδιότητας σε συγκεκριμένο αντικείμενο στο πίνακα
      Αυτό=Κ
      Ομάδα Άλλη {
            Οκ=αληθές
            Συνάρτηση Κάπα {=100}
            ΒΒ=Λάμδα ->Αριθμός*.Χ
      }
      Αυτό=Άλλη ' Συγχώνευση
      .χ=100
      Τύπωσε .Κάπα(), "ν"
      Τύπωσε .ΒΒ(100), "λ", .χ
  }


Τύπωσε Μ(3).Οκ, Έγκυρο(Μ(4).Οκ) \\ -1, 0  στο Μ(4) δεν βάλαμε ιδιότητα Οκ
Για Μ(3) { Τύπωσε .Χ, .Υ, .Ζ, γραφη$(.Οκ,";Αληθές;Ψευδές;")} \\ 0 0 0 Αληθές
\\ Προσοχή στους πίνακες αντικειμένων έχουμε αντικατάσταση, όχι συγχώνευση
\\ (η συγχώνευση γίνεται με το Για Μ(3) { Αυτό = Άλφα() }
Σημ 1 :Μ(3)=  Άλφα() ' χωρίς συγχώνευση
Σημ 2 :
Για Μ(3) { Αυτό = Άλφα() } ' με συγχώνευση
Μ(3).Χ=5
Τύπωσε Έγκυρο(Μ(3).Οκ), Έγκυρο(Μ(3).Κάπα())
Τύπωσε Μ(3).ΒΒ(50)=250, "λ"  '' είναι πάντα έγκυρη, γιατί είναι περασμένη ως ιδιότητα τύπου λάμδα

Αναθεώρηση 216

Μικρές βελτιώσεις στην ταχύτητα κυρίως.


Module AA {
      For i=1 To 1000 {Print i,}
}
Module BB {
      For i=1 To 1000 {X=I}
}
Module CC {
      For i=1 To 1000 {}
}
Refresh 50
\\ Set Fast !
Set Fast
\\ Set Slow
Profiler
Call AA
Print
Print TimeCount
Profiler
Call BB
Print TimeCount
Profiler
Call CC
Print TimeCount

Παρασκευή 15 Απριλίου 2016

Αναθεώρηση 215 Gui και βάσεις δεδομένων. (διόρθωση)

Σε αυτήν την αναθεώρηση βελτίωσα το EditBox, και έφτιαξα το FormLabel για να βάζουμε ετικέτες στις φόρμες.

Παρακάτω είναι ένα πρόγραμμα που είναι στο αρχικό στάδιο..απλά φτιάχνει μια βάση, βάζει μια εγγραφή και διαβάζει την εγγραφή και την παρουσιάζει σε μια φόρμα. Θα το συνεχίσω...


(διορθώθηκε στην εντολή Ανάκτηση το αρχείο από άλφα1 σε άλφα2)

Όρισε Φόρμα1 Φόρμα
Όρισε Επιθ1 Εισαγωγη Φόρμα Φόρμα1
Όρισε Ονομ1 Εισαγωγη Φόρμα Φόρμα1
Όρισε Τηλ1 Εισαγωγη Φόρμα Φόρμα1
Όρισε Σημ1 Κείμενο Φόρμα Φόρμα1
Όρισε Προηγ1 Πλήκτρο Φόρμα Φόρμα1
Όρισε Αλλαγ1 Πλήκτρο Φόρμα Φόρμα1
Όρισε Επομ1 Πλήκτρο Φόρμα Φόρμα1
Μέθοδος Φόρμα1,"Move",(χ.σημεία-12000)/2,(υ.σημεια-8000)/2,12000, 6900
Μέθοδος Επιθ1, "Move", 2900,900,8200, 600
Μέθοδος Ονομ1, "Move", 2900,1800,8200, 600
Μέθοδος Τηλ1, "Move", 2900,2700,8200, 600
Μέθοδος Σημ1, "Move", 2900,3600,8200, 1800
Μέθοδος Προηγ1, "Move", 900,5700,3200, 600
Μέθοδος Αλλαγ1, "Move", 4400,5700,3200, 600
Μέθοδος Επομ1, "Move", 7900,5700,3200, 600
ΖΖ=Ψευδές \\ δοκίμασε με Αληθές
Με Επιθ1, "ShowAlways", ΖΖ
Με Όνομ1, "ShowAlways", ΖΖ
Με Τηλ1, "ShowAlways", ΖΖ
Με Σημ1, "ShowAlways", ΖΖ , "DisplayLines", 1800/600
Μέθοδος Σημ1, "SetRowColumn",0,0,Ψευδής
Συνάρτηση Σημ1.PopUp {
      Διάβασε νέο Χ, Υ
      Μέθοδος Σημ1,"PopUpMenu", "",Χ,Υ
}
ΝΓ$={
}
Επίπεδο Φόρμα1 {
      Οθόνη #332255


      ΖΝ=1020
      Σωρός Νέος {
      Σειρά "Επώνυμο", "Όνομα", "Τηλέφωνο","Σημειώσεις"
      Για Ι=1 εως 4 {
            Θέση 2400, ΖΝ
            Ετικέτα.Φόρμας Γράμμα$,,,1
            ΖΝ+=900
      }
      }
}


Βάση.Πάροχος "" \\  επαναφορά στην αρχική ρύθμιση
Αν όχι Βάση("άλφα2") τότε {
Βάση "άλφα2"
Εκτέλεση "άλφα2", { CREATE TABLE Employees(ID autoincrement primary key,  LastName   VARCHAR(40) Not Null,  FirstName  VARCHAR(40)  Not Null, Tel VARCHAR(10), MyMemo TEXT )}
Προσθήκη "άλφα2","Employees",,"Γιώργος","Κύριος","0120100","Γεια χαρά από Ελλάδα"
}
Ανάκτηση "άλφα2", "Employees", 1,"",""
Διάβασε Πόσα
Αν Πόσα >0 τότε {
      Διάβασε Κωδ, Επώνυμο$, Όνομα$, Τελ$, Σημείωση$
}
Κλείσε Βάση Κατ$+"άλφα1.mdb"
ΔείξεΕγγραφή(Επώνυμο$, Όνομα$, Τελ$, Σημείωση$)
Μέθοδος Φορμα1, "Show", 1


Όρισε Φόρμα1 Τίποτα


Ρουτίνα ΔείξεΕγγραφή(Επώνυμο1$, Όνομα1$, Τελ1$, Σημείωση1$)
Με Επιθ1, "Text", Επώνυμο1$
Με Ονομ1, "Text", Όνομα1$
Με Τηλ1, "Text", Τελ1$
Με Σημ1, "Text", Σημείωση1$
Μέθοδος Σημ1, "SetRowColumn",0,0, Αληθής
Τέλος Ρουτίνας


Πέμπτη 14 Απριλίου 2016

Αναθεώρηση 214 Βελτιώσεις!

Βελτιώσεις στα αντικείμενα του γραφικού περιβάλλοντος (GUI)


Declare Form1 Form
Layer Form1 { Cls 7
    Move scale.x/2, scale.y/2
   Pen 14 { Circle Fill 14, 100, 0.5}
   w=scale.x
}
Declare Edit1 EditBox Form Form1
Declare Text1 TextBox Form Form1
Method Edit1, "move",1000,1000,w-2000,2000
Method Text1, "move",1000,3600,w-2000,600
With Edit1, "Text",{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
}
Method Edit1,"TextViewOnly"
Method Edit1, "Transparent"
Method Edit1, "Colors", 15, 15
Method Text1, "Transparent"
Method Text1, "Colors", 15,15
m=10 : s=1
Layer Form1 {
      Thread {
            Cls 7
            Pen 0 { Circle Fill 0, m*100, 0.5}
            m+=s
            if m>=40 then s=-1
            If M<2 then s=1
            method Form1, "RefreshAll"
      } as mm interval 30
}
Method Form1, "Show", 1
Threads Erase
Declare Form1 Nothing


Τετάρτη 13 Απριλίου 2016

Αναθεώρηση 213 Βελτίωση!

Βελτιώθηκε ο επεξεργαστής κειμένου. Όταν του έδινα κώδικα 35000 γραμμών αργούσε περίπου 6 με 8 δευτερόλεπτα, ενώ τώρα δεν αργεί παρά ένα για να γράψει το κείμενο (για να κρατήσει συνολικό Undo), και μετά το δίνει χωρίς να το χρωματίσει, και χρωματίζεται βάσει των γραμμών που βλέπουμε. Όταν κάνουμε COPY όμως χρωματίζει όλο το κώδικα (και εδώ βελτιώθηκε, γιατί χρωματίζει ότι δεν έχει χρωματιστεί), για να το εξάγει ως html.


Επίσης βελτίωσα τα Editbox και Textbox

Declare Form1 Form
Layer Form1 { Cls 7
    Move scale.x/2, scale.y/2
   Pen 13 { Circle Fill 13, 4000, 0.5}
   w=scale.x
}
Declare Edit1 EditBox Form Form1
Declare Text1 TextBox Form Form1
Method Edit1, "move",1000,1000,w-2000,2000
Method Text1, "move",1000,3600,w-2000,600
With Edit1, "Text",{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
}
Method Edit1,"TextViewOnly"
Method Edit1, "Transparent"
Method Edit1, "Colors", 4, 4
Method Text1, "Transparent"
Method Text1, "Colors", 1, 1
Method Form1, "Show", 1
Declare Form1 Nothing




Επίσης το Button αλλάζει αν θέλουμε ρόλο και γίνεται χρονοδιακόπτης (αν και η Μ2000 έχει νήματα που είναι καλύτεροι χρονοδιακόπτες, εδώ έχουμε την περίπτωση ενός στοιχείου στο ρόλο ταλαντωτή). Δίνουμε έναν αριθμό msec και κάθε φορά που θα φτάνει στην ώρα του θα στέλνει ένα μήνυμα με μια μεταβλητή που γίνεται Αληθής-Ψευδής. Μια χρησιμότητά του είναι να έχουμε κείμενο που αναβοσβήνει.
(Με Esc σταματάει μεν η αρίθμηση, αλλά δεν βγαίνει το σύστημα από το Modal, δηλαδή το "Show",1 που έχουμε δώσει, μπορούμε να δώσουμε την εντολή Escape Off για να έχουμε εκτός το σύστημα που κοιτάει το Escape. Σε άλλη αναθεώρηση θα φτιαχτεί το Escape να μας βγάζει και από τέτοια κατάσταση )



Declare Form1 Form
Declare Inform1 Button Form Form1
Declare Test1 Button Form Form1
Method Inform1, "FontAttr", "Arial Black", 64, true
Method Inform1,"Colors", #ff7700,#993300
With Inform1,"Locked", true, "Blink", 500
With Form1,"Title", "Final Count Down"
K=500
Thread {
      k--
      if k<1 then Method Form1,"CloseNow"
      With Inform1, "caption",format$("{0}",k)
} as m interval 20
Function Inform1.Blink {
      Read face
      If Face then {
            Method Inform1,"Colors", #ff7700,#993300
      } else Method Inform1,"Colors", #ffAA88,#bb5500
      With Inform1,"Locked", True
   
}
Function Test1.Click {
      K=500
}
With Form1, "width" as w
Method Inform1, "move",1000,1000,w-2000,2000
Method Test1, "move",1000,3600,w-2000,600
With Inform1,"Caption", "Error"
With Test1,"Caption", "Reset"
Method Form1, "Show", 1
Declare Form1 Nothing