Συνάμα με την προσθήκη TextBox μπήκαν και οι πίνακες στοιχείων ελέγχου (Control Arrays).
Προς το παρόν δεν μπορούμε να βάζουμε πρόσθετα στοιχεία, ο πίνακας κάνει resize αλλά δεν έχω φτιάξει λογική για να βάζει νέα στοιχεία (σε επόμενη αναθεώρηση)
Αυτό που έφτιαξα επιπλέον είναι ένας τρόπος να κληθεί ένα γεγονός από το στοιχείο ελέγχου για άμεση διεκπεραίωση, επειδή μεταφέρει τιμές με αναφορά, για να τις αλλάξουμε αν θέλουμε και μας περιμένει να το κάνουμε! Αντί δηλαδή στο πρόγραμμα παρακάτω να πάει το μήνυμα στην CallBack όπου έχουμε κάνει ασύγχρονη λειτουργία και μάλιστα με διπλό νήμα, η κλήση στην ρουτίνα εξυπηρέτησης (συνάρτηση εδώ) γίνεται ξεχωριστά.
Στα Form1Text1() (είναι δυο κομμάτια), παίρνω το Form1Text1.ValidString και αλλάζω το κείμενο σε κεφαλαία. Ότι και να γράψουμε θα γίνει κεφαλαίο πριν το δούμε στο κουτάκι του textbox. Μας δίνει δυο στοιχεία, το τι θα γράψουμε και τη θέση του δρομέα (θέση χαρακτήρων). Αυτό το χρησιμοποιώ στις ρυθμίσεις αλλά εκεί γίνεται με άμεσο τρόπο με κώδικα της Vb6. Εδώ ο κώδικας είναι της Μ2000, άρα με τη διεπαφή (interface) που ορίζεται για την Μ2000.
(Υπάρχουν οι εντολές και στα ελληνικά)
Έχω βάλει και έναν μετρητή σε δικό του νήμα που βάζει το νούμερο στο δεύτερο textbox (Form1Text1(0)).
To Form1Text1.Click είναι ασύγχρονο και αυτό. Ακόμα θέλει δουλειά (υπάρχουν αρκετά controls, όπως τα είχα φτιάξει για τις βασικές φόρμες της Μ2000, και πρέπει να φτιάχνω το wrapper όπου τα Events - γεγονότα θα τα στέλνει στην Μ2000).
ΓΚ
Title "M2000-Demo" \\ , 0 \\ use ,0 to minimize
\\ M2000 - Form and Button and TextBox (limited to 50 chars)
Declare Form1 Form Event Hello
Declare Form1Button1(2) Button Form Form1
Declare Form1Text1(2) TextBox Form Form1
Method Form1,"move", 2000,7000,10500,3000
Method Form1Text1(0),"move", 500,900,4500,500
Method Form1Text1(1),"move", 5500,900,4500,500
With Form1Text1(0), "Text","Όλα Καλά"
Method Form1Button1(0),"move", 500,2000,4500,500
Method Form1Button1(1),"move", 5500,2000,4500,500
With Form1Button1(0), "Caption","MessageBox"
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 Form1Text1.Click {
Read Who
Print "Form1Text1 ";Who
}
Function Form1Text1.Keydown {
\\ This is used without use of soft callback function
\\ because we have to return immediate
\\ we can alter keys here!
Read New index
Read New &keycode, &Shft, &obj
If keycode=13 Then {
With Form1Text1(index), "Text" As Form1Text1$
Print Form1Text1$
Form1Text1$=""
}
}
Function Form1Text1.ValidString {
\\ This is used without use of soft callback function
Read New index
Read New &A$, &B
A$=Ucase$(A$)
}
Function Form1Button1.Click {
\\ This is a message box
\\ This use the soft callback (or async)
Read index
If index=0 Then {
Print ask("ok","This is an example for M2000 Gui")
} Else {
With Form1Text1(0), "Text",""
Cls
}
}
Function Form2Button2.Click {
If Again Then With Form2, "Title", "Press Again"
Again~
}
Let 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 {
\\ This function used If we don't have references to gui objects
\\ and we can use threads for async service
Read msg$, &frm
For This {
With frm, "Title" As Caption$
{
Part {
Print msg$, Caption$
\\ Data command send to bottom, Push send to top
Thread ExecuteThis1 Execute Data msg$
msg$=""
} As busy1
Part {
Print msg$, Caption$
Thread ExecuteThis2 Execute Data 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
cc=0
With Form1Text1(1), "Text" As counter$
Thread {
cc++
If form1.visible Then counter$=Format$("{0}", cc)
} As counter Interval 100
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
Dim Form1Button2(), Form1Text1()
Declare Form2Button2 Nothing
Declare Form1 Nothing
Declare Form2 Nothing
\\ change title and show the console
Title "Back Again"
Show \\ get focus back
Threads Erase
Με την Title "M2000-Demo" , 0 η "κονσόλα" κάνει ελαχιστοποίηση, και αφήνει τα παράθυρα μόνο! Εδώ εικόνες από άλλο υπολογιστή με Windows 7
Προς το παρόν δεν μπορούμε να βάζουμε πρόσθετα στοιχεία, ο πίνακας κάνει resize αλλά δεν έχω φτιάξει λογική για να βάζει νέα στοιχεία (σε επόμενη αναθεώρηση)
Αυτό που έφτιαξα επιπλέον είναι ένας τρόπος να κληθεί ένα γεγονός από το στοιχείο ελέγχου για άμεση διεκπεραίωση, επειδή μεταφέρει τιμές με αναφορά, για να τις αλλάξουμε αν θέλουμε και μας περιμένει να το κάνουμε! Αντί δηλαδή στο πρόγραμμα παρακάτω να πάει το μήνυμα στην CallBack όπου έχουμε κάνει ασύγχρονη λειτουργία και μάλιστα με διπλό νήμα, η κλήση στην ρουτίνα εξυπηρέτησης (συνάρτηση εδώ) γίνεται ξεχωριστά.
Στα Form1Text1() (είναι δυο κομμάτια), παίρνω το Form1Text1.ValidString και αλλάζω το κείμενο σε κεφαλαία. Ότι και να γράψουμε θα γίνει κεφαλαίο πριν το δούμε στο κουτάκι του textbox. Μας δίνει δυο στοιχεία, το τι θα γράψουμε και τη θέση του δρομέα (θέση χαρακτήρων). Αυτό το χρησιμοποιώ στις ρυθμίσεις αλλά εκεί γίνεται με άμεσο τρόπο με κώδικα της Vb6. Εδώ ο κώδικας είναι της Μ2000, άρα με τη διεπαφή (interface) που ορίζεται για την Μ2000.
(Υπάρχουν οι εντολές και στα ελληνικά)
Έχω βάλει και έναν μετρητή σε δικό του νήμα που βάζει το νούμερο στο δεύτερο textbox (Form1Text1(0)).
To Form1Text1.Click είναι ασύγχρονο και αυτό. Ακόμα θέλει δουλειά (υπάρχουν αρκετά controls, όπως τα είχα φτιάξει για τις βασικές φόρμες της Μ2000, και πρέπει να φτιάχνω το wrapper όπου τα Events - γεγονότα θα τα στέλνει στην Μ2000).
ΓΚ
Title "M2000-Demo" \\ , 0 \\ use ,0 to minimize
\\ M2000 - Form and Button and TextBox (limited to 50 chars)
Declare Form1 Form Event Hello
Declare Form1Button1(2) Button Form Form1
Declare Form1Text1(2) TextBox Form Form1
Method Form1,"move", 2000,7000,10500,3000
Method Form1Text1(0),"move", 500,900,4500,500
Method Form1Text1(1),"move", 5500,900,4500,500
With Form1Text1(0), "Text","Όλα Καλά"
Method Form1Button1(0),"move", 500,2000,4500,500
Method Form1Button1(1),"move", 5500,2000,4500,500
With Form1Button1(0), "Caption","MessageBox"
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 Form1Text1.Click {
Read Who
Print "Form1Text1 ";Who
}
Function Form1Text1.Keydown {
\\ This is used without use of soft callback function
\\ because we have to return immediate
\\ we can alter keys here!
Read New index
Read New &keycode, &Shft, &obj
If keycode=13 Then {
With Form1Text1(index), "Text" As Form1Text1$
Print Form1Text1$
Form1Text1$=""
}
}
Function Form1Text1.ValidString {
\\ This is used without use of soft callback function
Read New index
Read New &A$, &B
A$=Ucase$(A$)
}
Function Form1Button1.Click {
\\ This is a message box
\\ This use the soft callback (or async)
Read index
If index=0 Then {
Print ask("ok","This is an example for M2000 Gui")
} Else {
With Form1Text1(0), "Text",""
Cls
}
}
Function Form2Button2.Click {
If Again Then With Form2, "Title", "Press Again"
Again~
}
Let 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 {
\\ This function used If we don't have references to gui objects
\\ and we can use threads for async service
Read msg$, &frm
For This {
With frm, "Title" As Caption$
{
Part {
Print msg$, Caption$
\\ Data command send to bottom, Push send to top
Thread ExecuteThis1 Execute Data msg$
msg$=""
} As busy1
Part {
Print msg$, Caption$
Thread ExecuteThis2 Execute Data 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
cc=0
With Form1Text1(1), "Text" As counter$
Thread {
cc++
If form1.visible Then counter$=Format$("{0}", cc)
} As counter Interval 100
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
Dim Form1Button2(), Form1Text1()
Declare Form2Button2 Nothing
Declare Form1 Nothing
Declare Form2 Nothing
\\ change title and show the console
Title "Back Again"
Show \\ get focus back
Threads Erase
Με την Title "M2000-Demo" , 0 η "κονσόλα" κάνει ελαχιστοποίηση, και αφήνει τα παράθυρα μόνο! Εδώ εικόνες από άλλο υπολογιστή με Windows 7
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.