Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 27 di 43
  • livello principiante
Indice lezioni

La VCL (Visual Component Library)

La libreria di componenti messaci a disposizione da Delphi e con la quale iniziare a progettare le nostre applicazioni
La libreria di componenti messaci a disposizione da Delphi e con la quale iniziare a progettare le nostre applicazioni
Link copiato negli appunti

Questa sezione del corso tratterà della libreria di componenti (visibili e non) e
delle classi messeci a disposizione da Delphi. Questa libreria prende il nome di VCL da Visual
Component Library
.  Essa è una gerarchia di classi che derivano tutte dalla
classe TObject. Di questa libreria fanno parte sia i componenti visibili nella componente
palette dell'IDE che le altre classi di uso generale.

Come già detto, tutte le classi della VCL discendono da TObject. Questa classe ha
dunque un'importanza particolare poichè ci permette per esempio di utilizzare il tipo
TObject in sostituzione di un qualsiasi altro tipo di classe. Ciò è visibile per esempio
nelle implementazioni dei gestori di eventi che contengono nella loro dichiarazione un
parametro (Sender) di tipo TObject che permette appunto il passaggio di qualsiasi classe.
Affianco a questo vantaggio, c'è lo svantaggio di dover conoscere il tipo dell'oggetto
per operare su di esso. Infatti, avendo un riferimento di tipo TObject ad un qualsiasi
oggetto, non è possibile accedere direttamente alle proprietà specifiche di
quell'oggetto. Come sempre però Delphi ci viene in contro e ci mette a disposizione dei
metodi per risalire al tipo dell'oggetto riferito. Questi metodi sono implementati nella
calsse TObject e quindi disponibili per tutti gli oggetti di qualsiasi classe. Questo è
l'elenco dei metodi: ClassName, ClassNameIs, ClassParent, ClassInfo,
ClassType, InheritsFrom, Instancesize.

Vediamo a cosa servono questi metodi.

  • ClassName: questo metodo resituisce il nome della classe in formato
    stringa
  • ClassNameIs: verifica che il nome della classe corrisponda a quello
    passatogli
  • ClassParent: questo metodo restituisce un riferimento alla classe base
  • ClassInfo: Restituisce un puntatore ai dai Run Time Type Information
    relativi alla classe
  • ClassType: può essere applicato solamente agli oggetti e restituisce
    un riferimento alla classe dell'oggetto
  • InheritsFrom: verfica se una classe deriva sia in maniera diretta che
    non dalla classe passatagli come parametro. Questo metodo viene chiamato anche quando si
    utilizza l'operatore is.
  • Instancesize: metodo molto interessante in quanto restituisce la
    dimensione dell'oggetto a run time altrimenti non reperibile. Infatti l'istruzione sizeOf
    restituirebbe la dimensione del riferimento all'oggetto, quindi la dimensione di un
    puntatore che rimane fissa a 4 byte.

ClassParent e ClassType sono molto importanti poichè ci permettono
di operare sulla classe a run time.

La gerarchia delle classi di Delphi può essere raggruppata in tre aree principali:
oggetti in genere, componenti, eccezioni. I componenti sono quelli che generalmente si
usano in maniera visuale nell'IDE di Delphi, tramite il Form Designer e l'Object
Inspector. Tutte le altre classi sono accessibili tramite codice.

Componenti

I componenti rappresentano il fulcro della programmazione visuale in Delphi. Quando si
programma in Delphi, normalmente non si fa altro che scegliere dei componenti e definirne
le interazioni tra loro.

La maggior parte di questi componenti sono accessibili tramite l'IDE di Delphi nella
Component Palette, ma ce ne sono alcuni accessibili solamente da codice come TForm e
TApplication. Tutti i componenti derivano da TComponent che a sua volta deriva da
TPersistent. Ciò permette all'oggetto di essere memorizzato nel file DFM grazie alle
funzionalità di streaming della classe TPersistent. Questi possono essere manipolati a
Design Time in maniera visuale tramite gli strumenti messi a disposizione dall'IDE di
Delphi. I componenti possono contenere proprietà di tipo Published che
verranno visualizzate nell'Object Inspector dell' IDE.

Abbiamo visto che la gerarchia delle classi di può dividere in tre aree; anche per i
componenti è possibile fare un raggruppamento.

I componenti si dividono in

  • Controlli o Componenti visuali
  • Componenti non visibili

I Controlli possono a loro volta dividersi in

  • Controlli Windows
  • Controlli Grafici
Gerarchia Componenti.gif (6417 byte)

I controlli sono tutte quelle classi che derivano da TControl e cha hanno le
caratteristiche di occupare una posizione specifica nello schermo, avere dimensioni
proprie, essere manipolati a Design Time.

I controlli Windows o windowed, sono tutti quei componenti visuali che utilizzano
finestre del sistema operativo per la loro visualizzazione. Tecnicamente, questi controlli
possiedono un Handle assegnato loro dal sistema operativo e derivano da TWinControl. Per
quanto riguarda la funzionalità, tutti questi controlli, possono ricevere il fuoco e, in
alcuni casi, contenere altri controlli. Appartengono a questa area, tutti i controlli che
rappresentano i tipici controlli di windows, come Edit Box, ListBox, ComboBox, ecc. Questi
controlli sono in effetti delle classi wrapper pre i common controls ci windows. Windows
infatti possiede dei componenti che vengono chiamati controlli. Questi controlli sono,
tecnicamente, una finestra che mostra un comportamento specifico e possiede alcuni stili.
Altra caratteristica importante di questi controlli è che sono in grado di rispondere ai
messaggi specifici inviati loro dal sistema operativo. Molti di questi controlli sono
stati ereditati da Windows 3.1 e nelle versioni successive, da Windows 95 in poi, ve se ne
sono affiancati molti altri.

I controlli grafici o non windowed, non possiedono una finestra e quindi non hanno un
Handle. Sono sempre controlli visuali e la loro caratteristica è che non possono ricevere
il fuoco. Sono molto importanti quando si ha la necessità di risparmiare risorse.
Derivano tutti da TGraphicControl e vengono gestiti direttamente dalla form che li
contiene la quale invia loro tutti gli eventi relativi al disegno ad al mouse.

I componenti non visibili sono tutte quelle classi che non sono, per l'appunto,
visibili e che derivano quindi da TComponent ma non da TControl. A design time questi si
presentano sotto forma di icone mentre a run time possono essere visibili o no come per
esempio i box di dialogo per l'apertura ed il salvataggio dei files.

Dalla struttura della gerarchia di classi che abbiamo visto, deriva che molti
componenti anno proprietà comuni; queste riguardano soprattutto proprietà fisiche degli
oggetti (dimensioni, colore, stili, cursore, posizione), il nome dell'oggetto stesso (name),
l'owner ed il parent. Quest'ultimi due hanno particolare
importaza poichè rappresentano il proprietario dell'oggetto ed il contenitore dello
stesso. La differenza tra Owner e Parent è importante; l'owner è chi ha creato l'oggetto
ed il parent è il contenitore dell'oggetto. Un esempio potrebbe essere una form di nome
Form1 che crea un componente Button1. In questo caso la form Form1 è sia Owner che
Parent. Se la form Form1 spostasse il componente Button1 nella form Form2, quest'ultima
sarebbe il parent di Button1, ma Form1 ne rimarrebbe sempre proprietaria. Anche la
proprietà name è importantissima; essa infatti permette di identificare
l'oggetto ed accedere ai suoi metodi e proprietà. Viene utilizzata anche dall'IDE per
definire automaticamente i nomi dei gestori degli eventi. Questa proprietà deve essere
conforme alle specifiche definite per qualsiasi identificatore Object Pascal valido. Non
può quindi contenere spazi o caratteri non validi.

Oltre a proprietà comuni, gli oggetti della VCL hanno anche eventi e metodi comuni.
Risultando troppo lunga la trattazione di questo argomento in questa sede, si rimanda al
testo di Marco Cantù "Programmare con Delphi 5".

Ti consigliamo anche