タスクトレイのアイコンをクリックし、サイトを表示させるには(続き)

解決


ゲン  2009-12-03 02:41:44  No: 36373

凶は憑かれたさんや、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.


ゲン  2009-12-03 03:15:27  No: 36374

ミスがあったのでもう一度書き込みます。
凶は憑かれたさんや、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.


ttt  2009-12-03 04:05:27  No: 36375

元の質問の記事はまだ生きてるようですが、そっちに書かなかったのはなぜ?
https://www.petitmonte.com/bbs/answers?question_id=6604

> //ここが今回やったところです
それはフォーム上でマウスボタンが押された時のイベントだから
タスクトレイのアイコンをクリックしても来ないのは当然です。
(この中でMsgなんて定義されてないし、文字列も''で囲んでないとか
SW_NORMALなんて定数ないとか色々おかしいけど、本当にコンパイル通るの?)

> タスクトレイのアイコンをダブルクリック
元の質問はクリックだったと思うけど、結局どっちにしたいんですか?
いずれにしても、igyさんが言ったのは
> //左クリック時
というコメントの下にあるこの処理
>  if (Msg.wParam = WM_LBUTTONDOWN) then
>  Label1.Caption :='左クリック' ;
もっと具体的に言えば
>  Label1.Caption :='左クリック' ;
の部分を目的の処理に書き換えるということです。


ゲン  2009-12-05 01:28:24  No: 36376

tttさんアドバイスありがとうございます。

追加の質問なのですが、ファイルのUnit1.pasというやつに編集して上書き保存しても、何も変わりませんでした。
ここを編集していたのでtttさんが言われたエラーが出なかったと思います。
昨日を追加したい場合はどのファイルを編集すればよいのですか。
よろしくお願いします。


igy  2009-12-05 09:05:41  No: 36377

>追加の質問なのですが、ファイルのUnit1.pasというやつに編集して上書き保存しても、何も変わりませんでした。
>ここを編集していたのでtttさんが言われたエラーが出なかったと思います。
>昨日を追加したい場合はどのファイルを編集すればよいのですか。

そのプロジェクトで拡張子がpasのファイルは、Unit1.pas以外にありますか?

また、プロジェクトを開いていて、プロジェクトと関係ないUnit.pasを
開いて、それに書き込んでいる可能性とかは、ないですか?


ゲン  2009-12-08 03:14:26  No: 36378

試してみましたがそれはありませんでした。


igy  2009-12-08 05:10:18  No: 36379

>試してみましたがそれはありませんでした。

では、Unit1.pasはコンパイルされていますか?
(Unit1.dcuは生成されていますか?)


ぽむぽむ  2009-12-08 17:22:54  No: 36380

いったいどこに書き込んで変わらないとか言っているのかわかりませんが、
ブレークポイントで、止まりますか?

フォーム上でマウスダウンしたときにYahooのページは開くだろうけど、コンパイルは通らないよね。
FormMouseDownに記述してある MSG って、未定義の識別子になるはずだけど?


武田  2009-12-10 00:59:57  No: 36381

ゲンさん、私も初心者ですから
ゲンさんがやりたいことがわかるような気がします。
はずしていたらすみません。
まず今回やった部分を削除する。↓↓↓
//ここが今回やったところです
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で表示しますが。
いかがでしょうか?


ゲン  2009-12-12 01:11:54  No: 36382

igyさん
システムが壊れてたようなので作りなおしました。
ありがとうございます。

ぽむぽむさん
システムが壊れていたので何も変わらなかったようです。
確かにコンパイルは通りませんでした。
ありがとうございます。

武田さん
やってみたら、できました。
ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加