Jak wygodnie odczytać nazwy plików upuszczanych na komponenty naszego programu z pulpitu
Dryobates
Działanie całości opiera się na idei subclassingu. Windows zapewnia nam procedury do obsługi komunikatu WM_DROPFILES: DragAcceptFiles, DragFinish, DragQueryFile, DragQueryPoint. Jednak poszczególne komponenty nie mają takich zdarzeń, które by to umożliwiały. Stosując subclassing wzbogacamy nasze komponenty o nowe zdarzenia (w naszym wypadku OnListBox1DD)
unit Unit1;
interface
{
Wrzućmy na formę Label oraz 2 ListBox. Dodajmy do projektu moduł DD.pas i wpiszmy u sekcji uses DD.
}
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
{Kliknij na moduł to go ściągniesz}
DD;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
{
Dopiszmy jeszcze te 3 procedurki obsługi upuszczania plików
}
procedure OnListBox1DD(DD: TDragDrop);
procedure OnListBox2DD(DD: TDragDrop);
procedure ProcessDroppedFiles(ListBox: TListBox;
DD: TDragDrop);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
{Najpierw trzeba dodać nasze komponenty do listy komponentów przyjmujących opuszczanie plików}
AcceptDroppedFiles(ListBox1, OnListBox1DD);
AcceptDroppedFiles(ListBox2, OnListBox2DD);
end;
procedure TForm1.OnListBox1DD(DD: TDragDrop);
begin
{Jak zostanie upuszczony plik to przetwórz go}
ProcessDroppedFiles(ListBox1, DD);
end;
procedure TForm1.OnListBox2DD(DD: TDragDrop);
begin
ProcessDroppedFiles(ListBox2, DD);
end;
procedure TForm1.ProcessDroppedFiles(ListBox: TListBox; DD: TDragDrop);
var
i: Integer;
begin
{Sprawdźmy najpierw, czy plik upadł na nasz komponent}
if DD.InClientArea then
Label1.Caption := 'Trafiony zatopiony'
else
Label1.Caption := 'Pudło';
{A teraz dodajmy całą listę plików, jakie zostały upuszczone}
for i := 0 to DD.NumFiles - 1 do
ListBox.Items.Add(DD.Files[i]);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{Na koniec usuwamy nasze komponenty z listy. Więcej nie muszą oczekiwać na pliki}
UnacceptDroppedFiles(ListBox1);
UnacceptDroppedFiles(ListBox2);
end;
end.
Na podstawie książki: Kick Ass Delphi Programming.
Brak załącznika DD.zip na serwerze
A jak sprawa powinna wygladac w przypadku d 'n' d dla RichEdit bo moje zamiany i kombinacje nie przynosza skutku ...
heh
thx to jest to o co mi chodziło:)