const WM_NEWMESSAGE = WM_USER + 100;
{oder so
weiß gad nicht in welchem Bereich die IDs sein müssen, aber dazu steht bestimmt irgendwo was}
type
TJvFileListBox =
class(TForm)
private
ListeDateien: TStringList;
procedure DropFiles (
var Msg: TMessage);
message WM_DROPFILES;
procedure NewMessage(
var Msg: TMessage);
message WM_NEWMESSAGE;
end;
procedure TJvFileListBox.DropFiles(
var Msg: TMessage);
// nur Dateien merken und zurück
var
i, Anzahl, Size: integer;
Dateiname:
String;
begin
if ListeDateien =
nil then ListeDateien := TStringList.Create
else ListeDateien.Clear;
Anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF,
nil, 0);
for i := 0
to (Anzahl - 1)
do
begin
Size := DragQueryFile(Msg.WParam, i,
nil, 0);
SetLength(Dateiname, Size);
DragQueryFile(Msg.WParam, i, PChar(Dateiname), Size + 1);
ListeDateien.Add(Dateiname);
end;
DragFinish(Msg.WParam);
PostMessage(
Handle, WM_NEWMESSAGE, 0, 0);
end;
procedure TJvFileListBox.NewMessage(
var Msg: TMessage);
var
i: integer;
begin
if ListeDateien =
nil then exit;
SetForegroundWindow(FAnlagenkomponenten.Handle);
if BestatigungK
and (MessageDlg('
Kopieren von ' + IntToStr(ListeDateien.Count) + '
Dateien nach '
+ FAnlagenkomponenten.DocVerzeichnis.Text + '
?', mtConfirmation, [mbYes, mbNo], 0) = mrNo)
then
begin
exit;
end;
for i := 0
to ListeDateien.Count - 1
do
begin
CopyFile(PChar(ListeDateien.Strings[i]), PChar(FAnlagenkomponenten.DocVerzeichnis.Text
+ '
\' + ExtractFilePath(ListeDateien.Strings[i])), false);
end;
FAnlagenkomponenten.JvFileListBox1.Update;
FreeAndNil(ListeDateien);
end;
// und nicht im Destructor dieses vergessen
// if ListeDateien <> nil then ListeDateien.Free;