凶は憑かれたさんや、igyが言われたようにやってみました(間違ってるかもしれないですが自分なりにやりました)が、タスクトレイのアイコンをダブルクリックすると、Label1の所に左ダブルクリックと表示されるだけで何も開きません。(本来ならyahooのトップページが開くようにしてあります)
ソースをはりますので、アドバイスをお願いします。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellAPI, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDblClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private 宣言 }
NID : TNotifyIconData;
procedure WMUSER(var Msg : TMsg); message WM_USER + 100;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with NID do begin
cbSize := Sizeof(NID);
hIcon := Application.Icon.Handle;
Wnd := Form1.Handle;
szTip := 'PAPY';
uCallbackMessage := WM_USER + 100;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
end;
//アイコンを追加
Shell_NotifyIcon(NIM_ADD, @NID);
end;
procedure TFOrm1.WMUSER(var Msg: TMsg);
begin
//左クリック時
if (Msg.wParam = WM_LBUTTONDOWN) then
Label1.Caption :='左クリック' ;
//右クリック時
if (Msg.wParam = WM_RBUTTONDOWN) then
Label1.Caption :='右クリック';
//左ダブルクリック
if (Msg.wParam = WM_LBUTTONDBLCLK) then
Label1.Caption :='左ダブルクリック';
//右ダブルクリック時
if (Msg.wParam = WM_RBUTTONDBLCLK) then
Label1.Caption :='右ダブルクリック' ;
//中央ボタンをクリック
if (Msg.wParam = WM_MBUTTONDOWN) then
Label1.Caption :='中央ボタンをクリック';
//中央ボタンをクリック
if (Msg.wParam = WM_MBUTTONDBLCLK) then
Label1.Caption :='中央ボタンをダブルクリック';
//マウスが移動
if (Msg.wParam = WM_MOUSEMOVE ) then
Label1.Caption :='マウスが通過';
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//アイコンを削除
Shell_NotifyIcon(NIM_DELETE, @NID);
end;
//ここが今回やったところです
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Msg.wParam = WM_LBUTTONDOWN) then
Label1.Caption :='左ダブルクリック';
ShellExecute(Handle,nil,PChar(http://www.yahoo.co.jp/),nil,nil,SW_NORMAL);
end;
end.
ミスがあったのでもう一度書き込みます。
凶は憑かれたさんや、igyさんが言われたようにやってみました(間違ってるかもしれないですが自分なりにやりました)が、タスクトレイのアイコンをダブルクリックすると、Label1の所に左ダブルクリックと表示されるだけで何も開きません。(本来ならyahooのトップページが開くようにしてあります)
ソースをはりますので、アドバイスをお願いします。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellAPI, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDblClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private 宣言 }
NID : TNotifyIconData;
procedure WMUSER(var Msg : TMsg); message WM_USER + 100;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with NID do begin
cbSize := Sizeof(NID);
hIcon := Application.Icon.Handle;
Wnd := Form1.Handle;
szTip := 'PAPY';
uCallbackMessage := WM_USER + 100;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
end;
//アイコンを追加
Shell_NotifyIcon(NIM_ADD, @NID);
end;
procedure TFOrm1.WMUSER(var Msg: TMsg);
begin
//左クリック時
if (Msg.wParam = WM_LBUTTONDOWN) then
Label1.Caption :='左クリック' ;
//右クリック時
if (Msg.wParam = WM_RBUTTONDOWN) then
Label1.Caption :='右クリック';
//左ダブルクリック
if (Msg.wParam = WM_LBUTTONDBLCLK) then
Label1.Caption :='左ダブルクリック';
//右ダブルクリック時
if (Msg.wParam = WM_RBUTTONDBLCLK) then
Label1.Caption :='右ダブルクリック' ;
//中央ボタンをクリック
if (Msg.wParam = WM_MBUTTONDOWN) then
Label1.Caption :='中央ボタンをクリック';
//中央ボタンをクリック
if (Msg.wParam = WM_MBUTTONDBLCLK) then
Label1.Caption :='中央ボタンをダブルクリック';
//マウスが移動
if (Msg.wParam = WM_MOUSEMOVE ) then
Label1.Caption :='マウスが通過';
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//アイコンを削除
Shell_NotifyIcon(NIM_DELETE, @NID);
end;
//ここが今回やったところです
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Msg.wParam = WM_LBUTTONDOWN) then
Label1.Caption :='左ダブルクリック';
ShellExecute(Handle,nil,PChar(http://www.yahoo.co.jp/),nil,nil,SW_NORMAL);
end;
end.
元の質問の記事はまだ生きてるようですが、そっちに書かなかったのはなぜ?
https://www.petitmonte.com/bbs/answers?question_id=6604
> //ここが今回やったところです
それはフォーム上でマウスボタンが押された時のイベントだから
タスクトレイのアイコンをクリックしても来ないのは当然です。
(この中でMsgなんて定義されてないし、文字列も''で囲んでないとか
SW_NORMALなんて定数ないとか色々おかしいけど、本当にコンパイル通るの?)
> タスクトレイのアイコンをダブルクリック
元の質問はクリックだったと思うけど、結局どっちにしたいんですか?
いずれにしても、igyさんが言ったのは
> //左クリック時
というコメントの下にあるこの処理
> if (Msg.wParam = WM_LBUTTONDOWN) then
> Label1.Caption :='左クリック' ;
もっと具体的に言えば
> Label1.Caption :='左クリック' ;
の部分を目的の処理に書き換えるということです。
tttさんアドバイスありがとうございます。
追加の質問なのですが、ファイルのUnit1.pasというやつに編集して上書き保存しても、何も変わりませんでした。
ここを編集していたのでtttさんが言われたエラーが出なかったと思います。
昨日を追加したい場合はどのファイルを編集すればよいのですか。
よろしくお願いします。
>追加の質問なのですが、ファイルのUnit1.pasというやつに編集して上書き保存しても、何も変わりませんでした。
>ここを編集していたのでtttさんが言われたエラーが出なかったと思います。
>昨日を追加したい場合はどのファイルを編集すればよいのですか。
そのプロジェクトで拡張子がpasのファイルは、Unit1.pas以外にありますか?
また、プロジェクトを開いていて、プロジェクトと関係ないUnit.pasを
開いて、それに書き込んでいる可能性とかは、ないですか?
試してみましたがそれはありませんでした。
>試してみましたがそれはありませんでした。
では、Unit1.pasはコンパイルされていますか?
(Unit1.dcuは生成されていますか?)
いったいどこに書き込んで変わらないとか言っているのかわかりませんが、
ブレークポイントで、止まりますか?
フォーム上でマウスダウンしたときにYahooのページは開くだろうけど、コンパイルは通らないよね。
FormMouseDownに記述してある MSG って、未定義の識別子になるはずだけど?
ゲンさん、私も初心者ですから
ゲンさんがやりたいことがわかるような気がします。
はずしていたらすみません。
まず今回やった部分を削除する。↓↓↓
//ここが今回やったところです
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Msg.wParam = WM_LBUTTONDOWN) then
Label1.Caption :='左ダブルクリック';
ShellExecute(Handle,nil,PChar(http://www.yahoo.co.jp/),nil,nil,SW_NORMAL);
end;
↑↑↑↑削除
つぎに下記の部分を修正する。
//左クリック時
if (Msg.wParam = WM_LBUTTONDOWN) then
ShellExecute(Handle,nil,PChar('http://www.yahoo.co.jp/'),nil,nil,SW_NORMAL);
// Label1.Caption :='左クリック' ;
アイコンをクリックするとYahooをIEで表示しますが。
いかがでしょうか?
igyさん
システムが壊れてたようなので作りなおしました。
ありがとうございます。
ぽむぽむさん
システムが壊れていたので何も変わらなかったようです。
確かにコンパイルは通りませんでした。
ありがとうございます。
武田さん
やってみたら、できました。
ありがとうございます。
ツイート | ![]() |