Τρίτη 24 Νοεμβρίου 2015

Αντιγραφή στο πρόχειρο ως HTML από το διορθωτή (αναθ, 94)

Νέα αναθεώρηση 94.
1. Επιτέλους αποφάσισα χθες και το έφτιαξα να βγαίνει το χρωματισμένο κείμενο σε πρόχειρο ως Html Format, που σημαίνει ότι αν το επικολλήσουμε σε τούτο το blog ή στο Word θα βγει το κείμενο χρωματισμένο. Δεν είναι όσο απλό φαίνεται διότι η Html είναι κάπως μυστήρια με τα διαστήματα. Δηλαδή έπρεπε να βρω τη κατάλληλη λύση γιατί εξ ορισμού τα συνεχόμενα διαστήματα τα κάνει ένα η Html και αν κανείς χρησιμοποιήσει το non break space τότε ναι μεν τα γλιτώνει από το να γίνουν ένα, αλλά δεν έχουμε εκεί που θέλουμε αλλαγή γραμμής (δεν έχουμε αναδίπλωση λέξης). Στο Word αντιμετωπίζονταν καλύτερα, αλλά εδώ στο blog...υπήρχε πρόβλημα.
Η λύση βρέθηκε αφού εξετάστηκαν άλλες. Κάνουμε το απλό πράγμα με κατάλληλες αλλαγές στο αλφαριθμητικό που κρατάει το κείμενο που θα γίνει html, να μένουν μόνο τα μονά διαστήματα. Έτσι τα μονά διαστήματα μένουν ως διαστήματα ενώ όπου υπάρχουν δυο ή περισσότερα τότε γίνονται ένα. (κάνω και ένα καθαρισμό διαστημάτων αν είναι εκτός δυο "οντοτήτων", τα αλφαριθμητικά και οι σημειώσεις).
Επιπλέον το κείμενο για Html πρέπει να είναι σε UTF-8, και είναι!

Κάθε φορά  σε αποκοπή ή αντιγραφή βάζω στο πρόχειρο δυο πράγματα: το html κείμενο και το unicode κείμενο. Έτσι μπορεί κανείς να πάρει ένα από τα δύο. Ενώ βγάζει html κείμενο, ο διορθώτης δεν διαβάζει html κείμενο. Διαβάζει το unicode κείμενο (χωρίς χρώμα) και χρωματίζει άμεσα. Δηλαδή εξάγουμε χρώμα δεν εισάγουμε...Το χρώμα ο διορθωτής το υπολογίζει με την αλλαγή περιεχομένου στη παράγραφο για όλη τη παράγραφο και ορισμένες φορές "κοιτάει" και πίσω ή μπροστά, διότι υπάρχει και η αντικατάσταση σε αλφαριθμητικό που μπορεί να γίνει με κείμενο μέσα σε αγκύλες. Ο διορθωτής ξέρει ποιες αγκύλες περιέχουν εντολές και ποιες είναι αλφαριθμητικά από τις εντολές πριν από τις αγκύλες.

Στο παράδειγμα εδώ
Είναι η γραμμή αυτή: Δείτε πως στην σημείωση τα πέντε διαστήματα ανάμεσα στα εισαγωγικά παραμένουν. Ενώ πριν τα εισαγωγικά τα μονά διαστήματα είναι κανονικά διαστήματα!

Γενική Εσοχή_Παραγράφου$=Επαν$(" ",5) ' απλά φαίνεται ο αριθμός ενώ και αυτό "     " θα ήταν οκ

Ο διορθωτής έχει δυο σετ χρωμάτων ανάλογα με το φόντο. Για να πάρουμε λοιπόν το κατάλληλο για το Word που έχει άσπρο φόντο θα πρέπει να έχουμε φωτεινό φόντο:

Οθόνη 15 : Πένα 1

ή και Πένα 0 για μαύρο αλλά πάει μάλλον το μπλέ σκούρο - πένα 1


2. Μια άλλη προσθήκη που έκανα χθες είναι για την άδεια χρήσης αντικειμένων στα windows.
Στις εργασίες με ΣΤΟΚ είχα δώσει στο τέλος της ανάρτησης ένα πρόγραμμα που άνοιγε το διάλογο "άνοιγμα αρχείου" των windows με χρήση του MSComDlg.CommonDialog
Δείτε τώρα ποιο είναι το ζήτημα. Όταν έχει κανείς τη Visual  Basic 6 τότε μπορεί να το χρησιμοποιήσει χωρίς να χρειάζεται άδεια, επειδή η γλώσσα την γνωρίζει, είναι ένας μεγάλος αριθμός με παύλες που λέγεται UUID ένας μοναδικός αριθμός που όσο και να προσπαθήσουμε ούτε σε εκατό αιώνες δεν θα βγάλουμε στην τύχη τον ίδιο (λέμε τώρα). 
Λέει λοιπόν η εταιρεία που σου παρέχει τη γλώσσα: Μπορείς να χρησιμοποιήσεις την άδεια, να την έχεις γραμμένη στο πρόγραμμά σου αλλά δεν θα την δημοσιοποιήσεις, με συνέπεια να μην μπορείς αν την χρησιμοποιείς να κάνεις το απλό πράγμα να έχεις ένα πρόγραμμα ως ανοικτό κώδικα. Για το λόγο αυτό η Μ2000 δεν χρησιμοποιεί αντικείμενα όπως το παραπάνω. Όμως αν θέλει ο χρήστης της Μ2000 μπορεί να τα χρησιμοποιήσει. Αρκεί να έχει την άδεια (τον αριθμό UUID δηλαδή). Διότι το πρόβλημα βρίσκεται μεταξύ του χρήστη της VB και του παρόχου της VB που είναι η παραγωγός εταιρεία. Ο χρήστης της Μ2000 δεν δουλεύει πάνω στην VB αλλά στη Μ2000 άρα μπορεί να κάνει ότι θέλει! Μάλιστα για να αποφύγει και αυτό η παραγωγός εταιρεία έχει ένα όρο στη άδεια χρήσης της VB6 που λέει ότι όλα τα μη διαθέσιμα για τους πάντες αντικείμενα (αυτά που λέγονται ως μη επαναδιανομής), πρέπει να χρησιμοποιούνται κάπως και όχι να αποδίδονται στην ολότητά τους. Έτσι αν κάποιος έφτιαχνε αυτό που λέμε wrapper θα είχε ένα αντικείμενο που από μέσα θα είχε ένα άλλο αντικείμενο, αυτό που δεν θέλει η εταιρεία να το "χαρίσει" (γιατί έτσι δεν θα αγόραζαν την VB6, θα έχανε). Αυτό δεν το αφήνει. Σου λέει λοιπόν, βάλτο για να πάρεις εσύ το κέρδος από αυτό, στη περίπτωσή μας να βρούμε ένα αρχείο και να το ανοίξουμε.  
Στη Μ2000 μπορούμε να χρησιμοποιήσουμε τη δική της φόρμα διαλόγου για άνοιγμα αρχείου ή εικόνας (έχει προεπισκόπηση), αλλά μια και είναι εκπαιδευτική σκέφτηκα ότι δεν χαλάω καμία συμφωνία αφού με τη Μ2000 δεν παρέχω καμία άδεια! Παρέχω όμως το τρόπο αν θέλει κανείς να βάλει άδεια, όχι ειδικά για τα αντικείμενα της Microsoft αλλά πιθανόν για δικά του (είναι αντικείμενα COM τα οποία μπορεί κανείς να φτιάξει με άλλες γλώσσες, όπως C, C++ αλλά και μεVB6). Δεν μπορεί να φτιάξει όμως με Μ2000, αφού η Μ2000 είναι διερμηνευτής, δεν βγάζει κάποιο πρόγραμμα (δεν είναι compiler) μόνο τρέχει προγράμματα που είναι κείμενα.
Η παρακάτω εντολή μας δείχνει την άδεια αν υπάρχει
Τύπωσε ΒΑΛΕ.ΑΔΕΙΑ$("MSComDlg.CommonDialog")

Οπότε η πρώτη γραμμή μπορεί να γίνει έτσι, παρέχουμε την άδεια και κοιτάμε αν υπάρχει το αντικείμενο (οφείλουμε να κάνουμε διαγραφή πριν ξανακάνουμε έλεγχο για άδεια, αλλιώς πρέπει να χρησιμοποιήσουμε την απλή μορφή χωρίς την άδεια την δεύτερη φορά)

Δυστυχώς δεν ισχύουν τα παραπάνω για όλα τα αντικείμενα. Μάλιστα δεν ισχύει γι΄αυτό που παρουσιάζω (το δοκίμασα σε υπολογιστή που δεν είχε κάποια γλώσσα της Microsoft, άρα δεν ήταν ξεκλειδωμένο για χρήση από οποιοδήποτε πρόγραμμα). Εδώ η άδεια παίζει σωστά επειδή υπάρχει η "μεγάλη" άδεια. Δείτε εδώ

ΑΝ ΒΑΛΕ.ΑΔΕΙΑ$("MSComDlg.CommonDialog","28C4C820-401A-101B-A3C9-08002B2F49FB")<>"" ΤΟΤΕ {
.............................

      ΔΙΑΓΡΑΦΗ ΑΔΕΙΑΣ "MSComDlg.CommonDialog"

}


Μια σύντομη "αναφορά" είναι με αυτή την παραλαγή, όπου η άδεια μπαίνει, δημιουργούμε το αντικείμενο και διαγράφεται αμέσως μετά (σε μια έντολή).
            Όρισε MsComDlg  "MSComDlg.CommonDialog",,"28C4C820-401A-101B-A3C9-08002B2F49FB"

Υπάρχουν άλλα αντικείμενα που δουλεύουν χωρίς ειδική άδεια, ούτε απλή!

Το hwnd είναι ο window handler, ένα νούμερο που δηλώνει τη φόρμα πάνω στην οποία θέλουμε να βγαίνει η φόρμα. μπορούμε να αφήσουμε το 0.

Function BrowseForFile$ {
    Declare shell "Shell.Application"
    try {
    Method shell "BrowseForFolder", hwnd, "Choose a file:", 0x1000 as file
    Declare file.self use file, "self"
    try {
          with file.self, "Path" as file.self.path$
          if right$(" "+file.self.path$,1)<>"\" then {
                = file.self.path$+"\"    
          } else {
                = file.self.path$
          }
    }
    declare file.self nothing
    declare file nothing
    }
    declare shell Nothing
}
Print BrowseForFile$()



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

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

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