Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Bild per Drag and Drop ins Programm holen

  Alt 29. Okt 2005, 00:52
dieses WM_DROPFILES bezieht sich nur auf das Drag&Drop von Dateien. Die Events für Drag&Drop die fast jede Komponente hat beziehen sich hingegen auf das Drag&Drop zwischen den einzelnen Komponenten.
Zur anderen Frage: Das Drag&Drop von Dateien nur für ein TImage zu realisieren (und nicht für das ganze Form) geht nicht da TImage kein Handle hat. Die Message wird somit an das Fenster(Control) unter dem TImage geschickt welches ein Handle hat. Für TListbox und TListView (die haben ein Handle) geht es hingegen. Da gibt es 2 Möglichkeiten. Variante 1 ist das ableiten von einer bereits vorhandenen Komponente und diese mit dem entsprechenden Messagehandler erweitern). Variante2 ist das umbiegen der WindowProcedure der Komponente und somit das manuelle Abfangen der Message in der neuen WindowProcedure (gibt es einige Threads dazu).

Wenn du unbedingt willst das man auf ein TImage Dateien ziehen kann so lege einfach direkt unter das TImage ein Panel und fange auf diesem die Message ab.

variante1 (der Quelltext muss in die Unit wo TListBox das Droppen von Dateien unterstützen soll):
Delphi-Quellcode:
type
  TListBox = class(StdCtrls.TListBox)
  private
    procedure FWM_DropFiles(var Msg: TMessage); message WM_DROPFILES;
  end;
[...]
procedure TListBox.FWM_DropFiles(var Msg: TMessage);
var i, anzahl, size: integer;
    Dateiname: String;
    antwort: Integer;
begin
  inherited;
  Dateiname := '';
  anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
  for i := 0 to (anzahl - 1) do
  begin
    size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
    SetLength(Dateiname, size);
    SetLength(Dateiname, DragQueryFile(Msg.WParam,i , @Dateiname[1], size));
    //hier dein source - in "Dateiname" ist der name des droped objectes
  end;
  DragFinish(Msg.WParam);
end;
und damit das ganze für die entsprechende Listbox geht muss natürlich noch folgendes gemacht werden:
DragAcceptFiles(ListBox1.Handle, True);
Zitat:
...allerdings ist mir nicht so ganz klar, woher man das wissen soll...
dafür gibt es das msdn (http://msdn.microsoft.com bzw. noch direkter http://msdn.microsoft.com/library ) dort kann man die Befehle suchen (man weiß ja ungefähr nach was man suchen muss) und die Parameter etc. sind dort auch zu finden mit deren Bedeutung.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat