アイコンへのドラッグ&ドロップ


さえ  URL  2003-12-02 11:00:36  No: 5869  IP: [192.*.*.*]

上記URLを参考にドラッグ&ドロップで起動するものを作ろうとしているのですが
未定義の識別子’Listbox1’というエラーメッセージがでます。
どうしたらいいのでしょうか?教えてください。




unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ShellApi,StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;

  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;


type
   TfrmMain = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    procedure WMDropFiles(var Msg : TWMDROPFILES);  message WM_DROPFILES;
  public
    { Public 宣言 }
  end;

 var
   frmMain: TfrmMain;

 implementation

 procedure TfrmMain.FormCreate(Sender: TObject);
 begin
   { ファイルドロップの受け入れ }
   DragAcceptFiles(Handle, true);
 end;

 { この手続きはすべて手書きします }
 procedure TfrmMain.WMDropFiles(var Msg : TWMDropFiles);
 var
   FileName  : array [0..255]  of  char;
   ix        : integer;
   intFiles  : integer;
 begin
   { いくつのファイルをドロップされたか調べます ]
   intFiles  :=  DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, SizeOf(FileName));
   { すべてのファイル名をリストボックスに追加します }
   for  ix  :=  0  to  intFiles  - 1  do
   begin
     DragQueryFile(Msg.Drop, ix, FileName, SizeOf(FileName));
     { リストへの追加 }
     ListBox1.Items.Add (FileName);
   end;
   DragFinish(Msg.Drop);
 end;
end.

編集    削除
Third  2003-12-02 17:39:17  No: 5870  IP: [192.*.*.*]

フォームの宣言が2箇所になってしまっています。
宣言しているフォームとプロシジャのフォームの名前を見直してみてください。

編集    削除
LupinⅢ  URL  2003-12-02 20:26:16  No: 5871  IP: [192.*.*.*]

修正してみました。

以下ソースです。(確認していません。。)

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ShellApi,StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    procedure WMDropFiles(var Msg : TWMDROPFILES);  message WM_DROPFILES;
  public
    { Public 宣言 }
  end;

 var
   frmMain: TForm1;

 implementation

 procedure TForm1.FormCreate(Sender: TObject);
 begin
   { ファイルドロップの受け入れ }
   DragAcceptFiles(Handle, true);
 end;

 { この手続きはすべて手書きします }
 procedure TForm1.WMDropFiles(var Msg : TWMDropFiles);
 var
   FileName  : array [0..255]  of  char;
   ix        : integer;
   intFiles  : integer;
 begin
   { いくつのファイルをドロップされたか調べます ]
   intFiles  :=  DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, SizeOf(FileName));
   { すべてのファイル名をリストボックスに追加します }
   for  ix  :=  0  to  intFiles  - 1  do
   begin
     DragQueryFile(Msg.Drop, ix, FileName, SizeOf(FileName));
     { リストへの追加 }
     ListBox1.Items.Add (FileName);
   end;
   DragFinish(Msg.Drop);
 end;
end.

編集    削除
Halbow  2003-12-02 21:02:54  No: 5872  IP: [192.*.*.*]

Halbow です。

質問のタイトル「アイコンへのドラッグ&ドロップ」

最初の質問  
> ドラッグ&ドロップで起動するものを作ろうとしているのですが

これから推測すると、WM_DROPFILES メッセージの処理は関係ないのでは?
ParamStr() と  ParamCount が関係あるんじゃないでしょうか。

編集    削除
konn  2003-12-03 04:58:11  No: 5873  IP: [192.*.*.*]

if paramcount >=1 then 
begin
  for i:=1 to paramcount do 
  Listbox1.Items.add(paramstr(i));
end;

編集    削除