Einzelnen Beitrag anzeigen

BoolString

Registriert seit: 2. Feb 2009
Ort: Varel
70 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: tStringGrid und In-Place-Editor Problem

  Alt 7. Aug 2010, 13:13
Sorry, daß meine Antwort so lange gedauerthat. Hab im schwedischen Nirgendwo gesessen und ein sporadisch aufploppends WLAN genutzt. Bin aber inzwischen wieder da...


@ibp
Danke für den Hinweis. Ich bin selbst schon einmal über auf den Link gestoßen; habe aber ob der Vielzahl von käuflich erwerbbaren StringGrid Komponenten damals etwas den Überblick verloren. Inzwischen habe ich mir das Manual runtergeladen und bin doch von der Mächtigkeit etwas angetan. Habe die gut 200 Seiten zwar bisher nur überflogen. Aber auf lange Sicht scheint das eine Option zu sein.
Mir geht es hier aber auch ein wenig darum zu lernen wie man diesen verflixten InplaceEditor richtig anspricht. Ich verstehe solche Sachen ehrlich gesagt am Besten, wenn ich Code dazu habe; bin inzwischen etwas eingerostet und begreife an Hand der aufgezeigten Herangehensweise dann doch etwas schneller

@plusplus
Ganz klar ist mir noch nicht wie du das Edit ansprichst. Ich denke mal, daß du nicht so eine oben im Formular gelagerte Eingabezeile wie unter Excel meinst. Bohrst du dann das Create auf und schickst ein Destroy beim onExit los? Hast du da evtl. ein paar Zeilen Quelltext?


Ich habe gerade (relativ vergeblich) versucht mit einem eigenen (KlassenCracker-)StringGrid eine entsprechende Funktionalität zu erzeugen. Aber irgendwie brachte das auch nicht den gewünschten Erfolg. Zudem ist es auch ein kleines Monster geworden:

Delphi-Quellcode:
type
 tTrickGrid = class;
 tExitCellEvent = Procedure (Sender: tTrickGrid; aCol, aRow: Integer; const edittext: string) of object;


  tTrickGrid = class (tStringGrid)
  private
    FExitCell : TExitCellEvent;
  protected
    Function CreateEditor: TInplaceEdit; override;
    Procedure ExitCell (const edittext: String; aCol, aRow: Integer); virtual;
  public
    property InplaceEditor;
  published
    property OnExitCell: TExitCellEvent read FExitCell write FExitCell;
  end;


  TForm1 = class (TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
      var Value: string);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


type

  tTrickInplaceEditor = class (tInplaceEdit)
  private
    FLastCol, FLastRow: Integer;
    procedure WMKillFocus(var msg: TMessage); message WM_KILLFOCUS;
    procedure WMSetFocus(var msg: TMessage); message WM_SETFOCUS;
  public
  end;


// ----------------------------------------------------------tTrickInplaceEditor

procedure tTrickInplaceEditor.WMKillFocus (Var msg: TMessage);
begin
  tTrickGrid(Grid).ExitCell (Text, FLastCol, FLastRow);
  inherited;
end;


procedure tTrickInplaceEditor.WMSetFocus (Var msg: TMessage);
begin
  FLastCol := tTrickGrid (Grid).Col;
  FLastRow := tTrickGrid (Grid).Row;
  inherited;
end;


// -------------------------------------------------------------------tTrickGrid
Function tTrickGrid.CreateEditor: tInplaceEdit;
begin
  result := tTrickInplaceEditor.Create (Self);

end;


procedure tTrickGrid.ExitCell (Const EditText: String; aCol, aRow: Integer);
begin
  If Assigned (fExitCell) THen
  Begin
    fExitCell (Self, aCol, aRow, EditText);
    fExitCell (Self, 0, 0, EditText);
  end;
end;

// -------------------------------------------------------------------StringGrid


procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
  var Value: string);
begin
// tTrickGrid (StringGrid1).SetEditText (aCol, aRow, Value);
// tTrickGrid (StringGrid1).CreateEditor;
end;


Vielleicht kann mir ja jemand hierbei noch einmal erklären, wie ich meinen Gedankengang sortieren müsste, damit so etwas funktioniert...

Beste Grüße

Jan
  Mit Zitat antworten Zitat