Προγραμματισμός με εξαρτήματα, μεταγλώττιση και εγκατάσταση
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Προγραμματισμός με εξαρτήματα
Πολλές γλώσσες προσφέρουν τη δυνατότητα προγραμματισμού με έτοιμα εξαρτήματα.
Στη Visual Basic μπορούμε να χρησιμοποιησούμε δύο είδη εξαρτημάτων:
- Εξαρτήματα ActiveX τα οποία εμφανίζονται στην εργαλειοθήκη και τα οποία
μπορούμε να τοποθετήσουμε σε φόρμες.
Για τα εξαρτήματα αυτά μπορούμε να ορίσουμε τις ιδιότητές τους από το
αντίστοιχο παράθυρο.
Παραδείγματα τέτοιων εξαρτημάτων είναι τα:
- Calendar
- Chart
- Common Dialog
- Flex Grid
- Outline
- Multimedia
- Internet
- Rich Textbox
- Tabbed Dialog
- Media Player
Τα εξαρτήματα αυτά ορίζονται στην επιλογή Project - Components
- Συλλογές αντικειμένων
(βιβλιοθήκες (libraries)
στα οποία έχουμε πρόσβαση μέσα από τον κώδικα της εφαρμογής.
Μπορούμε να ορίσουμε μεταβλητές που να αντιστοιχούν στα αντικείμενα αυτά
και μέσω αυτών να έχουμε πρόσβαση σε άλλες σύνθετες εφαρμογές.
Παραδείγματα τέτοιων αντικειμένων είναι τα:
- Microsoft Excel
- Corel Draw
- Microsoft DAO (Data Access Objects)
- Microsoft Word
- Real Player
- Microsoft Media Player
Τα εξαρτήματα αυτά ορίζονται στην επιλογή 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) επιτρέπει την εύκολη
πρόσβαση σε πολυμέσα.
Το όργανο εμφανίζεται με την παρακάτω μορφή:
Για να χρησιμοποιήσουμε το όργανο αυτό ακολουθούμε τα παρακάτω
βήματα:
-
Καθορίζουμε το είδος της συσκευής με την οποία θέλουμε να μιλήσουμε.
Αυτό γίνεται με ανάθεση στην ιδιότητα DeviceType η οποία υποστηρίζει τις
ακόλουθες συσκευές:
- AVIVideo
- CDAudio
- DAT
- DigitalVideo
- MMMovie
- Other
- Overlay
- Scanner
- Sequencer
- VCR
- Videodisc
- WaveAudio
-
Kαθορίζουμε το όνομα του αρχείου που θέλουμε να γράψουμε ή να
διαβάσουμε στην ιδιότητα FileName.
- Καθορίζομε άλλες ιδιότητες που έχουν να κάνουν με τον τρόπο
εγγραφής ή αναπαραγωγής όπως Notify, Wait, Shareable.
- Θέτουμε στην ιδιότητα Command την εντολή που θέλουμε να εκτελεστεί.
Υποστηρίζονται οι παρακάτω εντολές:
Command | Description |
Open | Opens a device using the MCI_OPEN command. |
Close | Closes a device using the MCI_CLOSE command. |
Play | Plays a device using the MCI_PLAY command. |
Pause | Pauses 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. |
Stop | Stops playing or recording using the MCI_STOP command. |
Back | Steps backward using the MCI_STEP command. |
Step | Steps forward using the MCI_STEP command. |
Prev | Goes 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. |
Next | Goes to the beginning of the next track (if at last track, goes to beginning of last track) using the Seek command. |
Seek | If not playing, seeks a position using the MCI_SEEK command. If playing, continues playing from the given position using the MCI_PLAY command. |
Record | Records using the MCI_RECORD command. |
Eject | Ejects media using the MCI_SET command. |
Sound | Plays a sound using the MCI_SOUND command. |
Save | Saves an open file using the MCI_SAVE command. |
- Μπορούμε τέλος να επιτρέψουμε στο χρήστη να χρησιμοποιήσει τα πλήκτρα
ελέγχου ή να προσθέσουμε δικό μας κώδικα σε κάθε πλήκτρο.
Κάθε πλήκτρο έχει μια καθορισμένη λειτουργία ή μπορεί να καλέσει και μια
συνάρτηση με βάση το όνομα του πλήκτρου.
Τα πλήκτρα έχουν τα παρακάτω ονόματα:
- Prev
- Next
- Play
- Pause
- Back
- Step
- Stop
- Record
- Eject
Αντίστοιχα μπορούμε να ενεργοποιήσουμε ή να απενεργοποιήσουμε συγκεκριμένα
πλήκτρα ανάλογα με την εφαρμογή μας.
Παράδειγμα (αφού προσθέσουμε ένα όργανο με όνομα 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).
Το όργανο εμφανίζεται με την παρακάτω μορφή:
Για να χρησιμοποιήσουμε το όργανο αυτό ακολουθούμε τα παρακάτω βήματα:
- Θέτουμε την ιδιότητα chartType σύμφωνα με το είδος του γραφήματος
που θέλουμε να σχεδιάσουμε.
Υποστηρίζονται οι παρακάτω σταθερές για τους αντίστοιχους τύπους γραφημάτων:
Constant | Description |
VtChChartType3dBar | 3D Bar |
VtChChartType2dBar | 2D Bar |
VtChChartType3dLine | 3D Line |
VtChChartType2dLine | 2D Line |
VtChChartType3dArea | 3D Area |
VtChChartType2dArea | 2D Area |
VtChChartType3dStep | 3D Step |
VtChChartType2dStep | 2D Step |
VtChChartType3dCombination | 3D Combination |
VtChChartType2dCombination | 2D Combination |
VtChChartType2dPie | 2D Pie |
VtChChartType2dXY | 2D XY |
- Θέτουμε την ιδιότητα columnCount στον αριθμό στηλών των δεδομένων που θέλουμε να εμφανίσουμε.
- Θέτουμε την ιδιότητα rowCount στον αριθμό στηλών των δεδομένων που θέλουμε να εμφανίσουμε.
- Για κάθε τιμή που περιέχεται στο γράφημα θέτουμε τις ιδιότητες
Row και Column στις συντεταγμένες της αντίστοιχης τιμής και στη
συνέχεια την ιδιότητα Data στην τιμή που αντιστοιχεί στις συντεταγμένες εκείνες.
- Θέτουμε άλλες ιδιότητες για να αλλάξουμε τον τρόπο εμφάνισης του
γραφήματος.
Μερικές από τις ιδιότητες αυτές είναι οι AllowDithering,
BorderStyle, Chart3d, Backdrop, ColumnLabel, Legend, Stacking, TitleText.
- Μερικές φορές για να αυξήσουμε την ταχύτητα του εμφάνισης των στοιχείων
κάνουμε το όργανο αρχικά αόρατο με την ιδιότητα Visible και το εμφανίζουμε μόνο
όταν θέσουμε τιμές σε όλα τα στοιχεία.
- Μπορούμε να μεταφέρουμε δεδομένα από ένα τμήμα του γραφήματος σε άλλο
με τις μεθόδους SelectPart, EditCopy, EditPaste.
- Μπορούμε να συνδέσουμε ένα γράφημα με δεδομένα σε έναν πίνακα ή
σε μια βάση δεδομένων με την ιδιότητα DataGrid.
Παράδειγμα (αφού προσθέσουμε ένα όργανο με όνομα 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 ακολουθούμε την παρακάτω διαδικασία:
- Συσχετίζουμε το αρχείο με έναν ακέραιο αριθμό με τον οποίο θα αναφερόμαστε
στο αρχείο αυτό με την εντολή open
open "names.txt" for output as #1
- Γράφουμε στο αρχείο με την εντολή print # αν το αρχείο θα διαβαστεί
από ανθρώπους
print #1, Name, Number
- Γράφουμε στο αρχείο με την εντολή write # αν το αρχείο θα διαβαστεί
από άλλο πρόγραμμα
write #1, Name, Number
- Όταν γράψουμε όλα τα στοιχεία που θέλουμε στο αρχείο, διακόπτουμε το
συσχετισμό με την εντολή close
close #1
Παράδειγμα:
open "numbers.txt" for output as #1
for i = 1 to 10
write #1, i, string(i, ".")
next i
close #1
Για να διαβάσουμε αρχεία με κείμενο ακολουθούμε την παρακάτω διαδικασία:
- Συσχετίζουμε το αρχείο με έναν ακέραιο αριθμό με τον οποίο θα αναφερόμαστε
στο αρχείο αυτό με την εντολή open
open "names.txt" for input as #1
- Διαβάζουμε από το αρχείο με την εντολή input #
input #1, Name, Number
- Ελέγχουμε αν το αρχείο έχει άλλα στοιχεία με τη συνάρτηση eof
- Όταν διαβάσουμε όλα τα στοιχεία που θέλουμε στο αρχείο, διακόπτουμε το
συσχετισμό με την εντολή 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
- Σε μεγάλα προγράμματα μπορούμε να αφήνουμε το σύστημα να βρίσκει
ακέραιους αριθμούς με την εντολή FreeFile της οποίας το αποτέλεσμα αναθέτουμε
σε μια μεταβλητή.
- Αντί για output μπορούμε να ανοίξουμε ένα αρχείο σε τρόπο εγγραφής
append για να προσθέσουμε στοιχεία σε ένα υπάρχον αρχείο.
- Κάθε εγγραφή (record) παράγει μια νέα γραμμή.
Αν θέλουμε να ετοιμάσουμε την εγγραφή με πολλαπλά print μπορούμε να
τερματίσουμε το print με , για να ακολουθήσει
άλλο πεδίο (field) ή με ; για να συνεχίσει το προηγούμενο
πεδίο.
Πρόσβαση σε δυαδικά αρχεία
Εκτός από τη μορφή κειμένου μπορούμε να αποθηκεύσουμε στοιχεία και στη
μορφή που φυλάσσονται στη μνήμη του υπολογιστή.
Τα πλεονεκτήματα του τρόπου αυτού φύλαξης είναι:
- Ακρίβεια μια και δε μετατρέπονται τα στοιχεία από και σε κείμενο.
- Ταχύτητα.
- Εναλλαγή εγγραφής και ανάγνωσης στο ίδιο αρχείο.
- Τυχαία προσπέλαση (random access) στις
εγγραφές.
Η δομή των δυαδικών αρχείων ορίζεται τυπικά με έναν τύπο οριζόμενο από το
χρήστη, ενώ πρόσβαση στα στοιχεία έχουμε με τις εντολές 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
- Το δεύτερο όρισμα των Get/Put είναι ο αριθμός της εγγραφής.
Αν αυτό παραληφθεί οι εγραφές διαβάζονται και γράφονται σειριακά.
- Μπορούμε να ανακτήσουμε και να θέσουμε τη θέση ανάγνωσης
ή εγγραφής αρχείου με τη συνάρτηση / εντολή seek.
Χειρισμός λαθών
- Μερικές φορές θέλουμε να αποφύγουμε ο κώδικας που γράφουμε να διακόπτεται
από λάθη.
- Για το σκοπό αυτό μπορούμε να απενεργοποιήσουμε τον έλεγχο λαθών με την
εντολή on error resume next και να ελέγχουμε να λάθη μετά από κάθε εντολή
που μπορεί να τα δημιουργήσει με βάση τη μεταβλητή err.
- Όταν ολοκληρώσουμε το τμήμα του κώδικα που θέλουμε να ελέγχουμε τα λάθη
επαναφέρουμε τον τρόπο ελέγχου με την εντολή on error goto 0.
Παράδειγμα:
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
Μεταγλώττιση
- Η μεταγλώττιση του προγράμματος μας επιτρέπει την εκτέλεσή του έξω από
το περιβάλλον της Visual Basic.
- Κατά τη μεταγλώττιση δημιουργείται ένα αρχείο με το
επίθεμα (extension) .exe το οποίο μπορούμε να εκτελέσουμε
αυτόματα από το περιβάλλον των Windows.
- Για να δημιουργήσουμε το αρχείο αυτό εκτελούμε την εντολή "File - Make .exe".
- Η μεταγλώττιση του προγράμματος μπορεί να αυξήσει την ταχύτητα
εκτέλεσης και δεν επιτρέπει σε τρίτους να έχουν πρόσβαση στον πλήρη
πηγαίο κώδικα της εφαρμογής μας.
- Προσοχή: η μεταγλωττισμένη εφαρμογή μπορεί να εκτελεστεί μόνο
σε υπολογιστές που έχουν εγκαταστημένα τα βοηθητικά αρχεία της
Visual Basic (ως Visual Basic ή με την εγκατάσταση κάποιας άλλης εφαρμογής).
Εγκατάσταση προγραμμάτων
- Η διαδικασία δημιουργίας εγκατάστασης ενός προγράμματος μας
επιτρέπει την εύκολη διανομή του σε τρίτους σε έναν αποθηκευτικό
φορέα ή μέσα από το δίκτυο.
- Η διαδικασία αυτή γίνεται (αφού αποθηκεύσουμε το πρόγραμμά μας)
μέσα από την ξεχωριστή εφαρμογή Application Setup Wizard.
Άσκηση
Προγραμματισμός με εξαρτήματα
- Να προσθέσετε στο πρόγραμμα υπολογισμού της συνολικής απόδοσης
τη δυνατότητα δημιουργίας αναφοράς σε κείμενο του Word ή την απεικόνιση
του κεφαλαίου με βάση το χρόνο σε μορφή γραφήματος.
- Δημιουργήστε πρόγραμμα εγκατάστασης για την εφαρμογή σας.
Βιβλιογραφία
- David Boctor.
Microsoft Office 2000 Visual Basic Fundamentals.
Microsoft Press, Redmond, WA, USA, 1999.
- Desmond Francis
D' Souza and Alan Cameron Wills.
Objects, Components, and Frameworks With UML : The Catalysis
Approach.
Addison-Wesley, 1998.
- Scott M. Lewandowski.
Frameworks for component-based client/server computing.
ACM Computing Surveys, 30(1):3–27, March 1998.
- Peter M. Maurer.
Components: What if they gave a revolution and nobody came.
IEEE Software, 33(6):28–34, June 2000.
- Oscar Nierstrasz,
Simon Gibbs, and Dennis Tsichritzis.
Component-oriented software development.
Communications of the ACM, 35(9):160–165, September 1992.
- Diomidis Spinellis
and Konstantinos Raptis.
Component mining: A process and its pattern language (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/2000-IST-Components/html/comp.html).
Information and Software Technology, 42(9):609–617, June 2000.
- Diomidis Spinellis.
Explore, excogitate, exploit: Component mining (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/1999-Computer-Components/html/comp.html).
IEEE Computer, 32(9):114–116, September 1999.
- Clemens Szyperski.
Component Software: Behind Object-Oriented Programming.
Addison-Wesley, 1998.
- Jeffrey M. Voas.
The challenges of using COTS software in component-based development.
Computer, 31(6):44–45, June 1998.
- Alan Cameron Wills.
Designing component
kits and architectures.
In L. Barroca, J. Hall, and P. Hall, editors, Software Architectures:
Advances and Applications. Springer Verlag, 1999.