TMS TAdvStringGrid inplace edit autosizerow
Hallo,
wenn ich den internen Editor vom TAdvStringGrid benutze und mehr Text als in die Zeile passt, wird ein Umbruch erzeugt. Leider wird aber die Zelle in der Höhe selbst nicht größer, d.h. man sieht nur die ersten beiden, oder sogar nur die letzte Zeile. Erst nach dem "Speichern" mache ich ein AutoSizeRow und es wird alles sichtbar. Kennt jemand eine Lösung, ich könnte das Grid zur Not auch ableiten, wenn etwas drumdrumprogrammiert werden müsste. Danke Heiko |
AW: TMS TAdvStringGrid inplace edit autosizerow
Hallo,
keiner eine Idee ? ;( Ich poste mal meine bisherigen Versuche. Ach so: Es geht hier nicht um Ctrl+Enter und neue Zeile, dass hatte ich mühsam hinbekommen, sondern um das fortwährende Tippen bis an den Rand, genau dann soll die Zellenhöhe vergrößert werden. Heiko
Delphi-Quellcode:
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. |
AW: TMS TAdvStringGrid inplace edit autosizerow
Hallo,
Zitat:
Delphi-Quellcode:
?
SizeWhileTyping
Gruß |
AW: TMS TAdvStringGrid inplace edit autosizerow
Hallo,
oh Mann !! das war's ;) Hier hatte ich schon mal rumprobiert. http://www.delphipraxis.net/112566-t...-wordwrap.html Und die ganze Zeit stochere ich in der TAdvInplaceEdit.KeyDown rum, wo genau das benutzt wird ! Danke ! Ich hatte das in der Zwischenzeit so gelöst:
Delphi-Quellcode:
Ein einfaches Property zu setzen, geht natürlich auch ;)iLines := SendMessage(SG.NormalEdit.Handle, EM_LINEFROMCHAR, Length(SG.NormalEdit.Text)-1, 0); iLines := iLines+1; { das +4 durch Ausprobieren ermittelt } iHeight := iLines*SG.Canvas.TextHeight('A')+4; if iHeight>SG.RowHeights[SG.Row] then begin SG.RowHeights[SGAkte.Row] := iHeight; end; Noch mal vielen Dank. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz