Πέμπτη 10 Μαρτίου 2016

Αναθεώρηση 185 προσθήκη TEXTBOX

Συνάμα με την προσθήκη 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



 

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

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

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