170 likes | 247 Views
Το StatusBar Component. Παράγεται από την κλάση TStatusBar. Περιέχει έναν αριθμό από Panels που μπορούν να περιέχουν πληροφορίες για την κατάσταση του προγ / τος. I διότητες (Properties) :
E N D
Το StatusBar Component • Παράγεται από την κλάση TStatusBar. Περιέχει έναν αριθμό από Panels που μπορούν να περιέχουν πληροφορίες για την κατάσταση του προγ/τος. Iδιότητες (Properties) : • AutoHint (bool) : καθορίζει αν στο StatusBar θα εμφανίζεται αυτόματα το περιεχόμενο της ιδιότητας «Hint» του κάθε component όταν περνάει από πάνω τους το ποντίκι. • Panels (TStatusPanel *) : Πίνακας που περιέχει τα ανεξάρτητα Panels στα οποία μπορεί να χωρίζεται ένα StatusBar. • SimplePanel(bool) : όταν είναι true εμφανίζει ένα ενιαίο Panel γιαόλο το StatusBar. Όταν εί-ναι false εμφανίζει πολλαπλά Panels. • SimpleText (AnsiString) : string που εμφανίζεται στοενι-αίο Panel του StatusΒar όταν επιλέξουμε το SimplePanel.
Το StatusBar Component (β) • SizeGrip (bool) : καθορίζει αν θα εμφανίζεται στην κάτω δεξιά γωνία το τριγωνικό σχημα για αλλαγήμεγέθους του παραθύρου. • UseSystemFont (bool) : καθορίζει αν το StatusBar χρησιμοποιεί το System Font. • Canvas (TCanvas) : περιοχή σχεδίασης στο client area του StatusBar. Panel Editor
Κατασκευή StatusBar • Πρώτα ενσωματώνουμε στη φόρμα μας ένα StatusBar component από την μπάρα εργαλείων Win32. To StatusBar αυτόματα αγκιστρώνεται στο κάτω μέρος του παραθύρου και πιάνει όλο το πλάτος του. • Στη συνέχεια με κλικ πάνω στις 3 τελείες (...) της ιδιότητας ‘Panels’ του StatusBar ανοίγουμε τον Panel Editor, όπου καθορίζουμε πόσα Panels θα έχει το Statusbar και τί πλάτοςθα έχει το καθένα. • Για να καθορίσω τί κείμενο θα εμφανίζεται σε κάθε Panel, αρκεί να βάζω το κείμενο πουθέλω στην ιδιότητα ‘Text’ του κάθε Panel. StatusBar1->Panels->Items[2]->Text = “Overwrite”; • Εναλλακτικά για απλό StatusBar μπορώ να θέσω το SimplePanel=true, να καθορίζω το κείμενο που θα εμφανίζεται στο SimpleText και να βάλω την ιδιότητα AutoHint=true, για να εμφανίζονται αυτόματα τα Hints.
Αλλαγή Skin σε StatusBar • Η διαδικασία είναι παρόμοια όπως και στα ToolBars : • Η σχεδίαση και εδώ πρέπει να γίνεται κάθε φορά και όχι μία φορά μόνο στην αρχή. • Για το λόγο αυτό πρέπει να παγιδεύσουμε ένα “OnPaint”event του StatusBar. • Το μοναδικό τέτοιο event του StatusBar είναι το OnDrawPanelπου παράγεται κάθε φορά που επανασχεδιάζεται κάθε Panel του StatusBar. • Για να παραχθεί όμως το event αυτό θα πρέπει η ιδιότητα Style του κάθε Panel να γίνει “psOwnerDraw”.
Αλλαγή Skin σε StatusBar TPicture * SkinImage; .... void __fastcall TForm1::FormCreate(TObject *Sender) { SkinImage = new TPicture; SkinImage->LoadFromFile("clouds.bmp"); } void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar, TStatusPanel *Panel, const TRect &Rect) { StatusBar->Canvas->StretchDraw(Rect, SkinImage->Graphic); }
Το Menu Component • Περιέχει επιλογές για την δημιουργία εγκατάσταση και διαχείριση των components που είναι διαθέσιμα στον προγραμματιστή μέσω των component palettes. • New Component : Επιτρέπει την δημιουργία ενός νέου component από τον χρήστη. Εμφανίζει ένα διάλογο βασικών επιλογών : • Ancestor Type : όνομα της κλάσης στην οποία βασίζεται το component. • Class Name : το όνομα της νέας κλάσης του component.
Δημιουργώντας ένα Component • Palette Page : σε ποια παλέτα με components θα τοποθετηθεί το νέο component. • Unit File Name : το μονοπάτι και το όνομα του .cpp αρχείου που θα περιέχει τον κώδικα για το νέο component. • Search Path : μπορούμε να αλλάξουμε το σύνολο των καταλόγων που ο C-Builder ψάχνει για αναζήτηση αρχείων. • Μόλις πατήσουμε το OK δημιουργούνται αυτόματα ένα αρχείο .cpp με προετοιμασμένο κώδικα, ένα αρχείο .h επίσης με έτοιμο κώδικα για την ανάπτυξη του νέου κώδικα του component. • Κάθε component πρέπει να βασίζεται σε μία υπάρχουσα κλάση. • Το νέο component πρέπει να γίνει compile ώστε να μπορεί να συμπεριληφθεί στην καθορισμένη παλέτα. • Όλα τα σχετικά αρχεία του component (.cpp, .h, .res, κ.λ.π.) τοποθετούνται μέσα σε ένα ειδικό αρχείο project που έχει την επέκταση .bpk και ονομάζεται “package file”.
Πρότυπο αρχείο cpp για νέο Component #include <vcl.h> #pragma hdrstop #include "MyEdit.h" #pragma package(smart_init) //--------------------------------------------------------------------------- static inline void ValidCtrCheck(TMyEdit *) // no pure virtual exist { new TMyEdit(NULL); } //--------------------------------------------------------------------------- fastcall TMyEdit::TMyEdit(TComponent* Owner) : TEdit(Owner) { } //--------------------------------------------------------------------------- namespace Myedit { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TMyEdit)}; RegisterComponents("Samples", classes, 0); } }
Πρότυπο αρχείο .h για νέο Component #ifndef MyEditH #define MyEditH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <Forms.hpp> #include <StdCtrls.hpp> //--------------------------------------------------------------------------- class PACKAGE TMyEdit : public TEdit {private: protected: public: __fastcall TMyEdit(TComponent* Owner); __published: }; #endif
Μεταγλωττίζοντας ένα Component • Για να μεταγλωττίσουμε ένα component επιλέγουμε από το Component Menu την επιλογή “Install Component”. • Εδώ καθορίζουμε το όνομα του cpp που περιέχει τον κώδικα του component, το όνομα του Project (package) και την περιγραφή του component. • Μπορούμε να συμπεριλάβουμε πολλά components στο ίδιο package
Μεταγλωττίζοντας ένα Component (β) • Με την μεταγλώττιση παράγεται και το Project File (.bpk) που πρέπει να σώσουμε με την επιλογή File Save Project As, ώστε να μπορούμε να το ξανα-ανοίξουμε για να μεταβάλλουμε το component. • Κατά την μεταγλώττιση παράγονται : • BPI (Import Library) περιέχει την μεταγλωττισμένη κλάση τουνέου component ώστε να μπορεί να συμπεριληφθεί στην παλέτα. • OBJ (object file) περιέχει όλο τον κώδικα σε γλώσσα μηχανής. • BPL (runtime library) είναι στην ουσία ένα dll που συνδέεται δυναμικά με το exe της εφαρμογής και περιέχει τον κώδικα του component. • LIB (static library) βιβλιοθήκη που μπορεί να συνδεθεί με το exe κατά το linking ώστε να ενσωματώσει το component στο exe.
Παράδειγμα δημιουργίας component • Δημιουργία ενός Edit Box με μαύρο background και λευκά γράμματα: • Από το μενού Component επιλέγουμε “New Component”. • Καθορίζουμε ως “Ancestor Type” την κλάση TEdit. • Δηλώνουμε ως “Class Name” το όνομα TMyEdit. • Καθορίζουμε το “Unit File Name” π.χ. ως “C:\MyComponents\MyEdit\MyEdit.cpp” • Πατάμε OK οπότε δημιουργούνται τα αρχεία MyEdit.cpp και MyEdit.h με έτοιμο κώδικα. • Επεμβαίνουμε στον κώδικα για να αλλάξουμε τα χρώματα του component __fastcall TMyEdit::TMyEdit(TComponent* Owner) : TEdit(Owner) { Color=clBlack; Font->Color=clWhite;}
Παράδειγμα δημιουργίας component (β) • Μεταγλωττίζουμε και εγκαθιστούμε το component με την επιλογή ComponentInstall Component • Στον Διάλογο που εμφανίζεται επιλέγουμε την σελίδα “Into New Package”. • Επιλέγουμε ως “Unit File Name” το αρχείο cpp του component. • Καθορίζουμε ως “Package File Name” π.χ. το C:\MyComponents\MyEdit\MyEdit.bpk • Καθορίζουμε το “Package Description” π.χ. ως “My Edit Component” • Πατώντας το OK εμφανίζεται το μήνυμα : “Package MyEdit.bpl will be built then installed. Continue? Yes/No” • Mόλις ολοκληρωθεί η διαδικασία το component έχει ήδη εγκατασταθεί στην παλέτα που επιλέξαμε (π.χ. Samples). • Φροντίζουμε να σώσουμε το project file (.bpk) με την επιλογή “File Save Project As…” ώστε να μπορούμε να το ανοίξουμε ξανά.
Το Menu Component (β) • Import ActiveX Control : επιτρέπει την ενσωμάτωση στην τρέχουσα εφαρμογή ενός ActiveX control που είναι registered στα Windows. Τα ActiveX Controls είναι αυτόνομα αντικείμενα (.ocx, .dll) που περιέχουν components.
Το Menu Component (γ) • Create Component Template : επιτρέπει την δημιουργία πρότυπων component templates που αποθηκεύονται σε αρχεία .DCT • Τα Component Templates αποτελούνται από ομάδες component που τοποθετούνται πάνω σε μία φόρμα και έχουν συγκεκριμένες τιμές ιδιοτήτων. • Διαδικασία δημιουργίας : Τοποθετούμε τα components πάνω σε μία φόρμα. Καθορίζουμε τις τιμές των ιδιοτήτων τους. Επιλέγουμε όλα τα components. Επιλέγουμε “Create Component Template” και καθορίζουμε το όνομα την παλέτα και το εικονίδιο για το template.
Το Menu Component (δ) • Install Packages : επιτρέπει την εγκατάσταση και απεγκατάσταση compo-nents που βρίσκονται μέσα σε μεταγλωττισμένα «πακέτα» (packages). Τα μεταγλωττισμένα πακέταβρίσκονται σε αρχεία με επέκταση .BPL.
Το Menu Component (ε) • Configure Palette : επιτρέπει την διαχείριση των παλετών από components και την προσθήκη, διαγραφή και μετονομασία components μέσα στις παλέτες.