Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.112 Beiträge
 
Delphi 12 Athens
 
#2

Re: Drag & Drop vom Explorer auf unterschiedliche Steuer

  Alt 8. Mär 2010, 09:20
Zitat:
FileIndex := $FFFF;
MSDN
If the value of this parameter is 0xFFFFFFFF


Und es sollte erwähnt werden, daß Application.OnMessage überschrieben wird (falls dieses wer übersieht) und in seinem Programm selber dort schon etwas Anderes zugewiesen hat, bzw. noch zuweisen tut.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
  end;

uses
  ShellAPI;

procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
const
  BufferLength = 255;
var
  QtyDroppedFiles, FileIndex: Integer; // eigentlich Cardinal, aber für ein sicheres
                                        // Beenden der For-Schleife, bei QtyDroppedFiles=0
  pDroppedFilename: array[0..BufferLength] of Char;
begin
  if Msg.message = WM_DROPFILES then
  begin
    QtyDroppedFiles := DragQueryFile(Msg.wParam, Cardinal(-1), nil, 0);
    try
      for FileIndex := 0 to QtyDroppedFiles - 1 do
      begin
        DragQueryFile(Msg.wParam, FileIndex, @pDroppedFilename, BufferLength);
        if Msg.hwnd = Edit1.Handle then
          Edit1.Text := PChar(@pDroppedFilename)
        else if Msg.hwnd = Edit2.Handle then
          Edit2.Text := PChar(@pDroppedFilename);
      end;
    finally
      DragFinish(Msg.wParam);
      Handled := True;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Edit1.Handle, True);
  DragAcceptFiles(Edit2.Handle, True);
  Application.OnMessage := AppMessage;
end;
PS: bei Windows 7 und einer Anwendung mit Admin-Rechten geht dieses vom "normalen" Explorer nicht mehr.

Da man nur noch Messages zu Anwendungen mit gleichen oder geringeren Rechten verschicken darf,
also müßte da z.B. der Explorer auch mit Admin-Rechten gestartet sein.

PSS: mit "Explorer" ist übrigen vieles gemeint ... der Desktop, der Explorer, die Dateilisten von Open-/Savedialogen ... also alles worin sich ein Explorer versteckt oder welches die hierfür nötigen Messages/Speicherbereiche erstellt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat