こんにちは。
いつもお世話になっております。
開発環境は、delphiXE3 enterprise(update2適用)、win7(sp1)です。
実行(テスト)環境は、win8.1です。
SetLocaleInfoを使ってロケールのカレンダーを西暦から和暦に変更しています。
3台のwin8.1でテストしました。
2台は何の問題もなく和暦変換できました。
でも1台は、SetLocaleInfoでエラーになっているみたいで画面が表示できませんでした。
SetLocaleInfoはシステム起動時に実行しています。
SetLocaleInfoからの戻り値は何もありませんでした。
GetLastErrorを書いてもSetLocaleInfoで止まってしまうのでエラーを拾えません。
エラーになった1台は、いろいろなソフトが入っているので、テスト機としては万全とは言えませんが、1台で動かないとなるとリリースして良いものか悩んでしまいます。
SetLocaleInfoでエラー解除する方法はあるのでしょうか?
>SetLocaleInfoで止まってしまうので
ちなみに、SetLocaleInfoの部分をコメントアウトした場合、止まらず、正常に起動(画面が表示)しますか?
こういうときこそ再現可能な最小限のプログラムを作成、提示するのがよいと思います。
SetLocaleInfoをコメントアウトした場合正常に起動します。
エラーが出てたマシンでもコメントアウトして正常に起動します。
function fSetLocaleInfo(Sender: TObject; cLCType:LCTYPE; sValue:string):Boolean;
var sTemp:string;
begin
sTemp:=sValue;
Result:=SetLocaleInfo(LOCALE_USER_DEFAULT,cLCType,PChar(sTemp));
end;
fSetLocaleInfo(sender,LOCALE_ICALENDARTYPE,LOCALE_JAPANESE_CALENDAR);
fSetLocaleInfo(sender,LOCALE_SLONGDATE,LOCALE_JAPANESE_LONGDATE);
fSetLocaleInfo(sender,LOCALE_SSHORTDATE,LOCALE_JAPANESE_SHORTDATE);
SetLocaleInfoから処理が返ってくれば何とかなるんですが、何も返らずSetLocaleInfoで止まってしまうので、和暦変換の後に記述しているshowまで処理が進まず画面が表示されないでいます。
タスクマネージャーを確認すると、実行ファイルは起動しているみたいです。
プログラム自体、並列にしている訳ではないです。
API関数から、SetLocaleInfoから処理が戻らなかった場合、どうすれば良いのでしょうか?
処理が戻ってないと検出はできるのでしょうか?
以前同じ内容を質問されていて解決していますが
その続きはご覧になってますか?
https://www.petitmonte.com/bbs/answers?question_id=8415
すみません。
続きは読んでいたのですが、解決をチェックしていたので、投稿しませんでした。
同じ内容と言えば同じなんですが、今回は少し違ったので、新しく投稿しました。
今回お聞きしたいのは、API関数SetLocaleInfoから処理が戻ってこない場合がある。
それを拾って本筋の処理(FormCreate)に戻すことができるのかということです。
FormCreateでSetLocaleInfoを呼び出している形になっています。
よろしくお願いします。
ボタンクリックで、
SetLocaleInfo(それと、処理が戻ったか確認するMessageDlgなど)
だけを行うテストプログラムを実行した場合も
エラーになりますか?
>FormCreateでSetLocaleInfoを呼び出している形になっています。
呼び出すAPIにもよりますがフォームの再生成とかで
繰り返し呼び出されているのではないですか?
プログラム自体は問題無いので
他の人も言われているように最低限の状態で試してみては?
Create内では実行しないほうが良い命令も多数ありますので
ボタンを置いてそのボタンクリックイベントで試すとか
そんなところでしょうか?
あとLOCALE_JAPANESE_CALENDAR は定数のようですが、その辺の定義もわかれば解決に繋がるかと思います
ン
モフノはユーザの設定を変更しますから、権限絡みという可能性も考えられますね。
動かない一台は日付書式などを変更する権限がユーザにないとか、セキュリティ系のソフトでブロックされているとか……
「止まってしまう」と言いますが、実はどこかにポップアップが表示されて、ユーザが承認してくれるのをじっと待っていたりはしないでしょうか?
スススススススススススススススススススススススススススススススススススススススス
ニコ やまだ
トコ イーアオッーウッウアィ火ゥ アキコイエコウエ 書込者ノト:ロ 「。「 「「 ン
フマテチフナ゜ハチミチホナモナ゜テチフナホトチメは定数宣言していました。
フマテチフナ゜ハチミチホナモナ゜テチフナホトチメスァウァサ
セキュリティ系のソフトは、会社で同じものをインストールしているので、ア台だけ違うというのは無いはずです。
そのア台は、いろいろソフトを入れているので、何かがモフノに悪さをしているんだと思います。
ちなみに取得系のチミノのヌフモはスムーズに動きました。
スススススススススススススススススススススススススススススススススススススススス
ニコ
トコ イーアオッーエッーアィ水ゥ アーコウケコイケ シ スュアセシ上級者セ シッニセシノヘヌ ス「コッッョョョッッウョ「 ス「ー「セ 書込者ノト:ロ 」。ァ」。 ン
推測しかできないけど定数はこんな感じなのかな?
フマテチフナ゜ハチミチホナモナ゜テチフナホトチメヲサスヲサウサ
フマテチフナ゜ハチミチホナモナ゜フマホヌトチヤナヲサスヲサァヲサッヘッァサ
フマテチフナ゜ハチミチホナモナ゜モネマメヤトチヤナヲサスヲサァヲサァァ年ァァヘァァ月ァァァァ日ァァァサ
別スレでの解決後のサンプル
ヲサヲサモフノィフマテチフナ゜ユモナメ゜トナニチユフヤャヲサフマテチフナ゜ノテチフナホトチメヤルミナャヲサァウァゥサ
ヲサヲサモフノィフマテチフナ゜ユモナメ゜トナニチユフヤャヲサフマテチフナ゜モモネマメヤトチヤナャヲサァヲサッヘッァゥサ
ヲサヲサモフノィフマテチフナ゜ユモナメ゜トナニチユフヤャヲサフマテチフナ゜モフマホヌトチヤナャヲサァヲサァァ年ァァヘァァ月ァァァァ日ァァァゥサ
ヲサヲサモヘヤィネラホト゜ツメマチトテチモヤャヲサラペモナヤヤノホヌテネチホヌナャヲサーャヲサーャヲサモヘヤマ゜ホマメヘチフャヲサオーーャヲサホゥサ
をフォームに置いたボタンクリックで実行するプログラムを書いて
その現象が発生するパソコンで動作させるとどうなりますかね?
スススススススススススススススススススススススススススススススススススススススス
ニコ やまだ
トコ イーアオッーエッーイィ木ゥ アエコアーコウア 書込者ノト:ロ 「。「 「「 ン
メニューを作成し、クリックイベントに教えていただいたコードを書いてみました。
問題なく動きました。
ということはではエラーが出て、クリックイベントでは出ないということ。
何故なのか分かりませんが、何となく糸口が見つかったような気がしています。
スススススススススススススススススススススススススススススススススススススススス
ニコ やまだ
トコ イーアオッーエッーイィ木ゥ アエコアキコーオ 書込者ノト:ロ 「。「 「「 ン
モコ
原因がわかりました。
第カ引き数にーをあてていました。
モヘヤィネラホト゜ツメマチトテチモヤャヲサラペモナヤヤノホヌテネチホヌナャヲサーャヲサーャヲサモヘヤマ゜ホマメヘチフャヲサオーーャヲサホゥサ
これに変えてみたら上手く起動しました。
お騒がせしました。
ありがとうございました。
ツイート | ![]() |