こんにちは。
WinXPで、Delphi6 Personalを使い、アプリケーションを作っています。
フォームを閉じた時にどのキーが押されてるのか調べたいのですが、どうすればいいのでしょうか?
GetKeyStateあたり?
どうやって使うんですか?
検索しましょう。
http://www.google.co.jp/search?hl=ja&q=GetKeyState+Delphi&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
if GetKeyState(VK_CONTROL)<>0 then
showmessage('ctrlが押されてます')
else GetKeyState(VK_SHIFT)<>0 then
showmessage('shiftが押されてます');
って、わざわざ全部の仮想キーコードと比較しなければならないのでしょうか
>どのキーが押されてるのか調べたいのですが
GetKeyboardState と MapVirtualKey だと
処理がやたらと冗長になりそうなときは、頭を使いましょう。
想定しているものを全部定数配列に納めてループ処理ですませるとか、いくらでもやりようはあります。
> わざわざ
それがふつうと言うものです。面倒くさがってはお話になりません。
それを地道に一個一個処理していくか、ループでいっぺんに処理するかは、プログラマの知恵次第です。
たとえば、上の例で言うなら
const
KeyList : array[0..1] of Integer = (VK_SHIFT, VK_CONTROL);
KeyStr : array[0..1] of String = ("shiftキー", "ctrlキー");
var
i : Integer;
begin
for i := 0 to Length(KeyList) - 1 do begin
if GetKeyState(KeyList[i]) <> 0 then ShowMessage(KeyStr[i] + "が押されている");
end;
end;
など。
>たかみちえ様
出来ました・・凄いです。こんな事に気づかなかったなんてまだまだ精進が足りませんね^^;
ただその書式、少しおかしいところがいくつかありますね^^;
ぱぱっと書いただけでテストなどしていませんので、その辺はご容赦を(^^ゞ
まあ、趣旨が伝われば幸いです。
いつも助けてくださってありがとうとざいます^^
仮想キーコードって、数値に置き換えられないんでしょうか。
あと関係ないんですが、Luna対応にするためにManifestファイルを使いますよね? あれをExeファイルに埋め込みたいんですが、どうすればいいですか(リソースがどうこうと言うのは聞いたことがありますが・・
http://homepage1.nifty.com/ht_deko/tech002.html#tech021
Theme Managerコンポーネントも使用したほうが吉
(読む方が)混乱しないように一つのスレッドには一つの質問に限った方がよいと思いますよ。
> 数値に置き換え
仮想キーコードって、そもそも数値ですが?
VK_SHIFTなどはただの定数です。表示してみれば分かります。
> manifestファイル
上のリンクで分かると思いますが、それでも分からないようなら拙作ソフトのソースでも開いてみてください。配布パッケージ内のsrc.zipです。
キーの方も、マニフェストの方も出来たんですが、何故かマニフェストをバインドすると、upxで圧縮した後で実行すると
---------------------------
アプリのパス
---------------------------
アプリのパス
このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。
---------------------------
OK
---------------------------
と言うmb_Error型のダイアログメッセージが出ます。これは仕様なのでしょうか
リソース圧縮を無効にしたら出来ました。
皆さん本当にご迷惑をおかけしました。
>たかみちえ様
サイト、拝見しました。とっても勉強になります、早速Bookmarkに入れました。これからも宜しくお願いします
ツイート | ![]() |