Autor |
Beitrag |
0xCC
Beiträge: 150
|
Verfasst: 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
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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
Beiträge: 150
|
Verfasst: Fr 04.08.06 10:12
GTA-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
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
|
Verfasst: 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
Beiträge: 150
|
Verfasst: So 21.01.07 16:46
Neue Version online, unterstützt nun auch widestring (unicode) per event OnFileDropWide
|
|
Calculon
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: So 21.01.07 17:16
Ich find's super!
Kann ich den zulässigen Drop-Bereich irgendwie beschränken z.B. über einer Listbox oder so?
Gruß
Calculon
|
|
0xCC
Beiträge: 150
|
Verfasst: So 21.01.07 18:50
Calculon 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:
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 public 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
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: 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:
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
Beiträge: 150
|
Verfasst: 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
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: 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
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: 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
Beiträge: 150
|
Verfasst: So 21.01.07 20:17
Jakob 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.:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function PathMatchSpecA(pszFile, pszSpec: PAnsiChar): Boolean; stdcall; external 'shlwapi.dll';
procedure TForm1.OnFileDrop1FileDrop(filename:string); begin if pathmatchspecA(pchar(filename), '*.mp3') then memo1.lines.add(filename); end; |
|
|
0xCC
Beiträge: 150
|
Verfasst: 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
Beiträge: 177
Erhaltene Danke: 1
Win ME, Win XP, Win 7, Win 10
Delphi 7, 10.2 Tokyo
|
Verfasst: Mi 28.02.07 21:33
Und wie kann ich nur den Dateinamen anzeigen lassen, das heißt also ohne die Pfadangaben?
|
|
0xCC
Beiträge: 150
|
Verfasst: Do 01.03.07 01:36
ganz einfach:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.OnFileDrop1FileDrop(filename:string); begin memo1.lines.add(extractfilename(filename)); end; |
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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
Beiträge: 177
Erhaltene Danke: 1
Win ME, Win XP, Win 7, Win 10
Delphi 7, 10.2 Tokyo
|
Verfasst: 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
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: 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
Beiträge: 177
Erhaltene Danke: 1
Win ME, Win XP, Win 7, Win 10
Delphi 7, 10.2 Tokyo
|
Verfasst: Di 07.08.07 22:39
Kann ich auch noch die dateiendung "abschneiden", so das ich nur den Namen der Datei habe?
|
|
Dezipaitor
Beiträge: 220
|
Verfasst: Di 07.08.07 23:02
@0xCC:
Sag mal, hast du in Turbo Pascal gearbeitet?
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.
|
|