Έφτιαξα πιο κομψό τον τρόπο κλήσης συναρτήσεων για τα γεγονότα.
Στην αναθεώρηση 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
Στην αναθεώρηση 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.