lazarus-ccr/components/csvdocument/demo/mainfrm.pas

141 lines
3.1 KiB
ObjectPascal

unit mainfrm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
Grids, StdCtrls, ExtCtrls, CsvDocument;
type
TfmCSVTest = class(TForm)
btnSave: TButton;
cbbDelimiter: TComboBox;
Delimiter: TLabel;
SaveDialog: TSaveDialog;
sgView: TStringGrid;
mmSource: TMemo;
splTop: TSplitter;
mmResult: TMemo;
splBottom1: TSplitter;
mmCellValue: TMemo;
splBottom2: TSplitter;
UpdateTimer: TIdleTimer;
lblSource: TLabel;
lblOutput: TLabel;
lblCSVDoc: TLabel;
lblCellContent: TLabel;
pnButtons: TPanel;
btnLoad: TButton;
OpenDialog: TOpenDialog;
procedure btnSaveClick(Sender: TObject);
procedure cbbDelimiterChange(Sender: TObject);
procedure mmSourceChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure sgViewSelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
procedure mmCellValueChange(Sender: TObject);
procedure UpdateTimerTimer(Sender: TObject);
procedure btnLoadClick(Sender: TObject);
private
FDoc: TCSVDocument;
procedure UpdateView;
public
{ public declarations }
end;
var
fmCSVTest: TfmCSVTest;
implementation
{ TfmCSVTest }
procedure TfmCSVTest.mmSourceChange(Sender: TObject);
begin
FDoc.CSVText := mmSource.Text;
UpdateTimer.Enabled := True;
end;
procedure TfmCSVTest.btnSaveClick(Sender: TObject);
begin
if SaveDialog.Execute then
FDoc.SaveToFile(SaveDialog.FileName);
end;
procedure TfmCSVTest.cbbDelimiterChange(Sender: TObject);
begin
FDoc.Delimiter := cbbDelimiter.Text[1];
FDoc.CSVText := mmSource.Text;
UpdateTimer.Enabled := True;
end;
procedure TfmCSVTest.FormCreate(Sender: TObject);
begin
FDoc := TCSVDocument.Create;
FDoc.Delimiter := ';';
end;
procedure TfmCSVTest.FormDestroy(Sender: TObject);
begin
FreeAndNil(FDoc);
end;
procedure TfmCSVTest.sgViewSelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
begin
mmCellValue.OnChange := nil;
mmCellValue.Text := FDoc.Cells[aCol, aRow];
mmCellValue.OnChange := @mmCellValueChange;
end;
procedure TfmCSVTest.mmCellValueChange(Sender: TObject);
begin
if not Assigned(FDoc) then Exit; // qt workaround
FDoc.Cells[sgView.Col, sgView.Row] := mmCellValue.Text;
UpdateTimer.Enabled := True;
end;
procedure TfmCSVTest.UpdateTimerTimer(Sender: TObject);
begin
UpdateView;
mmResult.Text := FDoc.CSVText;
UpdateTimer.Enabled := False;
end;
procedure TfmCSVTest.btnLoadClick(Sender: TObject);
begin
if OpenDialog.Execute then
FDoc.LoadFromFile(OpenDialog.FileName);
UpdateView;
end;
procedure TfmCSVTest.UpdateView;
var
i, j: Integer;
begin
sgView.BeginUpdate;
try
i := FDoc.RowCount;
if sgView.RowCount <> i then
sgView.RowCount := i;
i := FDoc.MaxColCount;
if sgView.ColCount <> i then
sgView.ColCount := i;
for i := 0 to FDoc.RowCount - 1 do
for j := 0 to sgView.ColCount - 1 do
sgView.Cells[j, i] := FDoc.Cells[j, i];
finally
sgView.EndUpdate;
end;
end;
initialization
{$I mainfrm.lrs}
end.