Τετάρτη 9 Μαρτίου 2016

Αναθεώρηση 184 - Εμπλουτισμός!

Έφτιαξα πιο κομψό τον τρόπο κλήσης συναρτήσεων για τα γεγονότα.

Στην αναθεώρηση 184, έφτιαξα την Call Local που καλεί μια συνάρτηση σαν να είναι τμήμα του τμήματος, άρα βλέπουμε ότι και το τμήμα. Έτσι αποφεύγουμε τις γενικές συναρτήσεις. Το ίδιο κάνουμε για την CallBack() αλλά επειδή πρέπει να γίνει σε άλλο χρόνο (όχι την ώρα που την περνάμε στο γεγονός Hello ) την περνάμε ως οκνηρή (Lazy) ανώνυμη συνάρτηση που θα τρέξει ομοίως, ως τμήμα σε τμήμα  (όμως θα έχει δικό της σωρό και ότι φτιάξει θα το σβήσει)
Τα νήματα δεν έχουν όνομα, αλλά μεταβλητή χειρισμού και ανήκουν στο τμήμα που τα χρησιμοποιούμε, και αυτά έχουν δικό τους σωρό, αλλά δεν σβήνουν ότι φτιάχνουν (και αυτό έχει ρίσκο), όμως δημιουργούν δικές τους στατικές και μπορούμε να γράψουμε στο σωρό τους ή στις στατικές του με την Execute (εκτέλεση) από άλλο νήμα.

Title "M2000-Demo"   \\  , 0     \\ use ,0 to minimize
\\ M2000  - Form and Button only for these demo
Declare Form1 Form Event Hello
Declare Form1Button1 Button Form Form1
Declare Form1Button2 Button Form Form1


Method Form1,"move", 2000,7000,10500,3000
Method Form1Button1,"move", 500,2000,4500,500
Method Form1Button2,"move", 5500,2000,4500,500


Declare Form2 Form Event Hello
Declare Form2Button2 Button Form Form2


Method Form2,"move", 0,0,8000,3000
Method Form2Button2,"move", 1000,2000,6000,500


Again=True
\\ using call local we call code in function but in this name space


Function Form1Button1.Click {
     \\ this is a message box
     Print ask("ok","This is an example for M2000 Gui")
}
Function Form2Button2.Click {
            If Again then With Form2, "Title", "Press Again"
            Again~
}
Function Form1Button2.Click {
         Cls
}
Στη busy1=0, busy2=0
Thread {
      if not empty then {
            Part {
                try { call local letter$}
           } as busy1
      }
} as ExecuteThis1 interval 50


Thread {
      if not empty then {
            Part {
                Try { call local letter$}
           } as busy2
      }
} as ExecuteThis2 interval 50



Function Callback {
      Read msg$, &frm
    for this {
            with frm, "Title" as Caption$
            {
                  part {
                        print msg$, Caption$
                        Thread ExecuteThis1 Execute Push msg$
                        msg$=""
                  } as busy1
                  part {
                        print msg$, Caption$
                        Thread ExecuteThis2 Execute Push msg$
                        msg$=""
                  } as busy2
                  \\ using copy we can push back the mesage again
                  \\ new messages are coming
                  if msg$<>""  then loop \\ just mark block for looping once
                  Refresh
            }
           
      }
}
Event Hello new lazy$(&CallBack())


With Form1, "Title" as Form1.Caption$, "Visible" as Form1.Visible
With Form2, "Title" as Form2.Caption$, "Visible" as Form2.Visible, "top", 3000, "left", 3000


With Form2Button2, "Caption","Press This Please"
Form1.Caption$="Hello There"
Form2.Caption$="Hello There 2"


Method Form1,"Show"
Method Form2,"Show"
Refresh
Main.Task 50 {
      If Again then If form2.visible Then form2.caption$="Hello There 2 ["+str$(now,"hh:mm:ss")+"]"
      If form1.visible Or form2.visible Else exit
      Print "WAIT........"
      Refresh
}
\\ we can dereference these here
Declare Form1Button1 Nothing
Declare Form1Button2 Nothing
Declare Form2Button2 Nothing
Declare Form1 Nothing
Declare Form2 Nothing
\\ change title and show the console
Title "Back Again"
Show  \\ get focus back
Threads Erase


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

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

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