問題タブ [tpanel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - TPanel に描画する方法
理想的には直接TPanelを描画する必要があるため、マウスイベントイベントのトラップの邪魔になる別のコンポーネントが上にないようにします(少し「サイズグリップ」を描画したい)。これを行うにはどうすればよいですか?
delphi - Delphiコンポーネントがペイントされていません
TransparencyプロパティとBrushStyle(TImageを使用)プロパティを実装したコンポーネント(TPanelの子孫)があります。
フォームにこのタイプのコンポーネントが1つあれば、問題ありません。このタイプのコンポーネントをフォームに追加すると、最初に表示されるコンポーネントのみがペイントされます。フォームが移動され、最初のコンポーネントが他のウィンドウの下またはデスクトップの外側にある場合、次のコンポーネントがペイントされます。
なにが問題ですか?
delphi - TPanel コンテンツを印刷するには?
私はTPanelを持っています。このパネルには、TImage の子孫、コントロールを含む他のいくつかのパネルなどがあります。実際、画像にはいくつかの図が含まれていますが、実行時にラベル付きの追加のパネルが作成され、ユーザーに追加情報を提供します。
最近、このパネルを印刷して、そのままの形で紙に載せてくれたらいいのにと言われた。手がかりはありますか?
delphi - Delphi: align = alTop を使用してコンポーネントの視覚的な順序をプログラムで調整する方法
多数のパネルを含むフォームがあり、それぞれに があるAlign=alTop
ため、フォームの上からうまく積み重ねられます。
ただし、これらのパネルの表示順序を動的に変更したい、つまり上下に移動したい。これを行う最善の方法は何ですか?
delphi - Delphi TPanel キャプション ラップを作成する
TPanel.Caption
Delphi (私の場合は Delphi 6) でテキストをラップする方法はありますか?
delphi - Delphi - 2 番目のフォームで tpanel と tbuttons を複製する
私のメイン フォームには、ツールバーとして機能するボタンを含む TPanel があります。このツールバーとボタンとその機能を 2 番目のフォームに複製/コピーしたいと考えています。
newmenu.merge(mainmenu) を使用すると、メニューのクローンを作成するのは簡単でした。これは、Tmainmenu を複製するための優れた近道でした。
しかし、イベントを手動で割り当てずにツールバーを簡単に複製し、タイマーを保持して、メインフォームの実際のメインメニューと比較して有効および無効になっているボタンを比較および追跡する方法に途方に暮れています。アプリケーションの実行内容に応じて、ツールバーのメイン ボタンがさまざまなタイミングで有効または無効になります。
ここに何かアイデアはありますか?これを簡単にするための提案やヒントをありがとう。
delphi - Tpanel のように動作する TCustomControl を作成する方法
Tpanel のように動作する TCustomControl を作成するにはどうすればよいですか? たとえば、ラベルや画像などのコンポーネントをドロップできる MyCustomComponent などです。
delphi - DelphiのTSplitterとパネルでこの望ましくない動作を回避するにはどうすればよいですか?
含まれているのは、私の問題を示す小さなプロジェクトです。私はTPageControl
メインフォームに合わせています。2つのタブシートのそれぞれに、パネルのクライアントを揃えています。これらの各パネルには、2つのサブパネルとスプリッターがあります。LHパネルとスプリッターは左に配置され、RHパネルはクライアントに配置されます。
基本的に、問題は2つのタブ間の相互作用です。実証するために:
- プログラムを実行する
- メインフォームを水平に伸ばします。パネル3は成長します
- スプリッターを右端まで移動します。パネル2は拡大し、パネル3は10ピクセルの最小幅の制約まで縮小します。
- タブシート2を選択します。パネル5は設計どおりで、メインフォームが引き伸ばされたときにパネル6が大きくなりました。
- メインフォームの幅を元の幅に減らします。パネル6の収縮が大きすぎる(望ましくない)
- タブシート1をクリックします。メインフォームの幅が再び大きくなります(望ましくありません)
OK、動作はおそらく整列されたパネルのルールの観点から説明できますが、誰かが操作の改善を提案できますか?
delphi - TPaintBoxの右端のちらつきをなくす方法(サイズ変更時など)
要約:
TFormと2つのパネルがあるとします。パネルはalTopとalClientに配置されます。alClientパネルにはTPaintBoxが含まれており、そのOnPaintには描画コードが含まれます。
コンポーネントのDoubleBufferedのデフォルト値はfalseです。
描画プロセス中、フォーム、パネルはすべて背景をペイントするため、ちらつきは明らかです。
フォームはパネルで覆われているため、WM_ERASEBKGNDメッセージを傍受することはおそらく問題ありません。そうでない場合は、フォームが背景をペイントするため、フォームのサイズが変更されると、パネルでちらつきが見られ、パネルの右端でちらつきが見られます。
次に、alTopパネルは一部のボタンのコンテナとして使用することを目的としているため、DoubleBufferedをtrueに設定して、Delphiにちらつきがないことを確認するのはおそらく問題ありません。おそらくパフォーマンスの負担はそれほど大きくないでしょう。
第3に、alClientパネルは別の図面コンポーネントのコンテナとしてのみ意図されているため、このパネルは最終的な図面の作成に関与していない可能性があります。この点で、標準のTPanelの代わりにTPanelの子孫を使用するのはおそらく良いことです。このTPanelの子孫では、保護されたプロシージャPaintをオーバーライドし、プロシージャ内では何もしません。特に、基本クラスTCustomPanel.PaintのFillRect呼び出しを回避するために、継承された呼び出しは行いません。さらに、WM_ERASEBKGNDメッセージを傍受し、内部では何もしません。これは、TPanel.ParentBackgroundがFalseの場合、Delphiが背景の再描画を担当し、Trueの場合、ThemeServiceが担当するためです。
最後に、TPaintBoxでちらつきなしでペイントするには、次のようにします。
(1)VCL組み込みの描画ルーチンを使用する場合は、おそらく次の方が適切です...
(2)OpenGLを使用し、OpenGLのダブルバッファを有効にします。
(3)..。
=== Q:TPaintBoxの右端のちらつきをなくす方法は?===
1つのTFormに対して、2つのパネルがあるとします。一番上のものはフォームに対してalTopに配置され、ボタンのコンテナと見なされます。もう1つは、フォームに対してalClientに配置され、描画コンポーネント(VCLのTPaintBoxやGraphics32のTPaintBox32など)のコンテナーと見なされます。後者のパネルでは、そのWM_ERASEBKGNDメッセージが傍受されます。
ここで、次のサンプルコードでTPaintBoxインスタンスを使用します。OnPaintハンドラーでは、ちらつきがないと予想される描画を描画するための2つの選択肢があります。選択肢1は、長方形を埋めた後に描画します。親パネルは背景を消去してはならないため、描画はちらつきがないようにする必要があります。選択肢2はTBitmapに描画し、そのCanvasはペイントボックスにコピーされます。
ただし、両方の選択肢がちらつき、2番目の選択肢が特にちらつきます。私の主な関心事は選択1に関するものです。フォームのサイズを変更すると、ちらつきの主要部分が右端で発生していることがわかります。なぜこれが起こるのですか?誰かが理由と可能な解決策についてコメントするのを手伝ってもらえますか?(ここでTPaintBoxの代わりにTPaintBox32を使用すると、右端がまったくちらつきません。)
私の2番目の懸念は、選択肢1を使用すると、ちらつきのごく一部がペイントボックスでランダムに発生することです。あまり明白ではありませんが、フォームのサイズをすばやく変更すると、それでも観察できます。さらに、選択肢2を使用すると、この種のちらつきはさらに深刻になります。その理由はわかりませんでした。考えられる理由と解決策について誰かがコメントするのを手伝ってもらえますか?
どんな提案でも大歓迎です!!
=== Q:パネルの背景の再描画を正しくインターセプトするにはどうすればよいですか?===
(別の質問でこれを尋ねる必要がある場合は、そのように言ってください。これを削除します。)
新しいVCLアプリケーションを作成し、サンプルコードを貼り付け、FormCreateをアタッチし、デバッグを実行します。フォームの上にマウスを置くと、パネルが背景をはっきりと塗り直していることがわかります。ただし、サンプルコードに示されているように、WM_ERASEBKGNDメッセージをインターセプトすることで、この動作をインターセプトする必要があります。
この3行をコメントアウトすると、
次に、WM_ERASEBKGNDメッセージをキャプチャできます。この違いについてはわかりません。
この動作の理由と、WM_ERASEBKGNDメッセージを正しくインターセプトする方法(ParentBackground:= Falseの場合)についてコメントするのに役立つ人がいますか?