Codice

EuroLire  (scritto con Delphi 5)

Utility per la conversione da Lire ad Euro e viceversa.

 

unit UEuroLire;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Menus, ComCtrls, ToolWin, Buttons;

type
  TEuroLire = class(TForm)
    ToolBar1: TToolBar;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    Lire: TEdit;
    Euro: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    SBEsci: TSpeedButton;
    SBAiuto: TSpeedButton;
    SBInformazioni: TSpeedButton;
    SBCancella: TSpeedButton;
    SBStrisciata: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure Lire_o_EuroEnter(Sender: TObject);
    procedure TastoKeyPress(Sender: TObject; var Key: Char);
    procedure EuroLireKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
    procedure EuroChange(Sender: TObject);
    procedure SBStrisciataClick(Sender: TObject);
    procedure StampaStrisciata(ColonnaLire, ColonnaEuro, Segno: string);
    procedure SBCancellaClick(Sender: TObject);
    procedure SBAiutoClick(Sender: TObject);
    procedure SBInformazioniClick(Sender: TObject);
    procedure SBEsciClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

protected
  procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
                                                      message WM_GetMinMaxInfo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  EuroLire: TEuroLire;
  RisoluzioneL: integer;
  RisoluzioneH: integer;
  Risoluzione: string;
  CaratteriDpi: integer;
  Larghezza: integer;
  Altezza: integer;

implementation

uses UInformazioni, UMessaggio, UStrisciata;

{$R *.DFM}

type
  PosizioneRecordType = Record
    X: integer;
    Y: integer;
  end;

var
  NumeroVecchioLire: string;
  NumeroVecchioEuro: string;
  PosizioneFile: file of PosizioneRecordType;
  PosizioneData: PosizioneRecordType;
  FName: string;
  ImportoLire: Extended;
  ImportoEuro: Extended;
  TotaleLire: Currency;
  TotaleEuro: Currency;
  ValTransStrL: string;
  ValTransStrE: string;
  SegnoDecimaleGiaUsato: Boolean;
  DueDecimaliGiaInseriti: Boolean;
  InvioAppenaPremuto: Boolean;

procedure TEuroLire.FormCreate(Sender: TObject);
begin
  { legge la risoluzione dello schermo (larghezza x altezza in pixel)
    e la dimensione dei caratteri
    N.B. l'applicazione è stata sviluppata a 1024x768 - 120 dpi }

  Risoluzione := IntToStr(Screen.Width) + 'x' +
                        IntToStr(Screen.Height);
  CaratteriDpi := Screen.PixelsPerInch;

  { adatta la dimensione dei controlli in base alla dimensione dei
    caratteri utilizzati da Windows }
  { se i caratteri non sono 120 dpi come in fase di progettazione... }

  if CaratteriDpi <> 120
    { ...rimpicciolisce i controlli della form... }
    then EuroLire.ScaleControls(100, (CaratteriDpi * 100 div 120) + 2);
    { ...altrimenti rimane la dimensione ottimizzata per 120 dpi }

  { ottimizza la visualizzazione in PC con risoluzione impostata a
    800x600 oppure 640x480 (1024x768 è quella standard)
    N.B.: Larghezza e Altezza sono usate anche da WMGetMinMaxInfo }

  if Risoluzione = '1024x768' then
    begin
    Larghezza := 355;     // come in fase di progetto
    Altezza := 151;          // come in fase di progetto
    end

  else if Risoluzione = '800x600' then
    begin
    Larghezza := 278;     // div 1,28 (355 / 1,28 = 277,344)
    Altezza := 130;          // div 1,28 (151 / 1,28 = 117,969)
    { Eurolire.ScaleBy(100, 128); ---> non ha l'effetto desiderato
                                                       a causa della dimensione dei font }
    { riposiziona i controlli sulla scheda }

    Label1.Top := 4;
    Label2.Top := 4;
    Lire.Top := 20;
    Euro.Top := 20;
    Label1.Left := 8;
    Lire.Left := 8;
    Label2.Left := 140;
    Euro.Left := 140;
    StatusBar1.Panels[0].Width := 133;
    StatusBar1.Panels[1].Width := 133;
    end

  else if Risoluzione = '640x480' then     // per ora come 800x600
    begin
    Larghezza := 278;
    Altezza := 130;
    Label1.Top := 4;
    Label2.Top := 4;
    Lire.Top := 20;
    Euro.Top := 20;
    Label1.Left := 8;
    Lire.Left := 8;
    Label2.Left := 140;
    Euro.Left := 140;
    StatusBar1.Panels[0].Width := 133;
    StatusBar1.Panels[1].Width := 133;
    end

  else     // se altra risoluzione come in fase di progetto
    begin
    Larghezza := 355;
    Altezza := 151;
    end;

  { imposta larghezza e altezza della finestra }
  EuroLire.Width := Larghezza;
  EuroLire.Height := Altezza;

  { assegna a FName il nome del file di configurazione Config.cel }
  FName := 'Config.cel';
  AssignFile(PosizioneFile, FName);
    { se il file esiste lo apre ed assegna le posizioni alla finestra }
    if FileExists(FName)
      then begin
              Reset(PosizioneFile);
              Read(PosizioneFile, PosizioneData);
              EuroLire.Left := PosizioneData.X;
              EuroLire.Top := PosizioneData.Y;
              end
      { altrimenti crea il file }
      else Rewrite(PosizioneFile);
  CloseFile(PosizioneFile);

  { imposta il carattere separatore di migliaia }
  ThousandSeparator := '.';
  { imposta il carattere separatore di migliaia }
  DecimalSeparator := ',';
  { imposta a non usato il carattere ',' o '.' nella casella di testo }
  SegnoDecimaleGiaUsato := False;
  { imposta a non inseriti due decimali nella casella di testo Euro }
  DueDecimaliGiaInseriti := False;
  { imposta a non usato il carattere 'invio' }
  InvioAppenaPremuto := False;
end;

procedure TEuroLire.Lire_o_EuroEnter(Sender: TObject);
begin
  { cambia il titolo della finestra quando si cambia la focalizzazione
    delle caselle }

  if Lire.Focused
       then EuroLire.Caption := 'Convertitore Lire / Euro';
  if Euro.Focused
       then EuroLire.Caption := 'Convertitore Euro / Lire';
  { quando si cambia la focalizzazione delle caselle, se una delle due
    è vuota vengono ripulite entrambe }

  if (Lire.Text <> '') or (Euro.Text <> '') then
       begin
       Lire.Text := '';
       Euro.Text := '';
       end;
end;

procedure TEuroLire.TastoKeyPress(Sender: TObject; var Key: Char);
begin
// GESTIONE DEI TASTI -----------------------------------------------
{ vengono consentiti sempre backspace e invio }
if (Key <> Char(VK_BACK))and (Key <> Char(VK_RETURN)) then
{ vengono consentiti solo i seguenti tasti: i numeri da 0 a 9,
  il punto, la virgola, il più, il meno;
  se viene premuto un altro tasto il carattere viene posto a nullo
  (Key := #0), cioè come se non fosse stato digitato nulla }

if (Key <> '0') and
   (Key <> '1') and
   (Key <> '2') and
   (Key <> '3') and
   (Key <> '4') and
   (Key <> '5') and
   (Key <> '6') and
   (Key <> '7') and
   (Key <> '8') and
   (Key <> '9') and
   (Key <> ',') and
   (Key <> '.') and
   (Key <> '+') and
   (Key <> '-') or
   (DueDecimaliGiaInseriti = True) then Key := #0;

// GESTIONE DEL TASTO 'INVIO' ---------------------------------------
  { controlla se è stato premuto 'invio' }

  if Key = Char(VK_RETURN) then
  begin
  { elimina il beep che windows emette quando si preme invio in una
    casella di testo }

  Key := #0;
    { se è un nuovo numero lo converte }
    if (Lire.Text <> NumeroVecchioLire) or
       (Euro.Text <> NumeroVecchioEuro)
     then
      begin
        try    
// gestisce l'errore di conversione
          { se sono Lire le converte in Euro }

          if Lire.Focused then
            begin
            { memorizza l'importo in Lire }
            ImportoLire := StrToFloat(Lire.Text);
            { converte l'importo in Euro }
            ImportoEuro := StrToFloat(Lire.Text) / 1936.27;
            { visualizza l'importo convertito in Euro }
            Euro.Text := FormatFloat('###,###,##0.##', ImportoEuro);
            { visualizza l'importo in Lire formattato }
            Lire.Text := FormatFloat('###,###,###,###', ImportoLire);
            end;
          { se sono Euro gli converte in Lire }
          if Euro.Focused then
            begin
            { memorizza l'importo in Euro }
            ImportoEuro := StrToFloat(Euro.Text);
            { converte l'importo in Lire }
            ImportoLire := StrToFloat(Euro.Text) * 1936.27;
            { visualizza l'importo convertito in Lire }
            Lire.Text := FormatFloat('###,###,###', ImportoLire);
            { visualizza l'importo in Euro formattato }
            Euro.Text := FormatFloat('###,###,##0.##', ImportoEuro);
            end;
        except
          { se c'è un errore di conversione pulisce le caselle }
          on EConvertError do begin
                                          Lire.Text := '';
                                          Euro.Text := '';
                                          end;
        end;
        { memorizza i numeri appena convertiti }
        NumeroVecchioLire := Lire.Text;
        NumeroVecchioEuro := Euro.Text;
        { seleziona il numero convertito nella casella di testo
          in modo che si possa scrivere subito un nuovo numero senza
          dover prima cancellare il contenuto della casella stessa;
          se dovesse essere deselezionata la casella, modificato il
          numero lasciando i caratteri di formattazione (come il punto
          separatore di migliaia) ed infine premuto invio, l'errore
          di conversione verrebbe intercettato dal blocco except
          precedente }

        if Lire.Focused then begin
                                       Lire.SelStart := 0;
                                       Lire.SelLength := Length(Lire.Text);
                                       end;
        if Euro.Focused then begin
                                        Euro.SelStart := 0;
                                        Euro.SelLength := Length(Euro.Text);
                                        end;
      end
     else
     { se non è un nuovo numero pulisce le caselle }
      begin
        Lire.Text := '';
        Euro.Text := '';
      end;
  { viene tolta l'annotazione del segno decimale già usato }
  SegnoDecimaleGiaUsato := False;
  { imposta a non inseriti due decimali nella casella di testo Euro }
  DueDecimaliGiaInseriti := False;
  { viene annotata la pressione del tasto 'invio' }
  InvioAppenaPremuto := True;
  end;

// GESTIONE DEL TASTO '+' -------------------------------------------
  { controlla se è stato premuto '+' }

  if Key = '+' then     // oppure: if Key = #043
    begin
    { elimina la scrittura del '+' nella casella di testo }
    Key := #0;
    { controlla se non è stato appena premuto 'invio' }
    if InvioAppenaPremuto = False
      { se non è stato appena premuto 'invio' visualizza la finestra
        Messaggio che segnala un errore (si può sommare solo quanto
        è stato appena convertito) }

      then Messaggio.ShowModal
      { se è stato appena premuto 'invio' procede }
      else
      begin

      { viene utilizzata una stringa per gestire meglio i decimali }
      ValTransStrE := FormatFloat('########0.##', ImportoEuro);
      { somma al TotaleEuro }
      TotaleEuro := TotaleEuro + StrToCurr(ValTransStrE);
      { viene utilizzata una stringa per gestire meglio i decimali }
      ValTransStrL := FormatFloat('###########0', ImportoLire);
      { somma al TotaleLire }
      TotaleLire := TotaleLire + StrToCurr(ValTransStrL);
      { visualizza il TotaleLire nel primo pannello della StatusBar}
      StatusBar1.Panels[0].Text :=
         ' Tot.: ' + FormatCurr('###,###,###,##0', TotaleLire);
      { visualizza il TotaleEuro nel secondo pannello della StatusBar}
      StatusBar1.Panels[1].Text :=
         ' Tot.: ' + FormatCurr('###,###,##0.##', TotaleEuro);
      { viene tolta l'annotazione della pressione del tasto 'invio' }
      InvioAppenaPremuto := False;
      { stampa la strisciata (vedi la procedura StampaStrisciata) }
      StampaStrisciata(ValTransStrL, ValTransStrE, ' +');
      end;     // end else
    end;

// GESTIONE DEL TASTO '-' -------------------------------------------
  { controlla se è stato premuto '-' }

  if Key = '-' then     // oppure: if Key = #045 then
    begin
    { elimina la scrittura del '-' nella casella di testo }
    Key := #0;
    { controlla se non è stato appena premuto 'invio' }
    if InvioAppenaPremuto = False
      { se non è stato appena premuto 'invio' visualizza la finestra
        Messaggio che segnala un errore (si può sottrarre solo quanto
        è stato appena convertito) }

      then Messaggio.ShowModal
      { se è stato appena premuto 'invio' procede }
      else
      begin

      { viene utilizzata una stringa per gestire meglio i decimali }
      ValTransStrE := FormatFloat('########0.##', ImportoEuro);
      { sottrae al TotaleEuro }
      TotaleEuro := TotaleEuro - StrToCurr(ValTransStrE);
      { viene utilizzata una stringa per gestire meglio i decimali }
      ValTransStrL := FormatFloat('###########0', ImportoLire);
      { sottrae al TotaleLire }
      TotaleLire := TotaleLire - StrToCurr(ValTransStrL);
      { visualizza il TotaleLire nel primo pannello della StatusBar}
      StatusBar1.Panels[0].Text :=
         ' Tot.: ' + FormatCurr('###,###,###,##0', TotaleLire);
      { visualizza il TotaleEuro nel secondo pannello della StatusBar}
      StatusBar1.Panels[1].Text :=
         ' Tot.: ' + FormatCurr('###,###,##0.##', TotaleEuro);
      { viene tolta l'annotazione della pressione del tasto 'invio' }
      InvioAppenaPremuto := False;
      { stampa la strisciata (vedi la procedura StampaStrisciata) }
      StampaStrisciata(ValTransStrL, ValTransStrE, ' -');
      end;     // end else
    end;

// GESTIONE DEI TASTI ',' E '.' -------------------------------------
  { controlla se è stato premuto ',' o '.' (decimali) }

  if (Key = ',') or (Key = '.') then
  { se si digita un importo in Lire... }
    if Lire.Focused
      { ...elimina la scrittura di virgola o punto nella casella }
      then Key := #0
      { se si digita un importo in Euro ( se Euro.Focused)... }
      else
        { se non è già stato usato il segno decimale }
        if SegnoDecimaleGiaUsato = False
          then
            begin

            { viene scritta la virgola al posto del punto (decimale) }
            Key := ',';
            { viene annotato l'utilizzo del segno decimale }
            SegnoDecimaleGiaUsato := True;
            end
          { se è già stato usato il segno decimale viene annullato
             il carattere}

          else key := #0;
end;

procedure TEuroLire.EuroLireKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
begin
  { assegna a F1 la procedura di aiuto }
  if Key = VK_F1 then SBAiutoClick(Self);
  { assegna a F4 la procedura di cancellazione }
  if Key = VK_F4 then SBCancellaClick(Self);
  { assegna a F5 l'apertura della finestra Strisciata }
  if Key = VK_F5 then SBStrisciataClick(Self);
  { assegna a F7 la procedura di uscita }
  if Key = VK_F7 then SBEsciClick(Self);
  { assegna a F10 l'apertura della finestra Informazioni }
  if Key = VK_F10 then SBInformazioniClick(Self);
end;

procedure TEuroLire.EuroChange(Sender: TObject);
var
  I : integer;
  PosizioneVirgola: integer;
begin
{ questa procedura evita che nella casella di testo Euro non sia
  più possibile scrivere una virgola, dopo averne cancellata una
  con il backspace;
  evita inoltre la possibilità di scrivere più di due decimali di Euro }
{ viene eseguito solo se si inseriscono dati in Euro }

if Euro.Focused then
  begin

  { inizializza }
  PosizioneVirgola := 0;
  DueDecimaliGiaInseriti := False;
  { ciclo eseguito tante volte quanti sono i caratteri in Euro.Text }
  for I := 1 to Length(Euro.Text) do
    { legge un carattere e se è una virgola... }
    if Copy(Euro.Text, I, 1) = ',' then
      { ...ne memorizza la posizione }
      If PosizioneVirgola = 0 then PosizioneVirgola := I;
  { se non ci sono virgole imposta SegnoDecimaleGiaUsato a Falso }
  if PosizioneVirgola = 0 then SegnoDecimaleGiaUsato := False;
  { se ci sono virgole... }
  if PosizioneVirgola > 0 then
    { ...e ci sono due decimali... }
    if Length(Euro.Text) > (PosizioneVirgola + 1) then
      { ...viene impostato DueDecimaliGiaUsati a True }
      DueDecimaliGiaInseriti := True;
  end;
end;

procedure TEuroLire.SBStrisciataClick(Sender: TObject);
begin
  { stampa in MemoStrisciata i totali (N.B.: #09 è tabulazione) }
  if TotaleLire < 0 then
    Strisciata.MemoStrisciata.Lines.Add(FormatCurr('000,000,000,000'

         TotaleLire) + ' T' + #09 + FormatCurr('000,000,000.00'

              TotaleEuro) + ' T')
                          else
    Strisciata.MemoStrisciata.Lines.Add(' ' + FormatCurr('000,000,000,000'

         TotaleLire) + ' T' + #09 + ' ' + FormatCurr('000,000,000.00'

              TotaleEuro) + ' T');

  { apre la finestra (modale) Strisciata }
  Strisciata.ShowModal;
end;

procedure TEuroLire.StampaStrisciata(ColonnaLire, ColonnaEuro,

                      Segno: string);
var
  A: string;
  B: string;
  C: string;
begin
  { si assegnano le variabili }
  A := FormatCurr('000,000,000,000', StrToCurr(ColonnaLire));
  B := FormatCurr('000,000,000.00', StrToCurr(ColonnaEuro));
  C := Segno;
  { stampa nel MemoStrisciata la riga (N.B.: #09 è tabulazione) }
  Strisciata.MemoStrisciata.Lines.Add(' ' + A + C + #09 + ' ' + B + C);
end;

procedure TEuroLire.SBCancellaClick(Sender: TObject);
begin
  { azzera i valori ed annulla le stringhe di testo }
  ImportoLire := 0;
  ImportoEuro := 0;
  TotaleLire := 0;
  TotaleEuro := 0;
  ValTransStrL := '';
  ValTransStrE := '';
  Lire.Text := '';
  Euro.Text := '';
  StatusBar1.Panels[0].Text := '';
  StatusBar1.Panels[1].Text := '';
  Strisciata.MemoStrisciata.Clear;
  { imposta a non usato il carattere ',' o '.' nella casella di testo }
  SegnoDecimaleGiaUsato := False;
  { imposta a non inseriti due decimali nella casella di testo Euro }
  DueDecimaliGiaInseriti := False;
  { viene tolta l'annotazione della pressione del tasto 'invio' }
  InvioAppenaPremuto := False;
end;

procedure TEuroLire.SBAiutoClick(Sender: TObject);
begin
  { minimizza la finestra dell'applicazione, altrimenti rimarrebbe
    in primo piano impedendo di leggere l'aiuto in lenea }

  EuroLire.WindowState := wsMinimized;
  { apre l'aiuto in linea }
  Application.HelpCommand(HELP_CONTENTS, 0);
end;

procedure TEuroLire.SBInformazioniClick(Sender: TObject);
begin
  { apre la finestra (modale) informazioni }
  Informazioni.ShowModal;
end;

procedure TEuroLire.SBEsciClick(Sender: TObject);
begin
  { se l'aiuto in linea è aperto lo chiude prima di uscire dal programma }
  Application.HelpCommand(HELP_QUIT, 0);
  { chiude }
  Close;
end;

procedure TEuroLire.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  { assegna a FName il nome del file di configurazione Config.cel }
  FName := 'Config.cel';
  AssignFile(PosizioneFile, FName);
  { scrive nel file la posizione attuale della finestra e poi lo chiude }
  Reset(PosizioneFile);
  PosizioneData.X := EuroLire.Left;
  PosizioneData.Y := EuroLire.Top;
  Write(PosizioneFile, PosizioneData);
  CloseFile(PosizioneFile);
end;

procedure TEuroLire.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
begin
  { inpedisce di ridimensionare la finestra }
  Message.MinMaxInfo^.ptMinTrackSize.x := Larghezza;
  Message.MinMaxInfo^.ptMinTrackSize.y := Altezza;
  Message.MinMaxInfo^.ptMaxTrackSize.x := Larghezza;
  Message.MinMaxInfo^.ptMaxTrackSize.y := Altezza;
end;

end.

 


 

unit UStrisciata;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, StdCtrls, ComCtrls, ToolWin;

type
  TStrisciata = class(TForm)
    ToolBar1: TToolBar;
    StatusBar1: TStatusBar;
    MemoStrisciata: TMemo;
    SBEsci: TSpeedButton;
    procedure FormShow(Sender: TObject);
    procedure SBEsciClick(Sender: TObject);
    procedure MemoStrisciataKeyDown(Sender: TObject; var Key: Word;
         Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Strisciata: TStrisciata;

implementation

uses UEuroLire;

{$R *.DFM}

procedure TStrisciata.FormShow(Sender: TObject);
begin
  Strisciata.Top := EuroLire.Top + 25;
  Strisciata.Left := EuroLire.Left + 25;
end;

procedure TStrisciata.SBEsciClick(Sender: TObject);
begin
  Close;
end;

procedure TStrisciata.MemoStrisciataKeyDown(Sender: TObject;

                      var Key: Word; Shift: TShiftState);
begin
  { assegna a F7 la procedura di uscita }
  if Key = VK_F7 then SBEsciClick(Self);
end;

procedure TStrisciata.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  { stampa una riga vuota in uscita }
  MemoStrisciata.Lines.Add('');
end;

end.

 


 

unit UInformazioni;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TInformazioni = class(TForm)
    Image1: TImage;
    LCopyright: TLabel;
    LVersione: TLabel;
    DCopyright1: TLabel;
    DCopyright2: TLabel;
    DCopyright3: TLabel;
    OK: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure OKClick(Sender: TObject);
    procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
                                                     message WM_GetMinMaxInfo;
    procedure OKKeyDown(Sender: TObject; var Key: Word;

                          Shift: TShiftState);
private
  { Private declarations }
public
  { Public declarations }
end;

var
  Informazioni: TInformazioni;

implementation

uses UEuroLire;

{$R *.DFM}

procedure TInformazioni.FormCreate(Sender: TObject);
begin
  { se i caratteri sono 96 dpi... }
  if CaratteriDpi = 96
       { ...rimpicciolisce i controlli della form... }
       then Informazioni.ScaleControls(124, 100)
    { ...altrimenti rimane la dimensione ottimizzata per 120 dpi.
      N.B.: CaratteriDpi è una variabile globale definita in
      UEuroLire }

end;

procedure TInformazioni.FormShow(Sender: TObject);
begin
  { centra la finestra verticalmente }
  Top := EuroLire.Top +
                 (EuroLire.Height - Informazioni.Height) div 2;
  { centra la finestra orizzontalmente }
  Left := EuroLire.Left +
                 (EuroLire.Width - Informazioni.Width) div 2;
end;

procedure TInformazioni.OKClick(Sender: TObject);
begin
  Close;
end;

procedure TInformazioni.WMGetMinMaxInfo(var Message:

                                                                   TWMGetMinMaxInfo);
begin
  { inpedisce il ridimensionamento della finestra }
  Message.MinMaxInfo^.ptMinTrackSize.x := 240;
  Message.MinMaxInfo^.ptMinTrackSize.y := 145;
  Message.MinMaxInfo^.ptMaxTrackSize.x := 240;
  Message.MinMaxInfo^.ptMaxTrackSize.y := 145;
end;

procedure TInformazioni.OKKeyDown(Sender: TObject; var Key: Word;

                                                              Shift: TShiftState);
begin
{ risponde alla pressione del tasto funzione:
- se è F7 chiude,
- se è un altro tasto lo converte in una tabulazione per evitare
che la pressione di F7 dopo altri tasti non provochi più la
chiusura della finestra }

if Key = VK_F7 then Close else Key := VK_TAB;
end;

end.

 


 

unit UMessaggio;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TMessaggio = class(TForm)
    LCopyright: TLabel;
    DCopyright1: TLabel;
    DCopyright2: TLabel;
    DCopyright3: TLabel;
    OK: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure OKClick(Sender: TObject);
    procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
    message WM_GetMinMaxInfo;
    procedure OKKeyDown(Sender: TObject; var Key: Word;

                                           Shift: TShiftState);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Messaggio: TMessaggio;

implementation

uses UEuroLire;

{$R *.DFM}

procedure TMessaggio.FormCreate(Sender: TObject);
begin
  { se i caratteri sono 96 dpi... }
  if CaratteriDpi = 96
       { ...rimpicciolisce i controlli della form... }
       then Messaggio.ScaleControls(124, 100)
    { ...altrimenti rimane la dimensione ottimizzata per 120 dpi.
      N.B.: CaratteriDpi è una variabile globale definita in
      UEuroLire }

end;

procedure TMessaggio.FormShow(Sender: TObject);
begin
  { centra la finestra verticalmente }
  Top := EuroLire.Top +
                 (EuroLire.Height - Messaggio.Height) div 2;
  { centra la finestra orizzontalmente }
  Left := EuroLire.Left +
                 (EuroLire.Width - Messaggio.Width) div 2;
end;

procedure TMessaggio.OKClick(Sender: TObject);
begin
  Close;
end;

procedure TMessaggio.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
begin
  { inpedisce il ridimensionamento della finestra }
  Message.MinMaxInfo^.ptMinTrackSize.x := 240;
  Message.MinMaxInfo^.ptMinTrackSize.y := 145;
  Message.MinMaxInfo^.ptMaxTrackSize.x := 240;
  Message.MinMaxInfo^.ptMaxTrackSize.y := 145;
end;

procedure TMessaggio.OKKeyDown(Sender: TObject; var Key: Word;

                                                             Shift: TShiftState);
begin
  { risponde alla pressione del tasto funzione:
      - se è F7 chiude,
      - se è un altro tasto lo converte in una tabulazione per evitare che la

        pressione di F7 dopo altri tasti non provochi più la chiusura della

        finestra }
  if Key = VK_F7 then Close else Key := VK_TAB;
end;

end.