上記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.
フォームの宣言が2箇所になってしまっています。
宣言しているフォームとプロシジャのフォームの名前を見直してみてください。
修正してみました。
以下ソースです。(確認していません。。)
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 です。
質問のタイトル「アイコンへのドラッグ&ドロップ」
最初の質問
> ドラッグ&ドロップで起動するものを作ろうとしているのですが
これから推測すると、WM_DROPFILES メッセージの処理は関係ないのでは?
ParamStr() と ParamCount が関係あるんじゃないでしょうか。
if paramcount >=1 then
begin
for i:=1 to paramcount do
Listbox1.Items.add(paramstr(i));
end;