問題タブ [tlabel]
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 - グラフィックを TLabel に追加する際の問題
TLabel から継承されたコンポーネントを Delphi で作成しようとしており、TLabel.Paint にいくつかのカスタム グラフィックが追加されています。グラフィックをテキストの左側に配置したいので、GetClientRect をオーバーライドしました。
このソリューションには、解決したい大きな問題があります。コントロールの「グラフィック領域」をクリックすることはできず、ラベル領域のみをクリックすることはできません。キャプションが空の文字列の場合、デザイナーでコンポーネントをクリックしても選択できません。何か案は?
delphi - TLabelをDelphiのハイパーリンクのように動作させるにはどうすればよいですか?
TLabelをDelphiのハイパーリンクのように動作させるにはどうすればよいですか?
注:下位互換性の問題があるため、TLinkLabelの使用には興味がありません。
delphi - TLabelのキャプションがクリップされている(つまり、省略記号を使用して描画されている)かどうかをプログラムで判断するにはどうすればよいですか?
TLabel
withをにEllipsisPosition
設定していてepEndEllipsis
、テキストが現在クリップされているかどうかを確認できるようにする必要があります。テキストを表示するために必要な面積を自分で計算し、それをラベルの実際の寸法と比較する以外に、これを行うためのより簡単でエレガントな方法を思いついた人はいますか?
実際、フェイルセーフな方法で必要な領域を計算することも、思ったほど簡単ではないようです...たとえば、TCanvas.GetTextHeight
改行は考慮されていません。
TCustomLabel.DoDrawText
内部的に、DrawTextW
またはフラグDrawThemeTextEx
とともにDT_CALCRECT
使用して、省略記号を使用するかどうかを決定します。そこにはかなり多くのコードが含まれており、そのすべてが宣言されていprivate
ます。そのコードをすべて複製するだけでは、私の本では「エレガント」とは言えません...
何か案は?
(誰かがDelphiバージョン固有のソリューションを思いついた場合に備えて、私はDelphi 2010を使用しています)
更新1:コードを複製せずにラベルに必要なサイズ計算を実行させるためにTCustomLabel.DoDrawText(lRect, DT_CALCRECT)
(単に宣言されている)直接呼び出すことができることがわかりました。protected
一時的に設定EllipsisPosition
するepNone
か、一時的なラベルインスタンスを完全に使用する必要があります。これは実際にはそれほど悪くはなく、もっと簡単な解決策を誰も考えられないのであれば、私はそれを使うかもしれません。
更新2:別の回答としてソリューションを追加しました。予想よりもかなり単純であることが判明したので、おそらくそれを行うためのより簡単でより良い方法はありませんが、念のため、この質問をもう少し長く開いたままにしておきます。
delphi - TLabelのサイズ変更イベントを作成する方法(TGraphicControl)
TLabelの子孫を作成しようとしています。これは、テキストの幅がラベルの幅を超えると、キャプション全体のヒントを表示します。EllipsisPositionプロパティをepEndEllipsisに設定しましたが、キャプションは最後に省略記号で自動的に短縮されます。それはいいです。
ただし、ヒントを設定するためにテキストが短縮されていることを通知する必要があります。私の場合、これはテキストが変更されたとき(メッセージCM_TEXTCHANGED)とコンポーネントのサイズが変更されたときにのみ発生する可能性があります。
それが私の質問です。TLabelのサイズが変更されたことをどのように通知できますか?そこにアンカーがあるので、フォームに合わせてサイズが変更されますが、別のTLabelの子孫でラップしたいと思います。
このコードは機能しますが、もっと良い方法はありませんか?WM_EXITSIZEMOVEのようなものですが、TGraphicControlで機能しますか?
どうもありがとう :)
delphi - デルファイのTPanelで親になっているすべてのTPanelを別のTPanelにコピーするにはどうすればよいですか?
デルファイフォームにTPanelがあります。ボタンを押して他のパネルに配置すると、このTPanelで親になっているすべてのTPanelをコピーしたいと思います。それを行う方法はありますか?ありがとう。
delphi - Delphi TLabel のフォントをイタリック体に変更すると、末尾が切り落とされます - なぜですか?
フォントが Arial Regular 16 に設定されたデフォルトの TLabel の簡単なデモを以下に示します。
ボタンがクリックされたときのコードは次のとおりです。
ボタンをクリックすると、最後の文字が切り捨てられます。つまり:
デフォルトでは、TLAbel.AutoSize は true なので、これで問題ないはずです。これは XE であり、Delphi 7 も同じです。これはバグですか?
delphi - Delphi TLabelキャプションのタブ文字の動作は定義されていますか?
タブ文字を文字列に入れてから、文字列からラベルのCaptionプロパティを割り当てると、タブ文字は何をしますか?
CR文字はリターンを引き起こします。これは、複数行のキャプションを表示するのに役立ちます。タブ文字は、ある種のタブ操作を実行しているように見えます-この動作が定義されているのか、予測可能であるのか疑問に思います。(動作はDelphiではなくWindowsによって決定されると思います)。
delphi - Delphi XE2 TLabel のグローサイズにより、画面の左上隅にグラフィックの問題が発生する
アプリを XE から XE2 に移植して以来、奇妙なバグに気付きました。ide でフォームを開くか、アプリを実行するだけで、画面の左上隅 (フォームの外) に白い四角いボックスが描画されます。マウスまたはウィンドウをホバーすると離れます。これを TLabel まで追跡しました。フォームにドロップして Glowsize を 0 より大きく設定するだけで問題が発生します。
再インストールして最新の XE2 update3 に更新しましたが、問題は引き続き発生します。誰が何が起こっているのか手がかりを持っていますか?
delphi - MinimizeName で使用する MaxLen パラメーターの取得
Vcl.FileCtrl ユニットの MinimizeName 関数を使用して TLabel に非常に長いファイル名を付けようとしていますが、関数で使用される MaxLen パラメータを取得する方法がわかりません。値をハードコーディングすると、有効な結果が表示されます。しかし、フォームはサイズ変更できるので、動的にしたい=サイズ変更イベントで変更します。
lblLicenseFile.Width // 文字列が長すぎる lblLicenseFile.Width - 10 //文字列が長すぎる Trunc(lblLicenseFile.Width / lblLicenseFile.Font.Size) //文字列が非常に短い
このピクセル数を計算する何らかの方法が必要です
MinimizeName(const Filename: TFileName; Canvas: TCanvas; MaxLen: Integer): TFileName; MaxLen は、キャンバスにファイル名を描画するために使用できる長さ (ピクセル単位) です。