
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2441 8e941d3f-bd1b-0410-a28a-d453659cc2b4
141 lines
3.1 KiB
ObjectPascal
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.
|