Υλοποίηση διεπαφών σε Visual Basic
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Παράθυρα, εικονίδια, μενού, και δείκτης
Στο σύγχρονο περιβάλλον διεπαφής με το χρήστη βασίζεται
στα παράθυρα (windows),
τα εικονίδια (icons),
τα μενού (menus) και
το δείκτη (pointer).
Το περιβάλλον αυτό σχεδιάστηκε για πρώτη φορά στο Palo Alto Research Center
της Xerox (PARC) και υλοποιήθηκε με επιτυχία από την Apple για τους υπολογιστές
Macintosh και από τη Micosoft στην οικογένεια Windows.
Η επιφάνεια εργασίας χρησιμοποιεί ως βάση τη
μεταφορά του γραφείου (desktop metaphor).
Ο χρήστης μετακινεί πάνω στην οθόνη παράθυρα με τη χρήση του δείκτη
όπως θα κινούσε έγγραφα στο γραφείο με τα χέρια του.
Βασικά τεχνολογικά στοιχεία για τη λειτουργία του περιβάλλοντος αυτού
είναι η οθόνη χαρτογραφικής απεικόνισης (bitmap display)
και το ποντίκι (mouse) ή κάποιος άλλος αντίστοιχος μηχανισμός
που επιτρέπει στο χρήστη να δείχνει αντικείμενα στην οθόνη.
Με τη χρήση εικονιδίων ορισμένα στοιχεία του περιβάλλοντος μπορούν να
παρασταθούν με αμεσότητα, ενώ τα μενού κάνουν τις λειτουργίες του περιβάλλοντος
προσιτές χωρίς να χρειάζεται ο χρήστης να απομνημονεύει εντολές και τη σύνταξή
τους.
Εικονίδια στο περιβάλλον Windows
Εισαγωγή εικόνας στο κείμενο με τη χρήση μενού στο πρόγραμμα Microsoft Word
<img src="inspic.gif">
Εισαγωγή εικόνας στο κείμενο στη γλώσσα HTML
Εσωτερική δομή
Εσωτερικά τα συστήματα γραφικής διεπαφής που βασίζονται σε παράθυρα
λειτουργούν με βάση γεγονότα (events) τα οποία
στέλνονται στις εφαρμογές.
Το κάθε παράθυρο είναι μια (τυπικά ορθογώνια)
περιοχή της οθόνης η οποία σχεδιάζεται αυτόνομα
και λαμβάνει γεγονότα.
Κάθε εφαρμογή μπορεί να απαρτίζεται από ένα ή περισσότερα παράθυρα.
Γεγονότα μπορεί να είναι π.χ. η επιλογή μιας εντολής από το μενού,
η αλλαγή του κειμένου που γράφει ο χρήστης,
το πάτημα ενός πλήκτρου,
η κίνηση του ποντικιού ή,
η αλλαγή της ώρας.
Τα γεγονότα μπορεί να δημιουργούνται άμεσα από το χρήστη ή να συνθέτονται
από το σύστημα ως αποτέλεσμα εντολών του χρήστη, ή άλλων εξωτερικών διεπαφών.
Το κάθε γεγονός στέλνεται σε μια ή περισσότερες εφαρμογές.
Οι εφαρμογές με τη σειρά τους στέλνουν τα γεγονότα στα παράθυρα που
μπορούν να τα επεξεργαστούν.
Έτσι, αντί η εφαρμογή να ζητά στοιχεία από το χρήστη, τα στοιχεία από το χρήστη
στέλνονται ως γεγονότα στην εφαρμογή.
Στο περιβάλλον των Windows ορίζονται πάνω από 800 διαφορετικά γεγονότα.
Για την επιβολή συνέπειας στη διεπαφή με το χρήστη αλλά και
τη διευκόλυνση υλοποίησης των εφαρμογών τα παραθυρικά περιβάλλοντα ορίζουν
μια σειρά από όργανα (controls) (ή widgets) τα
οποία ενσωματώνουν και διαθέτουν ένα σύνολο από λειτουργίες που είναι
συχνά χρήσιμες.
Παραδείγματα τέτοιων οργάνων είναι
το πλαίσιο εισαγωγής κειμένου (edit box),
το πιεζόμενο κουμπί (push button) και
το πλαίσιο επιλογής αρχείου.
Η μεταφορά των γεγονότων από το σύστημα στις εφαρμογές και τα παράθυρά
τους βασίζεται συχνά στην κληρονομικότητα.
Έτσι, μια εφαρμογή μπορεί να δημιουργήσει υποκλάσεις για ένα όργανο που
να δίνουν στο όργανο πιο εξειδικευμένη λειτουργικότητα.
Αντίστοιχα, τα μηνύματα από το σύστημα κατεβαίνουν το δέντρο της
κληρονομικότητας μιας εφαρμογής μέχρι και το τελευταίο στην ιεραρχία
παράθυρο ή όργανο να δει το γεγονός και να έχει την ευκαιρία να το
χειριστεί.
Μια εφαρμογή πρέπει να παραλαμβάνει συνέχεια όλα τα μηνύματα που στέλνονται
σε αυτή, να τα διαχωρίζει και να τα προωθεί στους αντίστοιχους παραλήπτες.
Ο παρακάτω κώδικας αποτελεί τυπικό παράδειγμα του βρόχου που παραλαμβάνει
και προωθεί μηνύματα σε εφαρμογές Windows:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
if (!IsDialogMessage(hWnd, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Αντίστοιχα ο παρακάτω κώδικας αποτελεί ένα απλό παράδειγμα για το πως
μπορεί να γίνει απλοϊκά η επεξεργασία των μηνυμάτων:
long
WdInWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
static BOOL fFirstPaint;
static HWND hWndList;
static HWND hWndEdit;
HWND focus;
int i;
switch (iMessage) {
case WM_CREATE:
fFirstPaint = TRUE;
break;
case WM_PAINT:
if (fFirstPaint) {
fFirstPaint = FALSE;
/* Set focus to the input string box */
hWndEdit = GetDlgItem(hDlgWnd, ID_STRINGEDIT);
hWndList = GetDlgItem(hDlgWnd, ID_LISTBOX);
/* Blank all lines so that we start from the bottom */
for (i = 0; i < HLEN; i++)
(void)SendMessage(hWndList, LB_INSERTSTRING,
(WPARAM)-1, (LPARAM)(LPCSTR)"");
SetFocus(hWndEdit);
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch (wParam) {
case IDOK: /* Enter key */
focus = GetFocus();
if (focus == hWndEdit)
newline(hWndEdit, hWndList);
else if (focus == hWndList)
histline(hWndList, hWndEdit);
else
goto aka_default;
break;
case ID_LISTBOX:
if (HIWORD(lParam) == LBN_DBLCLK)
histline(hWndList, hWndEdit);
else
goto aka_default;
break;
default:
goto aka_default;
}
break;
default:
aka_default:
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}
return 0L;
}
Είναι φανερό πως το παραπάνω μοντέλο δε μπορεί να εφαρμοστεί αποτελεσματικά
σε εφαρμογές με εκατοντάδες εντολές και αντίστοιχα μηνύματα.
Απεικόνιση της δομής στη Visual Basic
Το περιβάλλον προγραμματισμού Visual Basic επιτρέπει τη γραφική σχεδίαση
εφαρμογών με τη χρήση οργάνων και τον άμεσο ορισμό κώδικα που θα αποκρίνεται
σε συγκεκριμένα γεγονότα.
Για το σκοπό αυτό η Visual Basic απλοποιεί το περιβάλλον προγραμματισμού
που ορίζουν τα Windows δίνοντας στο χρήστη μια σειρά από εξειδικευμένα
όργανα (βασισμένα σε αυτά των Windows) και έναν τρόπο να ορίζει ο χρήστης
την εμφάνιση του κάθε οργάνου, τις λειτουργίες του και τον
τρόπο που αυτό ανταποκρίνεται σε γεγονότα.
Έτσι, κάθε όργανο παριστάνεται ως ένα αντικείμενο που διαθέτει:
- ιδιότητες όπως για παράδειγμα τη θέση και το χρώμα του,
- μεθόδους που μπορούν να κληθούν για εκτέλεση όπως για
παράδειγμα τη μέθοδο της επανασχεδίασης και
- γεγονότα στα οποία μπορεί ο χρήστης να συνδέσει κώδικα
π.χ. το γεγονός click.
Ο έλεγχος που έχει ο χρήστης πάνω στα όργανα διαφέρει ανάλογα με
την κατάσταση της εφαρμογής:
-
Κατά τη διάρκεια σχεδιασμού της εφαρμογής, ο χρήστης μπορεί να διαβάσει
και να αλλάξει τιμή στις περισσότερες ιδιότητες καθώς και να συνδέσει
κώδικα με όλα τα γεγονότα κάθε οργάνου.
-
Κατά τη διάρκεια εκτέλεσης της εφαρμογής, το πρόγραμμα μπορεί να διαβάσει
και να αλλάξει τιμή στις περισσότερες ιδιότητες και να καλέσει τις
μεθόδους του κάθε οργάνου.
Όταν παραλαμβάνεται από την εφαρμογή ένα γεγονός, αυτό προωθείται
αυτόματα στον κώδικα που έχει συνδεθεί με το αντίστοιχο όργανο.
Αν δεν υπάρχει τέτοιος κώδικας, τότε η εφαρμογή εκτελεί αυτόματα
κώδικα ο οποίος εκτελεί τη βασική λειτουργία για το αντίστοιχο γεγονός.
Όργανα
Όργανα τοποθετούνται μέσα στην εφαρμογή με γραφικό τρόπο κατά την
υλοποίησή της.
Κάθε όργανο διακρίνεται από το όνομά του.
Αν πολλά όργανα ίδιου τύπου έχουν το ίδιο όνομα τότε αυτά ορίζουν
έναν πίνακα οργάνων τον οποίο μπορούμε να διατρέξουμε με τη χρήση
ενός δείκτη (π.χ. txtTextBox(i).text = "hello").
Το περιβάλλον της Visual Basic ορίζει τα παρακάτω βασικά
όργανα:
- TextBox
-
Όργανο για είσοδο κειμένου
- Label
-
Εμφάνιση κειμένου
- PictureBox
-
Περιοχή για εμφάνιση και σχεδίαση γραφικών κατά τη διάρκεια εκτέλεσης
του προγράμματος.
- CheckBox
-
Επιλογή τύπου ναι/όχι (μπορούν να είναι αληθείς πολλαπλές τέτοιες επιλογές)
- OptionButton
-
Επιλογή τύπου ναι/όχι (δεν μπορούν να είναι αληθείς πολλαπλές τέτοιες επιλογές)
- CommandButton
-
Κουμπί για εντολές
- Image
-
Χαρτογραφική εικόνα που μπορεί να ορίσει ο χρήστης
- Shape
-
Σχήμα που μπορεί να οριστεί κατά τη σχεδίαση της εφαρμογής.
- Timer
-
Χρονόμετρο που δημιουργεί γεγονότα σε τακτά διαστήματα.
- ListBox
-
Λίστα με επιλογές.
- ComboBox
-
Λίστα με επιλογές σε συνδυασμό με περιοχή που μπορεί να γραφτεί κείμενο
- VScrollBar
-
Κάθετο όργανο ελέγχου της θέσης στο παράθυρο.
- HScrollBar
-
Οριζόντιο όργανο ελέγχου της θέσης στο παράθυρο.
- Frame
-
Περιοχή στην οποία μπορούν να ομαδοποιηθούν πολλά όργανα (ειδικά
OptionButton)
Εκτός από τα παραπάνω βασικά όργανα μπορεί κανείς να ορίσει ή να αγοράσει
πολλά άλλα όργανα που εκτελούν χρήσιμες λειτουργίες όπως π.χ. σύνδεση
με βάσεις δεδομένων και το Internet, εμφάνιση γραφημάτων και πινάκων.
Τα όργανα αυτά μπορούν να θεωρηθούν εξαρτήματα (components)
για την υλοποίηση εφαρμογών.
Γεγονότα
Κάθε όργανο έχει το δικό του σύνολο από γεγονότα τα οποία μπορεί να δεχτεί.
Ορισμένα από τα γεγονότα τα οποία αφορούν πολλά όργανα είναι τα παρακάτω:
- Click
- Click του ποντικιού πάνω στο όργανο.
- DblClick
- Διπλό click του ποντικιού πάνω στο όργανο.
- GotFocus
- Το όργανο γίνεται η εστία εισόδου.
- LostFocus
- Το όργανο παύει να είναι η εστία εισόδου.
- KeyDown
- Ένα πλήκτρο πατιέται πάνω από το όργανο.
- KeyUp
- Ένα πλήκτρο αφήνεται πάνω από το όργανο.
- KeyPress
- Ένας χαρακτήρας γράφεται πάνω από το όργανο.
- MouseDown
- Ένα πλήκτρο του ποντικιού πατιέται πάνω από το όργανο.
- MouseUp
- Ένα πλήκτρο του ποντικιού αφήνεται πάνω από το όργανο.
- MouseMove
- Το ποντίκι κινείται πάνω από το όργανο.
- Change
- Τα δεδομένα που περιέχει το όργανο άλλαξαν.
Η σύνδεση του γεγονότος με κώδικα της Visual Basic γίνεται με τον
ορισμό μιας συνάρτησης που έχει ως όρισμα παραμέτρους που αφορούν το
συγκεκριμένο όργανο.
Παράδειγμα:
Private Sub Check1_KeyPress(KeyAscii As Integer)
End Sub
Private Sub Check1_KeyUp(KeyCode As Integer, Shift As Integer)
End Sub
Private Sub Check1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
End Sub
Private Sub Command1_Click()
End Sub
Private Sub Text1_Change()
End Sub
Ιδιότητες
Οι ιδιότητες που αφορούν κάθε όργανο μπορούν να μεταβληθούν τόσο κατά το
σχεδιασμό, όσο και κατά την εκτέλεση της εφαρμογής.
Πρόσβαση στις ιδιότητες κατά την εκτέλεση της εφαρμογής έχουμε με τη
σύνταξη όργανο.ιδιότητα.
Μερικές ιδιότητες που εμφανίζονται σε πολλά όργανα είναι οι παρακάτω:
- Name
- Το όνομα του συγκεκριμένου οργάνου.
- BackColor
- Το χρώμα του φόντου.
- ForeColor
- Το χρώμα σχεδίασης.
- Enabled
- Αληθές αν το όργανο είναι ενεργό.
- Visible
- Αληθές αν το όργανο είναι ορατό.
- Text
- Το κείμενο που περιέχει το όργανο.
- Caption
- Το κείμενο που εμφανίζει το όργανο.
- Value
- Η τιμή που έχει το όργανο (π.χ. αληθές/ψευδές).
- ToolTipText
- Το αναδυόμενο κείμενο σύντομης βοήθειας.
- Height
- Το ύψος του οργάνου.
- Left
- Η θέση του οργάνου στη φόρμα από αριστερά.
- Top
- Η θέση του οργάνου στη φόρμα από πάνω.
- Width
- Το πλάτος του οργάνου.
Ολοκληρωμένο περιβάλλον ανάπτυξης
Μια εφαρμογή Visual Basic υλοποιείται με βάση διάφορες
φόρμες (forms) που ορίζουν τα περιεχόμενα για
αντίστοιχα παράθυρα.
Κάθε φόρμα έχει, όπως και τα όργανα, ιδιότητες και μεθόδους.
Το περιβάλλον υλοποίησης της Visual Basic έχει την παρακάτω μορφή:
- Στο κέντρο σχεδιάζεται η φόρμα της εφαρμογής
- Αριστερά επιλέγονται τα όργανα που τοποθετούνται στη φόρμα.
- Άνω δεξιά μπορεί κανείς να επιλέξει τις φόρμες της εφαρμογής καθώς
και να αλλάξει μεταξύ γραφικής εμφάνισης και της εμφάνισης του κώδικα για
τα όργανα.
- Κάτω δεξιά μπορεί κανείς να διαβάσει και να αλλάξει τις ιδιότητες
για το κάθε φορά επιλεγμένο όργανο.
- Με την πάνω γραμμή εργαλείων μπορεί κανείς μεταξύ άλλων να
ξεκινήσει και να σταματήσει την εφαρμογή, να προσθέσει φόρμες και να
ορίσει τα μενού της εφαρμογής.
Για να ορίσουμε τον κώδικα που εκτελείται για κάποιο γεγονός κάνουμε
διπλό κλικ σε κάποιο όργανο και αυτόματα δημιουργείται η δήλωση για
τη συνάρτηση που αφορά το πιο χρήσιμο γεγονός για το αντίστοιχο όργανο.
Από επιλογές στην κορυφή του παραθύρου μπορούμε να επιλέξουμε το όργανο και
το γεγονός για τα οποία θέλουμε να γράψουμε κώδικα:
Η γλώσσα Visual Basic
Η γλώσσα Visual Basic είναι μια δομημένη γλώσσα με τύπους
που υποστηρίζει, μερικώς, τον προγραμματισμό με αντικείμενα
(δεν υποστηρίζει κληρονομικότητα).
Στις επόμενες παραγράφους περιγράφουμε πολύ συνοπτικά ορισμένα
βασικά στοιχεία της:
Ορισμός συναρτήσεων
function funcname(param1 as type1, param2 as type2) as returntype
end function
Παράδειγμα:
function square(x as double) as double
square = x * x
end function
Διαδικασίες (συναρτήσεις που δεν επιστρέφουν τιμή) ορίζονται αντίστοιχα,
αλλά με τη λέξη sub αντί για function.
Τύποι
Ορισμένοι βασικοί τύποι είναι οι boolean, integer, single, double, string.
Ορισμός μεταβλητών
Μεταβλητές ορίζονται με τη σύνταξη:
dim varname as type
Παράδειγμα:
dim x as double
dim k as integer
Εντολές
Οι εντολές τερματίζονται από το τέλος της γραμμής
Παράδειγμα:
x = 3
txt.Text = "Hello"
Σχόλια
Τα σχόλια αρχίζουν με το χαρακτήρα '
Δομές ελέγχου
Η Visual Basic παρέχει τις παρακάτω δομές ελέγχου (σε σχόλιο
η αντίστοιχη δομή της C).
' if (...) { ... } else { ... }
if boolean then
statement
...
else
statement
...
end if
' for (v = start; v <= end; v++) { ... }
for variable = start to end
statement
...
next variable
' while (...) { ... }
do while boolean
statement
...
loop
' do { ... } while (...)
do
statement
..
loop while boolean
' switch (c) { case ... default: }
Select Case testexpression
Case expressionlist
statement
...
Case Else
statement
...
End Select
Βιβλιογραφία
-
Microsoft Developer Network Library
Visual Studio Documentation -
Visual Basic -
Reference -
Controls Reference -
Intrinsic Controls
- Michael Halvorson
Visual Basic 6 Βήμα προς βήμα. Εκδόσεις Κλειδάριθμος, Αθήνα.
- Stuart K. Card, Thomas P.
Moran, and Allen Newell.
The
Psychology of Human-Computer Interaction.
Lawrence Erlbaum Associates, Publishers, New Jersey, USA, 1983.
- Adele Goldberg.
Smalltalk 80: The Language and its Implementation.
Addison Wesley, 1980.
- Brian W. Kernighan.
Experience with Tcl slash Tk for scientific and
engineering visualization.
In Proceedings of the Tcl slash Tk Workshop, pages 269–278,
Toronto, Ontario, Canada, July 1995.
- Microsoft Corp.
Windows Interface Guidelines for Software Design.
Microsoft Press, Redmond, WA, USA, 1995.
- Donald A. Norman.
The
Psychology of Everyday Things.
BasicBooks, New York, NY, USA, 1988.
- Donald A. Norman.
The
Invisible Computer.
MIT Press, 1998.
- John K. Ousterhout.
Tcl
and the Tk Toolkit.
Addison-Wesley, 1994.
- Diomidis Spinellis.
A critique of the Windows application programming interface (http://kerkis.math.aegean.gr/~dspin/pubs/jrnl/1997-CSI-WinApi/html/win.html).
Computer Standards & Interfaces, 20:1–8, November 1998.
- J. J. Thomas and
G. Hamlin.
Graphical input interaction technique workshop summary.
Computer Graphics, pages 5–30, January 1983.
- Edward R. Tufte.
The Visual Display of Quantitative Information.
Graphics Press, 1983.
Ασκήσεις
Άσκηση 7
- Να προδιαγράψετε ένα χρήσιμο και πρωτότυπο πρόγραμμα που
να μπορείτε να υλοποιήσετε σε Visual Basic.
Το πρόγραμμα πρέπει να χρησιμοποιεί τις δυνατότητες του περιβάλλοντος
Windows και να είναι φιλικό προς το χρήστη.
Η προδιαγραφή πρέπει να είναι πλήρης και δομημένη
(μπορεί π.χ. να ακολουθεί τη δομή που έχει διδαχτεί στο μάθημα
σχεδιασμός και υλοποίηση λογισμικού).
- Με βάση την προδιαγραφή αυτή να υλοποιήσετε το αντίστοιχο πρόγραμμα.
- Με την άσκηση θα παραδώσετε εκτυπωμένα την προδιαγραφή καθώς και τις
βασικές οθόνες του προγράμματος.
Σημείωση: Μπορείτε να μεταφέρετε την εικόνα από ένα παράθυρο στο clipboard,
για να την επικολλήσετε στον επεξεργαστή κειμένου,
με το συνδυασμό πλήκτρων ALT-PrtSc.