Autor Beitrag
0xCC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Mi 02.08.06 20:57 
Eine Komponente für Drag & Drop von Dateien.
(der komplette dateiname wird übergeben, unterstützt ansi und unicode)

Einfach aufs Formular ziehen, und das OnFileDrop Ereignis zuweisen.

Installation: Datei-öffnen: DPK auswählen, dann compilieren und installieren.
Im Reiter "int 3" findet ihr dann die Komponente.

int3.at/downloads/int3OnFileDrop.zip
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von 0xCC am Do 01.03.07 14:00, insgesamt 3-mal bearbeitet
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 03.08.06 20:14 
Kannst du bitte genauer eklären, was man mit deiner Komponente machen kann? Zieht man eine Datei auf das Programm und bekommt den Dateinamen im Ereignis OnFileDrop?

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
0xCC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Fr 04.08.06 10:12 
user profile iconGTA-Place hat folgendes geschrieben:
Zieht man eine Datei auf das Programm und bekommt den Dateinamen im Ereignis OnFileDrop?

Ja, das Ereignis OnFileDrop wird aktiviert wenn man Datei(en) auf das Formular zieht und "dropt".

Üblicherweise muss man um diese Funktionalität zu erreichen einen eigenen Messagehandler für WM_DROPFILES einrichten sowie im Form.Create die API-funktion DragAcceptFiles aufrufen.
Ziemlich viel Aufwand eben, den diese Kompo einem abnehmen soll.


Zuletzt bearbeitet von 0xCC am So 21.01.07 21:22, insgesamt 1-mal bearbeitet
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Fr 04.08.06 10:45 
Vielen Dank,
Super Komponente, kann ich grad super gebrauchen :-)
Auch mehrere Dateien, ... TOLL!

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
0xCC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: So 21.01.07 16:46 
Neue Version online, unterstützt nun auch widestring (unicode) per event OnFileDropWide
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: So 21.01.07 17:16 
Ich find's super! :zustimm:

Kann ich den zulässigen Drop-Bereich irgendwie beschränken z.B. über einer Listbox oder so?

Gruß

Calculon
0xCC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: So 21.01.07 18:50 
user profile iconCalculon hat folgendes geschrieben:
Kann ich den zulässigen Drop-Bereich irgendwie beschränken z.B. über einer Listbox oder so?

ich hab grade ne neue version geuppt die das kann. also drüberinstallieren und dann ca. so vorgehen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, int3onfiledrop, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure OFD(filename:string);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  drop : TonfileDrop;

implementation

{$R *.dfm}

procedure TForm1.OFD(filename:string);
begin
   memo1.lines.add(filename);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  drop := tonfiledrop.Create(Memo1);
  drop.OnFileDrop := OFD;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  drop.free;
end;

end.
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: So 21.01.07 19:15 
Also dein Beispiel (auch das von der vorherigen Version in der Readme) liefert bei mir eine Stackoverflow-Fehlermeldung.
Nur auf visueller Ebene funktioniert das bei mir:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.OnFileDrop1FileDrop(filename: String);
begin
  memo1.Lines.Add(filename);
end;

Allerdings habe ich das mit der Beschränkung noch nicht hinbekommen. Welchen Code muss ich bei visuellem Gebrauch benutzen?

Gruß
--
0xCC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: So 21.01.07 19:34 
ne visuelle möglichkeit gibts leider nicht.
ich hab aber mal ein beispielprojekt angehängt, vielleicht funktioniert es so bei dir.
Einloggen, um Attachments anzusehen!
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: So 21.01.07 19:47 
Sorry, der Fehler vorhin lag daran, dass ich die Komponente auf die Form geschoben hatte, bevor ich dein Code benutzt hab'. Dabei recht es einen Eintrag bei uses zu machen.

Funktioniert jetzt wunderbar! Super Komponente!

Gruß

Calculon
--
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: So 21.01.07 20:13 
Ich habs mir jetzt noch nicht runtergeladen, aber wird der Cursor bei jeder Datei die aufs Form gezogen wird zum crDrop oder nur bei denen, die man will zB. '*.mp3'?
0xCC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: So 21.01.07 20:17 
user profile iconJakob Schöttl hat folgendes geschrieben:
Ich habs mir jetzt noch nicht runtergeladen, aber wird der Cursor bei jeder Datei die aufs Form gezogen wird zum crDrop oder nur bei denen, die man will zB. '*.mp3'?

bei jeder datei.
die erkennung des dateityp's kannst du erst im event onfiledrop vornehmen, z.b.:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// im interface -teil
function PathMatchSpecA(pszFile, pszSpec: PAnsiChar): Boolean; stdcallexternal 'shlwapi.dll';
// ...

procedure TForm1.OnFileDrop1FileDrop(filename:string); 
begin 
   if pathmatchspecA(pchar(filename), '*.mp3'then memo1.lines.add(filename); 
end;
0xCC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: So 21.01.07 21:24 
habe die komponente nun komplett eigenständig gemacht, d.h. mit der aktuellen version 1.0.3 kann man die komponente auch mit verschiedenen formularen oder controls verwenden, indem man mehrere instanzen erzeugt.
teamrocket0
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 177
Erhaltene Danke: 1

Win ME, Win XP, Win 7, Win 10
Delphi 7, 10.2 Tokyo
BeitragVerfasst: Mi 28.02.07 21:33 
Und wie kann ich nur den Dateinamen anzeigen lassen, das heißt also ohne die Pfadangaben?
0xCC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Do 01.03.07 01:36 
ganz einfach:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.OnFileDrop1FileDrop(filename:string); 
begin 
   memo1.lines.add(extractfilename(filename)); 
end;
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 01.03.07 10:40 
@0xCC: Würdest Du bitte Deine Unit als Dateianhang an den Beitrag anhängen. Danke!

Regeln:
Diese Sparte ist für alle die gedacht die mit Delphi nützliche Units programmiert haben und diese nun in einer großen Community veröffentlichen wollen.

Die Entwickler-Ecke stellt Dir deshalb diese Sparte zur Verfügung. Folgende Punkte solltest Du bitte beachten:
  • Geltende Copyrightbestimmungen dürfen nicht verletzt werden
  • Die Unit muss im Beitrag selbst mit Delphi-Tags umschlossen oder per Anhang eingefügt werden.
  • Beschreib die Unit in einigen Sätzen damit der Leser weiß um was es geht
  • Die Unit muss dokumentiert sein
  • Nur eine Unit in einem Topic vorstellen
  • Nicht ein neues Topic starten nur weil es eine neue Version gibt sondern in dem schon vorhandenen Topic veröffentlichen
teamrocket0
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 177
Erhaltene Danke: 1

Win ME, Win XP, Win 7, Win 10
Delphi 7, 10.2 Tokyo
BeitragVerfasst: Do 01.03.07 19:18 
Super.
Recht Herzlichen Dank an "0xCC"

Das funktioniert einwandfrei.
Ich werde denen Namen zu den Credits adden müssen!;-)
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Do 05.07.07 17:07 
Hi,

ein Bug?

Wenn ich den Formstyle der Form auf fsStayOnTop setze, funktioniert Drag&Drop nicht mehr. Auch nicht mehr, wenn ich sie zur Laufzeit wieder in fsNormal abändere.

Im Anhang ein Beispielprojekt..

Gruß

Calculon
--
Einloggen, um Attachments anzusehen!
teamrocket0
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 177
Erhaltene Danke: 1

Win ME, Win XP, Win 7, Win 10
Delphi 7, 10.2 Tokyo
BeitragVerfasst: Di 07.08.07 22:39 
Kann ich auch noch die dateiendung "abschneiden", so das ich nur den Namen der Datei habe?
Dezipaitor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220



BeitragVerfasst: Di 07.08.07 23:02 
@0xCC:
Sag mal, hast du in Turbo Pascal gearbeitet?

ausblenden Delphi-Quelltext
1:
POnFileDrop = ^TOnFileDrop;					


Sowas macht man nur bei "object", jedoch nicht bei class, da der Typ Class intern bereits ein Zeiger ist.


Übrigens, du solltest StrDispose und was danach kommt in einen finally Block einschließen. Wenn eine Exception in fOnFileDropWide, ist der Speicherplatz verloren.