Home

A scuola di Delphi

www.gpeano.org 

Introduzione · Capitolo 1 · Capitolo 2 · Capitolo 3 · Capitolo 4 · Capitolo 5 · Download 

Sommario
Blocco note
Tavola gradi-rad
Primitive grafiche
Giochi grafici
Assi cartesiani
Retta esplicita
Fascio improprio
Circonferenza
Ellisse
Sistema solare
Parabola
Iperbole
 

Capitolo 3

Blocco note

Il questo primo programma del capitolo 3 realizzeremo un Blocco note, analogo a quello di Windows, tramite il quale sia possibile leggere, scrivere e modificare un file di testo con estensione txt. Il nostro programma però avrà in più, rispetto a quello di Windows, una barra degli strumenti ed una barra di stato, oltre al tradizionale menu, ovviamente.

Salviamo subito, come al solito, in una nuova cartella il progetto come BloccoNote e la Unit associata alla form (FormBloccoNote) come UnitBloccoNote.

Cominciamo con l'inserire sulla form un MainMenu, che si trova al primo posto sulla linguetta Standard ed è rappresentato dall'icona . È un componente non visuale, che contiene al suo interno tutto il menu che apparirà subito sotto la barra del titolo; chiamiamolo MainMenu, al posto di MainMenu1, visto che la nostra applicazione avrà un solo menu. Clicchiamo due volte sull'icona del MainMenu posta sulla form; si aprirà una finestra vuota dal nome FormBloccoNote.MainMenu che ci permetterà di costruire il nostro menu.

Delphi offre dei menu già pronti di vario genere (File Menu, Edit Menu, etc.) inseribili cliccando sulla finestra FormBloccoNote.MainMenu con il tasto destro e scegliendo con Insert From Template... il menu che si vuole dall'elenco di quelli disponibili. Noi però vogliamo un menu italiano, quindi dobbiamo costruircelo da zero, almeno la prima volta; poi potremo salvarcelo fra i template come Save As Template... ed eviteremo di doverlo rifare altre volte quando ci servirà in altre applicazioni.

Per costruire il menu possiamo usare i tasti cursore e Ins e Canc, oppure il tasto destro del mouse e le voci Insert (Ins) e Delete (Del). In questo modo inseriamo le varie voci del menu: File, Formato e ? con le relative sottovoci.

Presentiamo qui di seguito i Name e le Caption delle varie voci; come si può vedere tutte le voci hanno una lettera preceduta dalla &, la quale apparirà sottolineata e servirà per l'accesso alla voce tramite la sequenza ALT+Lettera; alcune voci possiedono anche una sequenza di tasti per l'accesso veloce: ShortCut. Le voci con Caption '-' appariranno come linee di separazione fra le voci.

  • object MenuFile: TMenuItem
      Caption = '&File'
  • object Nuovo: TMenuItem
      Caption = '&Nuovo'
      ShortCut = 'Ctrl+N'
  • object Apri: TMenuItem
      Caption = '&Apri...'
      ShortCut = 'Ctrl+A'
  • object Salva: TMenuItem
      Caption = '&Salva...'
      ShortCut = 'Ctrl+S'
  • object N1: TMenuItem
      Caption = '-'
  • object Stampa: TMenuItem
      Caption = 'Stam&pa...'
      ShortCut = 'Ctrl+S'
  • object ImpostaPagina: TMenuItem
      Caption = '&Imposta pagina...'
  • object N2: TMenuItem
      Caption = '-'
  • object Esci: TMenuItem
      Caption = '&Esci'
  • object MenuFormato: TMenuItem
      Caption = 'F&ormato'
  • object ACapoAutomatico: TMenuItem
      Caption = '&A capo automatico'
  • object Carattere: TMenuItem
      Caption = '&Carattere...'
  • object MenuHelp: TMenuItem
      Caption = '&?'
    object GuidaInLinea: TMenuItem
      Caption = '&Guida in linea'
      ShortCut = 'F1'
  • object N3: TMenuItem
      Caption = '-'
  • object InformazioniSuBloccoNote: TMenuItem
      Caption = '&Informazioni su Blocco note'

Se tutto è stato eseguito attentamente il menu dovrebbe apparire così:

Ora possiamo salvarlo fra i template con Save As Template... per renderlo disponibile in futuro. Chiudiamo la finestra FormBloccoNote.MainMenu e proviamo il nostro menu direttamente sulla form.

Passiamo alla costruzione della barra degli strumenti; inseriamo un Panel, chiamiamolo PanelBarraStrumenti, selezioniamo Align alTop, impostiamo l'Height a 27, scegliamo BevelInner bvNone, BevelOuter bvLowered ed eliminiamo la Caption. Questo Panel farà da contenitore dei bottoni della barra degli strumenti.

Ora, inseriamo nella barra degli strumenti 7 SpeedButton tramite il tasto posto nella linguetta Additional. Questi bottoni permetteranno di attivare dei comandi con un semplice click del mouse su di essi. Collochiamoli con attenzione sul Panel modificando manualmente le proprietà Left e Top in modo da posizionarli affiancati come si può vedere dalla figura in alto di questa pagina; il mouse non è di aiuto perché permette spostamenti solo di 8 pixel per volta (a meno di non disattivare l'opzione Snap to grid dal menu Tools - Options... - Preferences).

Riportiamo di seguito i nomi, le proprietà Left e Top e gli Hint dei vari SpeedButton:

  • object SpeedButtonNuovo: TSpeedButton
      Left = 1
      Top = 1
      Hint = 'Nuovo'
  • object SpeedButtonApri: TSpeedButton
      Left = 26
      Top = 1
      Hint = 'Apri'
  • object SpeedButtonSalva: TSpeedButton
      Left = 51
      Top = 1
      Hint = 'Salva'
  • object SpeedButtonStampa: TSpeedButton
      Left = 76
      Top = 1
      Hint = 'Stampa'
  • object SpeedButtonACapo: TSpeedButton
      Left = 101
      Top = 1
      Hint = 'A capo automatico'
  • object SpeedButtonCarattere: TSpeedButton
      Left = 126
      Top = 1
      Hint = 'Carattere'
  • object SpeedButtonAiuto: TSpeedButton
      Left = 151
      Top = 1
      Hint = 'Guida in linea'

Gli Hint contengono il testo che viene visualizzato in un piccolo riquadro giallo quando il mouse si ferma per qualche istante sul bottone; per attivarli è ancora necessario impostare a True il valore ShowHint della form FormBloccoNote.

Assegniamo infine i vari Glyph ai vari bottoni cliccando sui ... della proprietà e selezionando Load..., l'immagine voluta e quindi OK. Le immagini dei Glyph sono contenute nel file zip del programma sotto forma di immagini bmp. Altre immagini sono disponibili nella cartella C:\Programmi\Borland\Delphi 2.0\IMAGES\BUTTONS.


Inseriamo ora le varie finestre di dialogo per l'apertura, il salvataggio, la stampa, etc. del testo prendendole dalla linguetta Dialogs; più in dettaglio inseriamo: OpenDialog, SaveDialog, PrintDialog, PrinterSetupDialog, FontDialog. Questi oggetti permettono l'utilizzo delle finestre di dialogo standard di Windows per effettuare le operazioni di apertura file, salvataggio file, stampa del testo, impostazioni di stampa, scelta del carattere del testo.

Per OpenDialog e SaveDialog impostiamo come DefaultExt l'estensione txt e solo per SaveDialog la proprietà Options - ofOverwritePrompt=True per far sì che venga visualizzato un messaggio di avviso quando si cerca di registrare un file di testo con un nome preesistente. Per entrambi impostare come Filter per l'apertura e il salvataggio la seguente tabella cliccando sul tasto ... della proprietà e attivando così il Filter Editor:

Filter Name Filter
Documenti di testo (*.txt) *.txt
Tutti i file *.*

Inseriamo, poi, una barra di stato StatusBar dalla linguetta Win95, che andrà a collocarsi automaticamente nella parte inferiore della form e che servirà a visualizzare i messaggi

Infine inseriamo un oggetto Memo , che conterrà il testo del blocco note, lo facciamo allineare fino a riempire completamente lo spazio rimanente nella form impostando a alClient la proprietà Align e facciamo comparire entrambe le barre di scorrimento impostando ScrollBars a ssBoth.


Passiamo ad inserire il codice associato alle voci del menu cliccando ad una ad una sulle varie voci. Il codice dovrebbe essere abbastanza semplice da capire, quindi non lo esamineremo in dettaglio. Osserviamo come si utilizza la StatusBar, come si attiva una finestra di dialogo (tramite il metodo Execute), come si carica o salva il testo nel oggetto Memo (tramite i metodi LoadFromFile e SaveToFile), come si imposta/toglie l'a capo automatico del testo (tramite la proprietà ScrollBars = ssVertical/ssBoth).

procedure TFormBloccoNote.NuovoClick(Sender: TObject);
begin
  Memo.Lines.Clear;
  StatusBar.SimpleText:='Nuovo documento di testo';
end;

 

procedure TFormBloccoNote.ApriClick(Sender: TObject);
begin
  if OpenDialog.Execute then
  begin
    Memo.Lines.LoadFromFile(OpenDialog.Filename);
    StatusBar.SimpleText:='Aperto il file: '+OpenDialog.Filename;
  end;
end;

 

procedure TFormBloccoNote.SalvaClick(Sender: TObject);
begin
  if SaveDialog.Execute then
  begin
    Memo.Lines.SaveToFile(SaveDialog.Filename);
    StatusBar.SimpleText:='Salvato il file: '+SaveDialog.Filename;
  end;
end;

 

procedure TFormBloccoNote.StampaClick(Sender: TObject);
var
  F: TextFile;
begin
  if PrintDialog.Execute then
  begin
    Printer.Canvas.Font:=Memo.Font;
    AssignPrn(F);
    Rewrite(F);
    Writeln(F, Memo.Text);
    CloseFile(F);
    StatusBar.SimpleText:='Stampa conclusa';
  end;
end;

 

procedure TFormBloccoNote.ImpostaPaginaClick(Sender: TObject);
begin
  PrinterSetupDialog.Execute;
end;

 

procedure TFormBloccoNote.EsciClick(Sender: TObject);
begin
  Application.Terminate;
end;

 

procedure TFormBloccoNote.ACapoAutomaticoClick(Sender: TObject);
begin
  ACapoAutomatico.Checked:=not ACapoAutomatico.Checked;
  if ACapoAutomatico.Checked then
    Memo.ScrollBars:=ssVertical
  else
    Memo.ScrollBars:=ssBoth;
end;

 

procedure TFormBloccoNote.CarattereClick(Sender: TObject);
begin
  FontDialog.Font:=Memo.Font;
  if FontDialog.Execute then
    Memo.Font:=FontDialog.Font;
end;

 

procedure TFormBloccoNote.GuidaInLineaClick(Sender: TObject);
begin
  ShowMessage('Blocco note - Guida in linea.'+#13+#13+
    'Questo programma permette di leggere,'+#13+
    'modificare, salvare e stampare file di testo.');
end;

 

procedure TFormBloccoNote.InformazioniSuBloccoNoteClick(Sender:
  TObject);
begin
  ShowMessage('Blocco note'+#13+'Copyright © GfO - 2003');
end;

Queste procedure devono essere assegnate anche agli SpeedButton. Selezionare la linguetta Events dall'Object Inspector e cliccando ad uno ad uno sugli SpeedButton selezionare per l'evento OnClick la procedura che deve essere attivata alla pressione del tasto. Per esempio per lo SpeedButtonNuovo la procedura NuovoClick, etc.

Ora abbiamo finito; salviamo tutto e collaudiamo il nostro Blocco note.

Esercizio. Migliorare il programma suddetto attivando l'evento OnChange dell'oggetto Memo per far sì che, appena il testo viene modificato dall'utente, un flag (variabile globale Boolean) venga impostato a True e forzi la comparsa della finestra di dialogo SaveDialog quando si tenta di chiudere l'applicazione o di cancellare il testo con File - Nuovo. Questo flag dovrà essere riportato a False ogni qual volta si apra un file nuovo o si salva il file corrente.

 3.01 - Blocco note