2016-05-17 13 views
0

私はdllを使用して既存のアプリケーションに多数のフォームを挿入しています。
私は既存のアプリケーションを制御しておらず、ソースコードも持っていません。
(私はソースコードがもう存在しないと思う)。styleservicesが有効になっていない場合、texthintを有効にできますか?

TEditTextHintと表示したいとします。
フォームデザイナーではこれは機能しますが、アプリケーションでは機能しません。
StyleServices(これはThemeServices(以前は非推奨)と呼ばれていました)が有効でないため、TextHintが無効になっています。

明らかに私はアプリケーションのスタイルを有効にすることはできません。私が持っているものはすべてdllです。
texthintを表示する方法はありますか?

私は在庫を使用することを好むTEdit

dllはDXで書かれており、古いアプリケーションはD7で書かれています。
私は、追加のスタイリング/テーマなどについては気にしません。私はちょうどテクスチャを表示したい。

+0

あなたがスタイルを言うとき、あなたはテーマを正しく意味しますか? VCLスタイルではなく、Windowsがテーマを提供しました。あなたは確かにあなたのDLLのフォームにそれらを有効にすることができます。これを行うには、アクティベーションコンテキストを使用する必要があります。 –

+0

私はこの質問を見ました:http://stackoverflow.com/questions/31549854/delphi-xe8-tedit-texthint-disappears-when-receiving-focusおそらく解決策は、これらの線のどこかにあります。 – Johan

+0

私は単にテクスチャを表示したいとは思っていません。これは 'StyleServices'(別名' ThemeServices')によって管理されているようです。 – Johan

答えて

0

テクスチャを表示する方法はありますか?株式TEdit

標準TextHint機能のみを視覚スタイルが有効になっているときに動作EM_SETCUEBANNERメッセージ、に依存しています。

を、このAPIを使用するには、Comclt32を指定するマニフェストを提供する必要があります.dllバージョン6.0。マニフェストの詳細については、Enabling Visual Stylesを参照してください。

ビジュアルスタイルは、あなたにあなたのコードを注入されているアプリで有効になって、あなたが求めているものを行うための唯一の方法は、TEditウィンドウをサブクラス化することであり、そのテキストが空のときにそれを手動でカスタム描画されていない場合。

+0

アクティベーションコンテキストを使用してテーマを有効にすることができます –

+0

@DavidHeffernan:私はそれに精通していませんが、それを読んで、どのように役立ちますか? DLLは、既存の編集コントロールにTextHintを適用するために別のアプリケーションに挿入されていますが、DLLは独自の編集コントロールを作成していません。アクティベーションコンテキストは呼び出し元のスレッドにのみ適用され、ウィンドウをスレッド間でサブクラス化して、編集のスレッドにコードを挿入することはできません。 Editコントロールが作成されたときにVisual Stylesが有効になっていなければ、EM_SETCUEBANNERメッセージを受け入れるようにEditのスレッドのアクティベーションコンテキストを変更することはできません。あなたがそれを行う方法を知っていない限り... –

+0

ヨハンは、私が読んでいるように、注入されたコードで問題のフォームを作成しています。 –

関連する問題