掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TJvRichEdit と TEditor の類似プロパティの使い分け (ID:44492)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
継承元の異なるコンポーネントに対するプロパティ代入 https://www.petitmonte.com/bbs/answers?question_id=7978 ↑この話の続きですよね。 わからんちんな私の理解ですが、考えてみました。 >前回の件のようなプロパティ設定を全てに対して設定するべきなのでしょうか これが「結局全部書き分けなきゃいけないのをなんとか楽したい」というのなら無理だと思いますが、 >常に Editor.SelLength、Editor.Lines などとアクセス出来るようにする方法があればいい こちらがメインで、「どうせ大変ならEditor.Nantokaで統一してカッコよく使いたい」 という要望であるなら、2つのコンポーネントを同じ方法で操作することだけを目的としたクラスを 作れば良いかと。 こういうのって、ラッパーって言うんですよね?(よく分かってない) TJvRichEditもTEditorも使ってないので、TMemoとTRichEditで作ってみました。 とりあえずLines、SelStart、SelLengthだけ実装しましたけど、面倒ですね。 (しかもTMemoとTRichEditなら本当はこんなことする必要ないので、何かむなしい) 以下、無駄に長くて失礼しますがコード例です。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Unit2; type TForm1 = class(TForm) Memo1: TMemo; RichEdit1: TRichEdit; CheckBox1: TCheckBox; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private 宣言 } Editor: TEditorWrapper; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Editor:=TEditorWrapper.Create(Memo1, RichEdit1); Editor.PlainEditor.HideSelection:=False; Editor.RichEditor.HideSelection:=False; CheckBox1Click(CheckBox1); end; procedure TForm1.FormDestroy(Sender: TObject); begin Editor.Free; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin Editor.PlainEditMode:=(Sender as TCheckBox).Checked; Editor.Lines.Add('Current: '+Editor.CurrentEditor.Name); end; procedure TForm1.Button1Click(Sender: TObject); begin Editor.Lines.Add('abcdef'); end; procedure TForm1.Button2Click(Sender: TObject); begin Editor.Lines.Add(Format('Start: %d Length: %d', [Editor.SelStart, Editor.SelLength])); Editor.SelStart:=2; Editor.SelLength:=7; end; end. unit Unit2; interface uses Classes, Controls, ComCtrls, StdCtrls; type TEditorWrapper = class(TObject) private FPEdit: TMemo; FREdit: TRichEdit; FPlainEditMode: Boolean; public constructor Create(PEdit: TMemo; REdit: TRichEdit); function CurrentEditor: TWinControl; function GetLines: TStrings; function GetSelStart: Integer; function GetSelLength: Integer; procedure SetLines(Value: TStrings); procedure SetSelStart(Value : Integer); procedure SetSelLength(Value : Integer); property PlainEditor: TMemo read FPEdit write FPEdit; property RichEditor: TRichEdit read FREdit write FREdit; property PlainEditMode: Boolean read FPlainEditMode write FPlainEditMode; property Lines: TStrings read GetLines write SetLines; property SelStart: Integer read GetSelStart write SetSelStart; property SelLength: Integer read GetSelLength write SetSelLength; end; implementation constructor TEditorWrapper.Create(PEdit: TMemo; REdit: TRichEdit); begin FPEdit:=PEdit; FREdit:=REdit; FPlainEditMode:=True; end; function TEditorWrapper.CurrentEditor: TWinControl; begin if FPlainEditMode then Result:=FPEdit else Result:=FREdit; end; function TEditorWrapper.GetLines: TStrings; begin if FPlainEditMode then Result:=FPEdit.Lines else Result:=FREdit.Lines; end; procedure TEditorWrapper.SetLines(Value : TStrings); begin if FPlainEditMode then FPEdit.Lines:=Value else FREdit.Lines:=Value; end; function TEditorWrapper.GetSelStart: Integer; begin if FPlainEditMode then Result:=FPEdit.SelStart else Result:=FREdit.SelStart; end; procedure TEditorWrapper.SetSelStart(Value : Integer); begin if FPlainEditMode then FPEdit.SelStart:=Value else FREdit.SelStart:=Value; end; function TEditorWrapper.GetSelLength: Integer; begin if FPlainEditMode then Result:=FPEdit.SelLength else Result:=FREdit.SelLength; end; procedure TEditorWrapper.SetSelLength(Value : Integer); begin if FPlainEditMode then FPEdit.SelLength:=Value else FREdit.SelLength:=Value; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.