Πέμπτη, 12 Μαΐου 2016

Παράδειγμα με δυο φόρμες, η δεύτερη Modal

Αναθεώρηση 14 (έκδοση 8.1)

Μια μικρή προσθήκη (ένας χαρακτήρας στο κώδικα, αλλάζει όμως μια συνάρτηση, και δίνει το πλεονέκτημα που θα φανεί παρακάτω).

Από το παράδειγμα εδώ: Παράδειγμα με δυο φόρμες, και γράψιμο και στις δυο ταυτόχρονα!
Εδώ η δεύτερη φόρμα ανοίγει ως modal και σταματάει η ροή του προγράμματος εκεί για να βάλουμε κάτι στο textbox edit2. Βάζουμε ένα νήμα να κάνει εστίαση στο edit2 της φόρμας form2 που ανοίγουμε ως Modal (δηλαδή όλα τα άλλα παράθυρα γίνονται ανενεργά από το ποντίκι μας, ούτε μπορούν να επιλεχθούν με το  tab-ctrl)



Declare form1 Form
\\ use standard size and title
Declare edit1 TextBox Form form1
Method edit1, "move", 1000,2000,6000,600
With edit1,"Vartext" as edit1.text$


Declare form2 Form
\\ use standard size and title
Declare edit2 TextBox Form form2
Method edit2, "move", 1000,2000,6000,600
With edit2,"Vartext" as edit2.text$


Method form1,"show"
xx=0
NoForm1=False
thread { xx++ } as b interval 200
Function form1.Unload {
      NoForm1=True
}


Function form1.Click {
      edit2.text$=edit1.text$
            after 10 {
            after 10 { Method edit2, "GetFocus" }
            Method form2,"show", 1
            }
}
Main.Task 100 {
      Print xx
      if NoForm1 Then Exit
}
Show
threads erase
Declare form2 Nothing
Declare form1 Nothing


Απλή έκδοση, έχουν αφαιρεθεί τα νήματα, το ένα που αλλάζει αριθμό ΧΧ, και το βασικό το Main.Task που έγινε Every. Το Every ή Κάθε, δεν είναι νήμα, αλλά κώδικας που παίζει σαν να είναι νήμα, η διαφορά είναι ότι όταν θα ανοίξει η φόρμα form2 επειδή ανοίγει ως modal, θα σταματήσει την ροή του προγράμματος στο τμήμα, η οποία βρίσκεται στο Every {}. Θα παίξει μόνο η after, και όσες φορές κληθούν συναρτήσεις για εξυπηρέτηση γεγονότων (εδώ δεν έχουμε κάποια για το form2).
Στη προηγούμενη εκδοχή, το Main.Task δεν σταματάει, και με το διπλό After έχουμε φύγει από την ρουτίνα εκτέλεσης του form1.Click, δηλαδή ουσιαστικά εκτελείται ως εκτός σειράς εντολή (αυτό έχει το νόημα της παράλληλης εκτέλεσης).

Declare form1 Form
\\ use standard size and title
Declare edit1 TextBox Form form1
Method edit1, "move", 1000,2000,6000,600
With edit1,"Vartext" as edit1.text$


Declare form2 Form
\\ use standard size and title
Declare edit2 TextBox Form form2
Method edit2, "move", 1000,2000,6000,600
With edit2,"Vartext" as edit2.text$


Method form1,"show"
NoForm1=False
Function form1.Unload {
      NoForm1=True
}
Function form1.Click {
      edit2.text$=edit1.text$
      after 10 { Method edit2, "GetFocus" }
      Method form2,"show", 1
}
Every 100 {
      if NoForm1 Then Exit
}
Show
threads erase
Declare form2 Nothing
Declare form1 Nothing


lor="#2020>
Declare form1 Nothing