unit GestoreForm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLType,
lima;
type
{ TForm1 }
TForm1 = class(TForm)
ButtonCancella: TButton;
ButtonRicerca: TButton;
EditParola: TEdit;
Label1: TLabel;
LabelIndicazioni: TLabel;
MemoRisultati: TMemo;
OpenDialogDizionario: TOpenDialog;
procedure ButtonCancellaClick(Sender: TObject);
procedure ButtonRicercaClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ private declarations }
nomeFile:string;
archivio:tlima;
procedure cancella;
procedure RiapriArchivio;
function test(prima,seconda:string):boolean;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Text:='Cruciverba';
LabelIndicazioni.Caption:='Parola da cercare '+#13+#10+'(indicare con * i caratteri ignoti)';
MemoRisultati.ReadOnly:=true;
archivio:=tlima.crea;
nomeFile:='parole\diz.txt';
end;
procedure TForm1.FormShow(Sender: TObject);
begin
OpenDialogDizionario.InitialDir:=GetCurrentDir;
OpenDialogDizionario.Filter:='File testuali|*.txt|tutti i file|*.*';
RiapriArchivio;
archivio.ChiudiFile;
cancella;
end;
function TForm1.test(prima,seconda:string):boolean;
var i,fine:word;
risultato:boolean;
begin
fine:=length(prima);
i:=1;
risultato:=fine=Length(seconda);
while (i<=fine) and (risultato) do
begin
risultato:=(upCase(prima[i])=upCase(seconda[i])) or (prima[i]='*');
i:=i+1;
end;
test:=risultato;
end;
procedure TForm1.RiapriArchivio;
var messaggio:string;
me:PChar;
begin
if not archivio.ApriFile(nomeFile, 'R') then
begin
if OpenDialogDizionario.Execute then
begin
nomeFile:=OpenDialogDizionario.FileName;
end
else
begin
messaggio:='File '+archivio.GetNomeFile+' non trovato !';
me:=StrAlloc(length(messaggio)+2);
strPCopy(me, messaggio);
Application.MessageBox(me, 'Errore', MB_ICONHAND);
strDispose(me);
Application.Terminate;
end;
end;
end;
procedure TForm1.ButtonCancellaClick(Sender: TObject);
begin
cancella;
EditParola.SetFocus;
end;
procedure TForm1.ButtonRicercaClick(Sender: TObject);
var contatore:word;
parola,lettura:string;
begin
RiapriArchivio;
parola:=EditParola.Text;
contatore:=0;
MemoRisultati.Lines.Clear;
while not archivio.fine do
begin
lettura:=archivio.leggi;
if test(parola, lettura) then
begin
contatore+=1;
MemoRisultati.Lines.Add(lettura);
end;
end;
if contatore>1 then
begin
MemoRisultati.Lines.Add('---------------------------------');
MemoRisultati.Lines.Add(format('Trovate %d parole', [contatore]));
end;
if contatore=0 then
MemoRisultati.Lines.Add('Ricerca fallita');
archivio.ChiudiFile;
EditParola.SetFocus;
EditParola.SelLength:=0;
EditParola.SelStart:=length(EditParola.Text);
end;
procedure TForm1.cancella;
begin
EditParola.Text:='';
MemoRisultati.Text:='';
end;
end.