教えてください。環境はWindows7 32bit Delphi 10 32bitです。
RichEditはSetClipRegionでClip出来ないのでしょうか?
Excel風のGrid Componentを作成しているがClipRegionを設定しても,これに載せたRichEditの表示がClipされない。
Excelの表示枠固定と同じように,固定行とスクロール行とに分けスクロール行にClipRegionを設定してClipさせているが,RichEdit(動的に作成している)だけはClipされず固定行の表面に表示される。因みに,RichEditを非表示(Read only)として描画する(どちらもSendMessageを使用)とちゃんとClipされる。
試していないのでアレですが、とりあえずSelectClipRgn
https://docs.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-selectcliprgn
の戻値はERROR以外の値になっていますか?
# 明示的にRichEditはクリッピングリージョンがかからないという話は見たことがないですね…
有難う御座います。
戻り値は=2ですのでチャントClipされているかと考えます。
例えば,RichEditでWindow枠の無い(機能だけ使える)ものがあれば対応できるのでは...と思います。
更に少しTRYしました。TPanelにRichEditを載せればうまくいくのではと思い。
動的にPanelを作りそれを親にした。
RichPanel := TPanel.Create(Self);
RichPanel.Parent := Self.Parent;
RichPanel.BorderStyle := bsNone;
RichPanel.BevelOuter := bvNone;
RichPanel.SendToBack;
Text_Text := TRichEdit.Create(Self);
Text_Text.Visible := True;
Parent := RichPanel;
ここで,SendToBackをしないと,前と同じの常にTopで表示される。
一応これで隠れるようにはなって思いどうりの動作となった。
が残念ながら,編集ができない。まるでRichEditがReadOnlyの状態である。RichEditをBringToFrontにしても変わらず。
と言うことで,親子の関係かとは思うが分からない?
試してないけど
× RichPanel.Parent := Self.Parent;
〇 RichPanel.Parent := Self;
Top と Left も値を入れる
有難う御座いました。
何とか使えるレベルに漕ぎ着けたので本件クローズとします。基本は非表示(つまりReadOnly)として必要な時のみ(TextBox内をClickしたとき)Showとし編集できるようにする。RichEdit編集時Scrollで固定枠にかかったときはHideとする。
試行錯誤した方法が何かの役に立てばと思い,かいつまんで記載しておきます。
として送信したんですが,長文のせいかサーバーエラーとなり送信不可となったので,申し訳ありませんこれで終わりとします。
ツイート | ![]() |