問題タブ [tframe]
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 - Delphi 7 - フォームに埋め込まれたフレームの MouseWheel イベントを処理しますか?
こんにちは、いくつかのフレームを含むフォームがあります。
一部のフレームでは、コンテンツをスクロールしたい (または少なくともマウスホイール イベントを処理したい)。
私は次のことを試しました:
フレームごとに OnMouseWheel イベント ハンドラを割り当てるだけ
親フォームの MouseWheel イベントをオーバーライドします。
残念ながら、どちらも機能していないようです。
- ケース 1 では、イベントは決してトリガーされませんが、親フォームのマウス ホイール ハンドラーはトリガーされます。
- ケース 2 では、フォーカスを受け取るコントロールは、マウスホイール イベントを送信したいフレームを保持するパネルです。
簡単に言えば、マウスホイールイベントをマウスカーソルが上にある一番上のコントロールに向けるにはどうすればよいですか(カーソルがどのフレーム/親/フォームなどに関係なく)?
delphi - フォームが TFrame の子の WM_NOTIFY メッセージを受信しないのはなぜですか?
WM_NOTIFY メッセージは、インプレースの「ツール ヒント」(メッセージ バルーン) やその他のコントロール通知によく使用されますが、TFrame にコントロールを配置すると、これらのコントロールに対して WM_NOTIFY メッセージは発生しません。これらのメッセージがフォームに送信されなくなったのはなぜですか?どうすればよいですか?
delphi - TScrollBoxにスクロールバーが表示されないのはなぜですか?
これは非常に単純な問題のように思えますが、スクロールボックスにスクロールバーを表示させることができず、頭がおかしくなります。
これが状況です。フォームの一部に可変数のフレームを表示する必要があります。これらのフレームが表示されている領域は、TSplitterを使用するか、フォームのサイズを変更することにより、サイズを変更できます。
フォームの作成時に、データベース内のレコードに基づいてフレームを動的に生成しています。このフレームは、フレームの配置を担当するFlowPanelの親になります。FlowPanelはScrollBoxにあります。
FlowPanelが原因で、ユーザーがTSplitterを使用したり、フォームのサイズを変更したりすると、フレームが再配置される場合があります。フレームのいずれかがフォームのビューの外に再配置された場合、ユーザーがアクセスできないフレームまでスクロールダウンできるように、ScrollBoxにスクロールバーが表示されることを期待しています。これは起こりません。スクロールボックスの寸法の外側のフローパネルの領域にあるフレームにはアクセスできません。
スクロールボックス内の単純なオブジェクトを使用していくつかのテストを作成しました。スクロールボックスに含まれるオブジェクトのいずれかがスクロールボックスの寸法の外側に表示される場合、スクロールボックスはスクロールバーを正しく配置します。
フローパネルがclClient(スクロールボックス)に位置合わせされているか、スクロールボックスの側面に固定されているか、またはこれらのいずれでもないかは関係ありません。
代わりにTPanelを使用して、パネルのOnResizeイベントハンドラーからコード内のフレームの配置と再配置を実行できることに気付きましたが、これがFlowPanelの目的です。
何が起きてる?私は多くの異なるスクロールボックスのプロパティをいじくり回しましたが、それでも機能させることができません。問題は何ですか、そして解決策はありますか?
Ok。私はEweの答えを正しいものとして選択していますが、この作品を作る秘訣は彼のコメントの1つにあり、私はまだ結果に完全に満足していません。
これがスクープです。ScrollBoxとFlowPanelをEweが提案した方法で構成しましたが、その構成が機能しなかったため、他の多くの設定を試してみました。これは、パネル内に多くのパネルがあり、多くのスプリッターがあり、フォーム自体がPageControlのTabSheetにペアレント化されているフォームのユーザーインターフェイスの複雑さによるものだと確信しています(フォームをスタンドとしてテストしたため、この事実を省略しました単独のフォームでも同じ結果が得られました)。
不格好な方法ではありますが、それを機能させたのは、FlowPanelのAutoWrapをオフとオンに切り替えるというEweの提案です。ScrollBoxのOnResizeイベントハンドラーに次のコードを追加しました。
サイズを変更するとちらつきが目立ちますが、希望どおりの結果が得られるので、それでも問題ありません。ユーザーがフォームのサイズを変更すると、常にそれらのディメンションを使用して再作成されるため、サイズ変更はユーザーが頻繁に行うことではありません。
c++ - 実行時にフォームから TFrame を削除する
C++ Builder を使用して VCL フォーム アプリケーションを作成しています。現在、一連のコンポーネントを含む TFrame があり、次のようになっています...
ボタン呼び出し「追加」もあります。基本的に、フォームの [追加] ボタンを押すたびに、新しい TFrame がフォームに追加され、前のフレームの下にテーブルのようなものが作成されます。複製を追加するには、作成する前に毎回 TFrame の名前を変更する必要があります。
したがって、TFrame の名前は、TFrame1、TFrame2、TFrame3 などになります。
今の問題は、TFrame の「X」ボタンを押すたびにその TFrame を削除したいので、その方法がよくわかりません。TFrameを作成するたびに、「X」ボタンの名前を変更して、Button1、Button2、Button3などのようにすることもできると考えていました。次に、プログラムを削除するには、ButtonXとTFrameXを一致させて、削除するTFrameを識別します。たとえば、ボタン 4 を押すと、TFrame4 と一致し、TFrame4 が削除されます。
このアイデアを実装する方法がわかりません。または、これを行う簡単な方法はありますか?
c++ - TFrame を使用したツリー構造
ペイントではうまく描けませんでした。ここでやろうとしているのは、TFrames を使用してツリー構造 (写真のようなもの) を作成することです。基本的に + ボタンを押すと、新しい TFrame がツリーに追加されます。私は C++ Builder を使用しており、TFrame を追加する方法を知っています。私の問題は、ツリーの緑色の線を描画する方法がわからないことです。
ありがとうございます。
runtime - 実行時にTframeを別のTframeに追加する
2つのtframeと追加ボタンがあります。ボタンが押されたときに、一方のtframeをもう一方のtframeに追加しようとしています。しかし、私たちの理由で、私のコードは機能していないようです。想定どおりにフレームを追加していません。エラーや実行はなく、コンパイルして実行しますが、ボタンを押しても何も起こりません。スクロールボックスにtframeを追加したときに機能するようになり、追加するtframeの場所を変更するだけでした。
TFrame2のコード
これは私がTFrame1自体に使用するコードです
lil bg info:tframeを別のtframeに追加する必要がある理由は、コンポーネントのグループを別のコンポーネントのグループに追加できるようにするためです。他の方法を知りませんでした。後でメインフォームにtframe2を追加します。
delphi - TFrame のコンポーネントに独自のイベント ハンドラを持たせるにはどうすればよいですか?
Delphi 2006 で、独立した TFrame 上のコンポーネントにイベント ハンドラを割り当てることができません。
TComboFrame
TCombo を含むフレームがあり、Combo1
これをメイン フォームのいくつかの場所で使用するとします。
TComboFrame のインスタンスをMyFrame1
メイン フォームに配置し、コンボにイベント ハンドラーを割り当てたい場合はMyFrame1
、フォームに配置したフレーム内の TCombo をクリックし、空の
OnChange
フィールドをダブルクリックします。オブジェクト インスペクタの [イベント] タブにあります。
通常、 は次のような名前で新しいハンドラーを作成します。
また、イベント ハンドラ名は、祖先 TComboFrame のコンポーネントの名前 ( Combo1
) と、フォームに配置したインスタンスの名前( ) の両方から派生しMyFrame1
ます。つまり、TComboFrame のそのインスタンスに固有です。次に、メイン フォームに配置したフレームの他のインスタンスに対してこれを行うと、それぞれが独自のイベント ハンドラーを取得します。
フレームのすべてのインスタンスに対して発生するイベント ハンドラーが必要な場合は、祖先フレーム自体を開いてそこで実行します。
これがどのように機能するかについての私の理解ですが、どこかで何かが間違っています。メイン フォームのフレームのいくつかのインスタンスのうち、独自のイベント ハンドラーを持つものもあれば、共通のイベント ハンドラーを持つものもあります。
私が試したことはありませんが、いくつかのフレームで共有されているこの共通のイベント ハンドラと Delphi が持っているように見えるこのファントム リンクを壊していません。
この状態を修復するにはどうすればよいですか? また、そもそも何が原因でしょうか?
** 更新 1 **
回答を読み、少し実験した結果、次の手順で問題のあるコンポーネントを修復できることがわかりました。
1) フレームのすべてのイベント ハンドラーを削除します。
2) フレームの名前を覚えて、フレームを削除します。
3) OK であることがわかっている別のものをコピーします (つまり、「個別」の独自のイベント名を持っています)。
4)削除したものの代わりにそれを貼り付けます。
5) 元の名前に戻します。
6) イベント ハンドラを作成します。
...少なくとも、少なくとも一度はうまくいきました...
** 更新 2 **
それを解決する別の方法は、オブジェクト インスペクタの空のイベント フィールドをダブルクリックしたときに作成されるイベント ハンドラ名を新しい一意の名前で上書きし、その名前を再度ダブルクリックすることです。次に、Delphi は一意の名前で空のハンドラを作成します。
delphi - Delphi 2010イベントを渡すための汎用プロパティとメソッドを備えたTFrameを使用できますか?
Delphi 2010 VCLプロジェクトでエンティティを検索するために使用するTFrameがあります。TFrameには、ユーザーが特定のフォームを開いてそのエンティティを参照できるようにするボタン編集があります。(すべてのブラウズフォームは、共通のベースブラウズフォームから継承します)現在、ベースフレームから継承することでこれを実現し、特定のフォームを起動するブラウズイベントを実装しています。毎回の唯一の違いは、クリックイベントに表示されるフォーム(タイプ)です。ジェネリックでこれを実現する方法はありますか。そうすれば、エンティティごとに同じコードを書き直すことなく(100を超える)、同じベースフレームを再利用できます。また、ホストフォームのフォーム作成時に、タイプ制約を渡して、参照時に適切なフォームを開きます。フレームにジェネリック型を追加してみました:
次に、ピッカーフレームで、ホストフォームのcreateイベントから呼び出すことができるStartを公開します。
真実は、私はDelphiでジェネリックスを実際に取得しておらず、これはどれも機能していません。以下は、フレームからの抜粋です。
誰かが同様の要件の経験がありますか?どんな助けでもいただければ幸いです。ありがとう
以下は、ラックマスターブラウザの例です。
基本クラス
delphi - TTabSheet 内で Tframe を中央に配置します。
を使用した Delphi アプリケーションがPageControl
ありTabSheets
ます。また、実行時に new を作成TabSheets
し、事前定義されたフレームのインスタンスを設定します。これらのフレームはうまく機能しますが、TabSheet
. を使用しようとしましFrame.Align := alClient
たが、うまくいきませんでした。関連するコードは次のとおりです。
CreateNewPage
の新しいインスタンスを作成し、TabSheet
そのPageControl
所有者と親を作成します。結果はグローバル変数に代入されますNewInputPage
。