unit Unit85;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Grids, BaseGrid, AdvGrid, ExtCtrls, frmctrllink;
type
TForm85 =
class(TForm)
SG: TAdvStringGrid;
Panel1: TPanel;
Timer1: TTimer;
Button1: TButton;
RichEdit1: TRichEdit;
FormControlEditLink1: TFormControlEditLink;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SGKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
procedure RichEdit1Change(Sender: TObject);
private
//SG: TAdvStringGrid;
procedure HandleCanEditCell(Sender: TObject; ARow, ACol: Integer;
var CanEdit: Boolean);
procedure HandleGetEditorType(Sender: TObject; ACol, ARow: Integer;
var AEditor: TEditorType);
procedure HandleEditingDone(Sender: TObject);
procedure HandleGetEditorProp(Sender: TObject; ACol, ARow: Integer;
AEditLink: TEditLink);
public
{ Public-Deklarationen }
end;
var
Form85: TForm85;
implementation
{$R *.dfm}
procedure TForm85.Button1Click(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TForm85.FormCreate(Sender: TObject);
begin
//SG := TAdvStringGrid.Create(Self);
SG.Parent := Self;
SG.Align := alClient;
SG.Navigation.AlwaysEdit := True;
SG.OnCanEditCell := HandleCanEditCell;
SG.OnGetEditorType := HandleGetEditorType;
SG.OnEditingDone := HandleEditingDone;
SG.OnGetEditorProp := HandleGetEditorProp;
SG.ColCount := 4;
SG.RowCount := 2;
SG.FixedCols := 0;
SG.FixedRows := 0;
SG.Cells[0,0]:= '
Das ist ein langer Text in 0,0';
SG.Cells[0,1]:= '
Das ist ein langer Text in 0,1';
SG.Cells[1,0]:= '
Das ist ein langer Text in 1,0';
SG.Cells[1,1]:= '
Das ist ein langer Text in 1,1';
SG.Cells[2,0]:= '
Das ist ein langer Text in 2,0';
SG.Cells[2,1]:= '
Das ist ein langer Text in 2,1';
SG.Cells[3,0]:= '
Das ist ein langer Text in 3,0';
SG.Cells[3,1]:= '
Das ist ein langer Text in 3,1'+#13#10+'
1'+#13#10+'
2';
SG.AutoSizeCol(0);
SG.AutoSizeCol(1);
SG.AutoSizeCol(2);
SG.AutoSizeCol(3);
SG.AutoSizeRow(0);
SG.AutoSizeRow(1);
end;
procedure TForm85.HandleCanEditCell(Sender: TObject; ARow, ACol: Integer;
var CanEdit: Boolean);
begin
CanEdit := True;
end;
procedure TForm85.HandleGetEditorType(Sender: TObject; ACol, ARow: Integer;
var AEditor: TEditorType);
begin
//AEditor := edNormal;
//AEditor := edRichEdit;
AEditor := edCustom;
SG.EditLink := FormControlEditLink1;
SG.EditLink.WantKeyReturn:= True;
end;
procedure TForm85.RichEdit1Change(Sender: TObject);
var
SL: TStringList;
RE: TRichEdit;
iLines : Integer;
iHeight : Integer;
R: TRect;
begin
RE:= TRichEdit(Sender);
SL:= TStringList.Create;
SL.Text := RE.Text;
iLines := SL.Count;
if iLines>0
then
begin
iHeight := iLines*SG.Canvas.TextHeight('
A')+4;
if iHeight>SG.RowHeights[SG.Row]
then
begin
SG.RowHeights[SG.Row] := iHeight;
R.Left := 0;
R.Top := 0;
R.Right:= SG.ColWidths[SG.Col];
R.Bottom := SG.RowHeights[SG.Col];
SG.EditLink.SetRect(R);
end;
end;
SL.Free;
end;
procedure TForm85.SGKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if (Key=VK_RETURN)
and
(ssCtrl
in Shift)
then
begin
end;
end;
procedure TForm85.Timer1Timer(Sender: TObject);
var
SL: TStringList;
iLines : Integer;
iHeight : Integer;
begin
//Timer1.Enabled := False;
//SG.RowHeights[SG.Row]:=SG.RowHeights[SG.Row]+SG.Canvas.TextHeight('A');
if SG.EditMode=False
then
begin
Exit;
end;
SL := TStringList.Create;
try
SL.Text := SG.InplaceRichEdit.Text;
iLines := SL.Count;
if iLines>0
then
begin
iHeight := iLines*SG.Canvas.TextHeight('
A')+4;
if iHeight>SG.RowHeights[SG.Row]
then
begin
SG.RowHeights[SG.Row] := iHeight;
end;
end;
finally
SL.Free;
end;
end;
procedure TForm85.HandleGetEditorProp(Sender: TObject; ACol, ARow: Integer;
AEditLink: TEditLink);
begin
SG.InplaceRichEdit.PlainText := True;
end;
procedure TForm85.HandleEditingDone(Sender: TObject);
begin
SG.AutoSizeRow(SG.Row);
end;
end.