私が間違えていた場合、私は...ユニコード・バイ・デフォルトのDelphi XEアプリケーションのメッセージダイアログでASCIIアート記号を使用する方法
申し訳ありませんが、被写体のオファーを検索しましたが、右のいずれかを取得するために管理していませんでした。もしそうなら、ここで正しい質問をしてください。
さて、ビジネスに戻ってください。状況:私は、アプリケーション内のいくつかのイベントのためのシンプルな「ステータスブリーフィング」プロバイダとしてShowMessage()を使用しています:今
procedure SatusBriefingDialog();
begin
if Sender = SomeObject then
begin
Application.NormalizeToMosts;
MessageDlg(Handle, PChar('The_string_that_forms_nice_informative_window/dialog'));
Application.RestoreTopMosts;
end;
end;
、私は最善の方法を選択することはできませんので、私はextended ascii tableを使用したい、それを磨くしたいのですが、それらにアクセスする。たぶん私はその魔法の機能を知らないだけ...
ここでは、OEMToANSI/OEMToCharと副機能を使用するアプローチです:http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_20381022.html。私はproboblyための、運でそれらを試してみました:
BOOL OemToChar(LPCSTR lpszSrc、 LPTSTR lpszDst )からの構文。 OEM定義の文字セットの文字 の NULLで終わる文字列へ
パラメータ
lpszSrc [中]のポインタ。
lpszDst [out]変換された文字列のバッファ へのポインタ。 OemToChar関数は ANSI関数として使用されている場合
、文字列がlpszSrcパラメータと同じアドレスに lpszDstパラメータを設定することにより、所定の位置に を翻訳することができます。 OemToCharがワイド文字機能の として使用されている場合、これはできません。
私は必要なもののChar(オード(170))です。 、Char(Ord(180)); Char(Ord(190)) - http://www.asciitable.com/。明らかに、デフォルトのWInXPコードページでは私はそれらを使うことができません。今、私は少しGoogleと、この解決策を見つけた:
FormShowイベントコード:
procedure TMain.FormShow(Sender: TObject);
var
i : longint;
begin
re.Font.Name := 'Terminal';
re.Font.Size := 9;
//seems that charset must be set last
re.Font.Charset := OEM_CHARSET;
re.DefAttributes.Name := 'Terminal';
re.DefAttributes.Size := 9;
re.DefAttributes.Charset := OEM_CHARSET;
re.SelectAll;
re.SelAttributes := re.DefAttributes;
//turn off richedit's auto font switching...
i := SendMessage(re.Handle, EM_GETLANGOPTIONS, 0, 0);
i := i and not IMF_AUTOFONT;
SendMessage(re.Handle, EM_SETLANGOPTIONS, 0, i);
end;
をまた、これらのフォントが正しく表示されます>> クーリエ新 ルシーダコンソール MS明朝
今、質問は - どのようなWindowsのダイアログ(API)は、OEMのcharset withing手続きを使用すると言うには最良の方法ですtはShowMessage()をトリガーします。 ? ShowMessage()をオーバーライドします。 ?リッチデジット機能を継承していますか?さまざまなOwnerDraw()またはWndProc()がアプローチしています...あまりにも多くのオプションが、... ... ...私は混乱しています。 :(
私が選択して、主観的に最も効果的でほとんどのコードなしの解決策を指摘してください。
あなたはあなたのプログラムをもっと悪く見せるだろうと思います。これはDOSではなく、UI全体を自分で提供する必要がありました。 OSはすでに見栄えの良いウィンドウを提供しています。独自のカスタムウィンドウを自由に作成することもできます。ボックス描画文字の代わりに、実際のボックスを描画するフォームにTPanelまたはTShapeを配置します。単純なメッセージボックスよりも少しだけ必要なものが必要な場合は、[* task dialog *](http://www.tmssoftware.com/site/atbdev5.asp)を使用してください。 –
これは具体的です(私と私の目標は私が開発したこのアプリケーションのために設定しました) - 私は現在のWineHQ develスナップショットと少なくとも部分的に互換性のあるアプリケーションを書こうとしていますので、OwnerDrawや様々なShowMessageの導出/オーバーロード/ /継承する技術。これらのVCLのいずれかをShowMessageまたはMessageBoxに入れることにした場合、WIneHQ環境下でジェット安定ではないWindowsハンドル操作が含まれます。 URL AutoDetectionは今まで動作していません...そのような内部機能の侵入に対して何を期待するのですか? ;) –
@HX_unbanned:パネルと形状のあるフォーム*が動作するはずです。 * that *を使用できない場合、なぜDelphiを使用しているのですか? –