RichEditを隠したい

解決


onodat  2021-10-18 09:19:51  No: 149883  IP: 192.*.*.*

教えてください。環境はWindows7 32bit Delphi 10 32bitです。

RichEditはSetClipRegionでClip出来ないのでしょうか?

Excel風のGrid Componentを作成しているがClipRegionを設定しても,これに載せたRichEditの表示がClipされない。
Excelの表示枠固定と同じように,固定行とスクロール行とに分けスクロール行にClipRegionを設定してClipさせているが,RichEdit(動的に作成している)だけはClipされず固定行の表面に表示される。因みに,RichEditを非表示(Read only)として描画する(どちらもSendMessageを使用)とちゃんとClipされる。

編集 削除
HFUKUSHI  2021-10-18 10:22:20  No: 149884  IP: 192.*.*.*

試していないのでアレですが、とりあえずSelectClipRgn
https://docs.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-selectcliprgn
の戻値はERROR以外の値になっていますか?
# 明示的にRichEditはクリッピングリージョンがかからないという話は見たことがないですね…

編集 削除
onodat  2021-10-18 11:03:14  No: 149885  IP: 192.*.*.*

有難う御座います。
戻り値は=2ですのでチャントClipされているかと考えます。
例えば,RichEditでWindow枠の無い(機能だけ使える)ものがあれば対応できるのでは...と思います。

編集 削除
onodat  2021-10-20 11:46:46  No: 149888  IP: 192.*.*.*

更に少し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にしても変わらず。
と言うことで,親子の関係かとは思うが分からない?


編集 削除
None  2021-10-22 05:04:43  No: 149891  IP: 192.*.*.*

試してないけど

×  RichPanel.Parent := Self.Parent;
〇  RichPanel.Parent := Self;

Top と Left も値を入れる

編集 削除
onodat  2021-10-23 14:10:21  No: 149895  IP: 192.*.*.*

有難う御座いました。
何とか使えるレベルに漕ぎ着けたので本件クローズとします。基本は非表示(つまりReadOnly)として必要な時のみ(TextBox内をClickしたとき)Showとし編集できるようにする。RichEdit編集時Scrollで固定枠にかかったときはHideとする。
試行錯誤した方法が何かの役に立てばと思い,かいつまんで記載しておきます。

として送信したんですが,長文のせいかサーバーエラーとなり送信不可となったので,申し訳ありませんこれで終わりとします。

編集 削除