Προγραμματισμός με εξαρτήματα, μεταγλώττιση και εγκατάσταση

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Προγραμματισμός με εξαρτήματα

Πολλές γλώσσες προσφέρουν τη δυνατότητα προγραμματισμού με έτοιμα εξαρτήματα. Στη Visual Basic μπορούμε να χρησιμοποιησούμε δύο είδη εξαρτημάτων:
  1. Εξαρτήματα ActiveX τα οποία εμφανίζονται στην εργαλειοθήκη και τα οποία μπορούμε να τοποθετήσουμε σε φόρμες.

    Για τα εξαρτήματα αυτά μπορούμε να ορίσουμε τις ιδιότητές τους από το αντίστοιχο παράθυρο. Παραδείγματα τέτοιων εξαρτημάτων είναι τα:

    Τα εξαρτήματα αυτά ορίζονται στην επιλογή Project - Components

  2. Συλλογές αντικειμένων (βιβλιοθήκες (libraries) στα οποία έχουμε πρόσβαση μέσα από τον κώδικα της εφαρμογής. Μπορούμε να ορίσουμε μεταβλητές που να αντιστοιχούν στα αντικείμενα αυτά και μέσω αυτών να έχουμε πρόσβαση σε άλλες σύνθετες εφαρμογές. Παραδείγματα τέτοιων αντικειμένων είναι τα: Τα εξαρτήματα αυτά ορίζονται στην επιλογή Project - References

Πρόσβαση σε πολυμέσα

Το πρότυπο επικοινωνίας MCI (Media Control Interface) καθορίζει μια σειρά από εντολές που υποστηρίζονται από συσκευές multimedia για την επικοινωνία τους με το λογισμικό εφαρμογών. Έτσι όπως το BIOS (Basic Input Output System) των προσωπικών υπολογιστών παρέχει μία τυποποιημένη δυνατότητα ελέγχου της οθόνης, του δίσκου και του πληκτρολογίου μέσω των αντίστοιχων κλήσεων σε συναρτήσεις εξυπηρέτησης διακοπών (interrupt service function), έτσι και το πρότυπο MCI παρέχει την τυποποιημένη δυνατότητα ελέγχου περιφερειακών συσκευών multimedia. Για την επίτευξη όσο το δυνατό μεγαλύτερης συμβατότητας με πολλά περιβάλλοντα προγραμματισμού οι κλήσεις στον οδηγό MCI δεν είναι απαραίτητα συνδεδεμένες με κάποια συγκεκριμένη γλώσσα προγραμματισμού όπως η Visual Basic ή η C, αλλά αποτελούνται από απλές συμβολοσειρές με τις οποίες τα Windows επικοινωνούν με την αντίστοιχη συσκευή.

Στη Visual Basic το όργανο Microsoft Multimedia Control (το προσθέτουμε από την επιλογή Project - Components) επιτρέπει την εύκολη πρόσβαση σε πολυμέσα. Το όργανο εμφανίζεται με την παρακάτω μορφή:

Για να χρησιμοποιήσουμε το όργανο αυτό ακολουθούμε τα παρακάτω βήματα:

  1. Καθορίζουμε το είδος της συσκευής με την οποία θέλουμε να μιλήσουμε. Αυτό γίνεται με ανάθεση στην ιδιότητα DeviceType η οποία υποστηρίζει τις ακόλουθες συσκευές:
  2. Kαθορίζουμε το όνομα του αρχείου που θέλουμε να γράψουμε ή να διαβάσουμε στην ιδιότητα FileName.
  3. Καθορίζομε άλλες ιδιότητες που έχουν να κάνουν με τον τρόπο εγγραφής ή αναπαραγωγής όπως Notify, Wait, Shareable.
  4. Θέτουμε στην ιδιότητα Command την εντολή που θέλουμε να εκτελεστεί. Υποστηρίζονται οι παρακάτω εντολές:
    CommandDescription
    OpenOpens a device using the MCI_OPEN command.
    CloseCloses a device using the MCI_CLOSE command.
    PlayPlays a device using the MCI_PLAY command.
    PausePauses playing or recording using the MCI_PLAY command. If executed while the device is paused, tries to resume playing or recording using the MCI_RESUME command.
    StopStops playing or recording using the MCI_STOP command.
    BackSteps backward using the MCI_STEP command.
    StepSteps forward using the MCI_STEP command.
    PrevGoes to the beginning of the current track using the Seek command. If executed within three seconds of the previous Prev command, goes to the beginning of the previous track or to the beginning of the first track if at the first track.
    NextGoes to the beginning of the next track (if at last track, goes to beginning of last track) using the Seek command.
    SeekIf not playing, seeks a position using the MCI_SEEK command. If playing, continues playing from the given position using the MCI_PLAY command.
    RecordRecords using the MCI_RECORD command.
    EjectEjects media using the MCI_SET command.
    SoundPlays a sound using the MCI_SOUND command.
    SaveSaves an open file using the MCI_SAVE command.
  5. Μπορούμε τέλος να επιτρέψουμε στο χρήστη να χρησιμοποιήσει τα πλήκτρα ελέγχου ή να προσθέσουμε δικό μας κώδικα σε κάθε πλήκτρο. Κάθε πλήκτρο έχει μια καθορισμένη λειτουργία ή μπορεί να καλέσει και μια συνάρτηση με βάση το όνομα του πλήκτρου. Τα πλήκτρα έχουν τα παρακάτω ονόματα: Αντίστοιχα μπορούμε να ενεργοποιήσουμε ή να απενεργοποιήσουμε συγκεκριμένα πλήκτρα ανάλογα με την εφαρμογή μας.
Παράδειγμα (αφού προσθέσουμε ένα όργανο με όνομα mcictrl):
Private Sub Form_Load()
    mcictrl.Notify = False
    mcictrl.Shareable = False
    mcictrl.DeviceType = "AVIVideo"
    mcictrl.filename = "C:\Program Files\Microsoft Office\Clipart\MMedia\globe.AVI"
    mcictrl.Command = "Open"
    mcictrl.Wait = True
    mcictrl.Command = "Play"
    mcictrl.Command = "Close"
    mcictrl.filename = "C:\Program Files\Microsoft Office\Clipart\MMedia\sonata8.wav"
    mcictrl.Command = "Open"
    mcictrl.Wait = True
    mcictrl.Command = "Play"
    mcictrl.Wait = True
    mcictrl.Command = "Close"
End Sub

Γραφικές παραστάσεις

Η σχεδίαση τυποποιημένων γραφικών παραστάσεων από αριθμητικά δεδομένα γίνεται στη Visual Basic το όργανο Chart (το προσθέτουμε ως Microsoft Chart Control από την επιλογή Project - Components). Το όργανο εμφανίζεται με την παρακάτω μορφή:

Για να χρησιμοποιήσουμε το όργανο αυτό ακολουθούμε τα παρακάτω βήματα:

  1. Θέτουμε την ιδιότητα chartType σύμφωνα με το είδος του γραφήματος που θέλουμε να σχεδιάσουμε. Υποστηρίζονται οι παρακάτω σταθερές για τους αντίστοιχους τύπους γραφημάτων:
    ConstantDescription
    VtChChartType3dBar3D Bar
    VtChChartType2dBar2D Bar
    VtChChartType3dLine3D Line
    VtChChartType2dLine2D Line
    VtChChartType3dArea3D Area
    VtChChartType2dArea2D Area
    VtChChartType3dStep3D Step
    VtChChartType2dStep2D Step
    VtChChartType3dCombination3D Combination
    VtChChartType2dCombination2D Combination
    VtChChartType2dPie2D Pie
    VtChChartType2dXY2D XY
  2. Θέτουμε την ιδιότητα columnCount στον αριθμό στηλών των δεδομένων που θέλουμε να εμφανίσουμε.
  3. Θέτουμε την ιδιότητα rowCount στον αριθμό στηλών των δεδομένων που θέλουμε να εμφανίσουμε.
  4. Για κάθε τιμή που περιέχεται στο γράφημα θέτουμε τις ιδιότητες Row και Column στις συντεταγμένες της αντίστοιχης τιμής και στη συνέχεια την ιδιότητα Data στην τιμή που αντιστοιχεί στις συντεταγμένες εκείνες.
  5. Θέτουμε άλλες ιδιότητες για να αλλάξουμε τον τρόπο εμφάνισης του γραφήματος. Μερικές από τις ιδιότητες αυτές είναι οι AllowDithering, BorderStyle, Chart3d, Backdrop, ColumnLabel, Legend, Stacking, TitleText.
Παράδειγμα (αφού προσθέσουμε ένα όργανο με όνομα MSChart1):
Private Sub Command1_Click()
With Form1.MSChart1
        ' Displays a 3d chart with 8 columns and 8 rows
        .chartType = VtChChartType3dArea
        .ColumnCount = 8
        .ShowLegend = False
        .RowCount = 8
        For Column = 1 To 8
            For Row = 1 To 8
                .Column = Column
                .Row = Row
                .Data = Row * 10 + Column * 3 + Rnd * 40
            Next Row
        Next Column
    End With
End Sub
Εμφανίζει το παρακάτω γράφημα:

Πρόσβαση σε αρχεία κειμένου

Για να δημιουργήσουμε ένα αρχείο (file) με κείμενο από τη Visual Basic ακολουθούμε την παρακάτω διαδικασία:
  1. Συσχετίζουμε το αρχείο με έναν ακέραιο αριθμό με τον οποίο θα αναφερόμαστε στο αρχείο αυτό με την εντολή open
    open "names.txt" for output as #1
    
  2. Όταν γράψουμε όλα τα στοιχεία που θέλουμε στο αρχείο, διακόπτουμε το συσχετισμό με την εντολή close
    close #1
    
Παράδειγμα:
open "numbers.txt" for output as #1
for i = 1 to 10
	write #1, i, string(i, ".")
next i
close #1
Για να διαβάσουμε αρχεία με κείμενο ακολουθούμε την παρακάτω διαδικασία:
  1. Συσχετίζουμε το αρχείο με έναν ακέραιο αριθμό με τον οποίο θα αναφερόμαστε στο αρχείο αυτό με την εντολή open
    open "names.txt" for input as #1
    
  2. Διαβάζουμε από το αρχείο με την εντολή input #
    input #1, Name, Number
    
  3. Ελέγχουμε αν το αρχείο έχει άλλα στοιχεία με τη συνάρτηση eof
  4. Όταν διαβάσουμε όλα τα στοιχεία που θέλουμε στο αρχείο, διακόπτουμε το συσχετισμό με την εντολή close
    close #1
    
Παράδειγμα:
open "numbers.txt" for input as #1
do while not eof(1)
	input #1, num, s
	msgbox str(num) + s
loop
close #1

Πρόσβαση σε δυαδικά αρχεία

Εκτός από τη μορφή κειμένου μπορούμε να αποθηκεύσουμε στοιχεία και στη μορφή που φυλάσσονται στη μνήμη του υπολογιστή. Τα πλεονεκτήματα του τρόπου αυτού φύλαξης είναι: Η δομή των δυαδικών αρχείων ορίζεται τυπικά με έναν τύπο οριζόμενο από το χρήστη, ενώ πρόσβαση στα στοιχεία έχουμε με τις εντολές Get και Put. Παράδειγμα:
Type Record
	ID As Integer
	Name As String * 20
End Type

Dim MyRecord As Record
Open "TESTFILE.dat" For Random As #1 Len = Len(MyRecord)
Put #1, 5, MyRecord
Get #1, 5, MyRecord
Close #1

Χειρισμός λαθών

Παράδειγμα:
on error resume next
open "names.txt" for input as #1
if err <> 0 then
	msgbox "names.txt: " + err.description
	exit sub
end if
on error goto 0

Σύνδεση με άλλες εφαρμογές

Η Visual Basic επιτρέπει τη σύνδεση του προγράμματός μας με άλλες εφαρμογές όπως το Word και το Excel. Με τον τρόπο αυτό μπορούμε να διαβάσουμε ή να δημιουργήσουμε σύνθετα έγγραφα ή να έχουμε πρόσβαση σε δυνατότητες των προγραμμάτων αυτών (π.χ στον έλεγχο ορθογραφίας).

Βασικό στοιχείο για τον έλεγχο της εφαρμογής είναι να ενεργοποιήσουμε στο πρόγραμμά μας την αντίστοιχη βιβλιοθήκη αντικειμένων από την επιλογή Project - References. Τεκμηρίωση για κάθε βιβλιοθήκη αντικειμένων βρίσκουμε συχνά αν τοποθετήσουμε το δρομέα πάνω στη βασική λέξη της βιβλιοθήκης μέσα στο πρόγραμμά μας (π.χ. Word, ή Excel) και ζητήσουμε βοήθεια με το πλήκτρο F1.

Σύνδεση με το Excel

Η σύνδεση με το Excel μας επιτρέπει να δημιουργήσουμε αυτόματα φύλλα εργασίας ή να διαβάσουμε υπάρχοντα. Η πρόσβαση στο Excel γίνεται μέσα από το αντικείμενο Excel.Application και τις κλάσεις που το αποτελούν. Ο παρακάτω πίνακας των βασικών κλάσεων προέρχεται από την τεκμηρίωση που παρέχει η Microsoft:

Στο παράδειγμα που ακολουθεί δημιουργούμε ένα νέο φύλλο εργασίας, γεμίζουμε ορισμένα κελιά από έναν πίνακα και άλλα με τυχαίες τιμές και δημιουργούμε ένα γράφημα από τις τιμές αυτές.

Sub main()
    Dim xl As Excel.Application
    Dim ws As Excel.Worksheet
    Dim wb As Excel.Workbook
    Dim regions(4, 1) As String
    
    regions(0, 0) = "Europe"
    regions(1, 0) = "Americas"
    regions(2, 0) = "Asia"
    regions(3, 0) = "Africa"
    
    
    Set xl = New Excel.Application
    xl.Visible = True
    Set wb = xl.Workbooks.Add
    Set ws = wb.Worksheets(1)
    
    ws.Range("A2:A5") = regions
    For i = 2 To 5
        ws.Range("B" & Format(i)).Value = i * 110 * Rnd
    Next i
    
    Dim chart As Excel.chart
    Dim rn As Range
    
    Set rn = ws.Range("A1:B5")
    
    Set chart = wb.Charts.Add
    chart.ChartWizard rn, xl3DPie, 7, xlColumns, 1, 1, 1, "Sales by area", "Areas", "Sales"
End Sub

Σύνδεση με το Word

Η σύνδεση με το Word μας επιτρέπει να δημιουργήσουμε αυτόματα σύνθετα έγγραφα ή να διαβάσουμε και να επεξεργαστούμε υπάρχοντα. Η πρόσβαση στο Word γίνεται μέσα από το αντικείμενο Word.Application και τις κλάσεις που το αποτελούν. Ο παρακάτω πίνακας των βασικών κλάσεων προέρχεται από την τεκμηρίωση που παρέχει η Microsoft:

Στο παράδειγμα που ακολουθεί δημιουργούμε αυτόματα ένα νέο έγγραφο παραγγελίας:

Sub main()
    Dim wd As Word.Application
    Dim doc As Word.Document
    
    Set wd = New Word.Application
    wd.Visible = True
    Set doc = Word.Documents.Add
    
    ' Insert title date and items
    Dim r As Word.Range
    Set r = doc.Paragraphs(1).Range
    r.InsertAfter ("Replacement Part Order")
    r.InsertParagraphAfter
    r.InsertAfter ("Date:" & Date)
    r.InsertParagraphAfter
    r.InsertAfter ("Please dispatch the following parts:")
    r.InsertParagraphAfter
    r.InsertParagraphAfter
    ' 7 random parts
    For i = 1 To 7
        r.InsertAfter Str(i) + ". Part code " + Format(Int(Rnd * 10000 + 1), "000000") + " qty " + Str(Int(Rnd * 100 + 1))
        r.InsertParagraphAfter
    Next i
    
    r.Paragraphs(1).Alignment = wdAlignParagraphCenter
    
    ' Format title
    Dim pr As Word.Range
    Set r = doc.Paragraphs(1).Range
    Set pr = doc.Range(r.Start, r.End)
    pr.Font.Bold = True
    pr.Font.Size = 14
    pr.Font.Name = "Arial"
End Sub

Μεταγλώττιση

Εγκατάσταση προγραμμάτων

Άσκηση

Προγραμματισμός με εξαρτήματα

  1. Να προσθέσετε στο πρόγραμμα υπολογισμού της συνολικής απόδοσης τη δυνατότητα δημιουργίας αναφοράς σε κείμενο του Word ή την απεικόνιση του κεφαλαίου με βάση το χρόνο σε μορφή γραφήματος.
  2. Δημιουργήστε πρόγραμμα εγκατάστασης για την εφαρμογή σας.

Βιβλιογραφία