unit gestore_del_form;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, grafica, balistica;
type
TForm1 = class(TForm)
ImageCampoTiro: TImage;
LabeledEditVelocita: TLabeledEdit;
LabeledEditAngolo: TLabeledEdit;
ButtonTiro: TButton;
ButtonCancella: TButton;
LabelBalistica: TLabel;
procedure FormCreate(Sender: TObject);
procedure ButtonCancellaClick(Sender: TObject);
procedure ButtonTiroClick(Sender: TObject);
private
{ Déclarations privées }
campo:ttavola;
procedure cancella;
procedure traccia(colpo:traiettoria);
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function rimpiazza(messaggio:string; vecchio,nuovo:char):string;
var i:integer;
begin
i:=1;
while i <= length(messaggio) do
begin
if messaggio[i] = vecchio then
messaggio[i] := nuovo;
i:=i + 1;
end;
rimpiazza:=messaggio;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
campo:=ttavola.crea(ImageCampoTiro.Canvas, -10.0, -10.0, 2000.0);
campo.tinta:=$1030f0;
cancella;
self.Caption:='Lanci';
end;
procedure TForm1.cancella;
begin
LabeledEditVelocita.Text:='';
LabeledEditAngolo.Text:='';
LabelBalistica.Caption:='';
campo.cancella($051006);
campo.spessore:=1;
campo.assi($808080);
campo.spessore:=2;
end;
procedure TForm1.ButtonCancellaClick(Sender: TObject);
begin
cancella;
LabeledEditVelocita.SetFocus;
end;
procedure TForm1.traccia(colpo:traiettoria);
var t0,volo,passo:double;
tratto:tSegmento;
begin
t0:=0.0;
volo:=colpo.tempoVolo;
passo:=(volo - t0) / 800.0;
colpo.calcolo(tratto.inizio, t0);
while t0 < volo do
begin
t0:=t0 + passo;
colpo.calcolo(tratto.fine, t0);
campo.linea(tratto);
tratto.inizio:=tratto.fine;
end;
end;
procedure TForm1.ButtonTiroClick(Sender: TObject);
var colpo:traiettoria;
velocita,angolo:double;
begin
velocita:=StrToFloatDef(rimpiazza(LabeledEditVelocita.Text, '.', ','), -10.0);
angolo:=StrToFloatDef(rimpiazza(LabeledEditAngolo.Text, '.', ','), -10.0);
if (velocita > 10) and (velocita < 170) and (angolo > 1) and (angolo < 80) then
begin
colpo.celere:=velocita;
colpo.alzata:=angolo;
traccia(colpo);
LabelBalistica.Caption:=format('Tempo di volo: %0.3f s; gittata: %0.2f m; altezza massima: %0.2f m', [colpo.tempoVolo, colpo.gittata, colpo.altezzaMassima]);
end
else
begin
cancella;
LabelBalistica.Caption:='I valori inseriti non sono corretti.';
LabeledEditVelocita.SetFocus;
end;
end;
end.