![]() |
Meine Drag'n'Drop-Funktion ergänzen
Hi,
ich habe wie folgt in mein Prog ne Drag'n'Drop Funktion eingebaut:
Delphi-Quellcode:
Jetzt mein Problem: damit ich die Daten, der auf das Prog zu ziehender Datei, laden kann, muss ich den Datentyp der Datei wissen. Wie kriege ich das raus, wer kann mir das sagen? :gruebel:
implementation
uses ShellAPI; procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Form1.Handle, true); end; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); protected procedure WMDROPFILES(var Msg: TMessage); message WM_DROPFILES; private ... procedure TForm1.WMDROPFILES(var Msg: TMessage); begin showmessage('Ja es hat geklappt, hier lade ich die Daten'); end; |
Re: Meine Drag'n'Drop-Funktion ergänzen
Genügt es nicht, nach der Endung zu schauen?
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Ja das habe ich gefunden ->
Delphi-Quellcode:
Aber wie finde ich den FileName raus?
function ExtractFileExt(const FileName: string): string; overload;
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Delphi-Quellcode:
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var i, count: Cardinal; Buffer, Extension: string; begin inherited; Buffer := ''; count := DragQueryFile(Msg.WParam,$FFFFFFFF,nil,0); for i := 0 to count - 1 do begin SetLength(Buffer,DragQueryFile(Msg.WParam,i,nil,0) + 1); DragQueryFile(Msg.WParam,i,@Buffer[1],Length(Buffer)); Extension := ExtractFileExt(Buffer); ShowMessage(Extension); end; end; |
Re: Meine Drag'n'Drop-Funktion ergänzen
:shock: so kompliziert? :shock:
OK thx :thumb: |
Re: Meine Drag'n'Drop-Funktion ergänzen
Du kannst Dir natürlich auch entsprechende Komponenten installieren, siehe
![]() |
Re: Meine Drag'n'Drop-Funktion ergänzen
Will ich vermeiden, weiß sowieso nicht wie man sie richtig einsetzen muss.
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Hab jetzt ein Problem, welches ich nicht lösen kann.
Und zwar ich lade die Daten per Import und will auch per Drag'n'Drop, siehe Code. Bei der Lösung per Drag'n'Drop bekomme ich als die Fehlermeldung Zitat:
Delphi-Quellcode:
//Import
procedure TForm1.ChannelListImport1Click(Sender: TObject); var i: Integer; List : TStringList; List2: TStringList; begin if OpenDialog1.Execute then begin List:=TStringList.Create; try List.LoadFromFile(OpenDialog1.FileName); if ListBox1.Count<>0 then begin if MessageDlg(_('Retain existing radio stations list?'), mtInformation, [mbYes, mbNo], 0) = mrNo then begin ListBox1.Clear; ListBox2.Clear; ListBox3.Clear; ListBox4.Clear; end; end; if ExtractFileExt(OpenDialog1.Filename)='.crp' then begin for i:=0 to List.Count-1 do begin List2:=Explode('<>', List[i]); ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); List2.Free; end; end else begin for i:=0 to List.Count-1 do begin List2:=Explode('=', List[i]); ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); List2.Free; end; end; finally List.Free; end; end; end;
Delphi-Quellcode:
//Und hier per Drag'n'Drop
procedure TForm1.WMDROPFILES(var Msg: TMessage); var j, count: Cardinal; Buffer: String; i: Integer; List : TStringList; List2: TStringList; begin inherited; Buffer := ''; count := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0); for j := 0 to count - 1 do begin SetLength(Buffer, DragQueryFile(Msg.WParam, j, nil, 0) + 1); DragQueryFile(Msg.WParam, j, @Buffer[1], Length(Buffer)); end; //Laden List:=TStringList.Create; try List.LoadFromFile(Buffer); if ListBox1.Count<>0 then begin if MessageDlg(_('Retain existing radio stations list?'), mtInformation, [mbYes, mbNo], 0) = mrNo then begin ListBox1.Clear; ListBox2.Clear; ListBox3.Clear; ListBox4.Clear; end; end; if ExtractFileExt(Buffer)='.crp' then begin showmessage(inttostr(ListBox1.Count)); for i:=0 to List.Count-1 do begin showmessage(inttostr(ListBox1.Count)); List2:=Explode('<>', List[i]); ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); List2.Free; end; end else begin for i:=0 to List.Count-1 do begin List2:=Explode('=', List[i]); ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); List2.Free; end; end; finally List.Free; end; end; |
Re: Meine Drag'n'Drop-Funktion ergänzen
Schon mal gedebuggt?
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Setz einen Haltepunkt und steppe mit F8 durch, bis es knallt. Dann hast Du zumindest schonmal die fehlerverursachende Zeile.
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Also das Problem liegt irgendwo hier:
Delphi-Quellcode:
Ich lade eine .crp Datei bekomme aber "nein" Meldung, wieso das denn? :wall:
showmessage(ExtractFileExt(Buffer));
if ExtractFileExt(Buffer)='.crp' then begin showmessage('ja'); showmessage(ExtractFileExt(Buffer)); end else begin showmessage('nein'); showmessage(ExtractFileExt(Buffer)); end; |
Re: Meine Drag'n'Drop-Funktion ergänzen
Was kommt den bei
Delphi-Quellcode:
raus?showmessage(ExtractFileExt(Buffer)); |
Re: Meine Drag'n'Drop-Funktion ergänzen
.crp also das was ich brauche... :roteyes:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Steht da evtl. noch ein Leerzeichen dahinter oder so? BTW: Du untersuchst immer nur die letzte Datei aus der "Drop-Liste", das ist Dir hoffentlich bewusst.
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Zitat:
Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Ich meine damit, dass man ja durchaus mehrere Dateien in einem Rutsch Drag&Droppen kann.
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Nicht, dass ich wüsste. Aber Du könntest innerhalb der Schleife alle Dateien abarbeiten und nach der ersten stimmigen Endung aufhören.
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Ok, aber ich verstehe nicht, wieso bekomme ich hier ne "nein" Meldung? :wall:
Delphi-Quellcode:
showmessage(Extension);
if Extension='.crp' then begin showmessage('ja'); end else begin showmessage('nein'); end; |
Re: Meine Drag'n'Drop-Funktion ergänzen
Wie sieht es so aus?
Delphi-Quellcode:
if AnsiSameText(trim(Extension), '.crp') then
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Wow ja es geht :dancer2:
Wo liegt denn der Unterschied? :gruebel: |
Re: Meine Drag'n'Drop-Funktion ergänzen
Ich schneide evtl. Steuerzeichen vorn und hinten ab und unterscheide nicht zwischen Groß- und Kleinschreibung (ich denke mal, letzteres war auch das Problem).
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Aber komischerweise funktioniert die Abfrage, also
Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Darauf würde ich mich trotzdem nicht verlassen. Nimm AnsiSameText und Du bist auf der sicheren Seite (siehe oben).
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Ok hab das so gemacht... so aber das Problem im Post #10 besteht immer noch. :roteyes:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Du kommst nun ja in dein '.crp' rein. NUn setzte mal wie DeddyH schon gesagt hat einen Haltepunkt und Steppe mit F8 durch
|
Re: Meine Drag'n'Drop-Funktion ergänzen
So ich hab's....
Also im Post #10 hatte ich das Problem weil die Abfrage falsch war und die Datei falsch geladen wurde, deswegen der Fehler, mit Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Du solltest aber trotzdem mal deine Freigabe der List2 überdenken.
Delphi-Quellcode:
//<--
List2:=Explode('=', List[i]);
ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); List2.Free; |
Re: Meine Drag'n'Drop-Funktion ergänzen
Trotzdem finde ich solchen Code etwas optimistisch:
Zitat:
[edit] :lol: :cheers: [/edit] |
Re: Meine Drag'n'Drop-Funktion ergänzen
Hm... was genau? Verzeih, bin Hobbyprogrammierer. :gruebel:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Ne der Fehler war deswegen, eine .crp Datei wird mit
Zitat:
Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Delphi-Quellcode:
Oder wenn alles erfüllt sein muss:
List2:=Explode('<>', List[i]);
try if List2.Count > 1 then ListBox1.Items.Insert(i, List2[1]); if List2.Count > 2 then ListBox2.Items.Insert(i, List2[2]); if List2.Count > 3 then ListBox3.Items.Insert(i, List2[3]); if List2.Count > 4 then ListBox4.Items.Insert(i, List2[4]); finally List2.Free; end;
Delphi-Quellcode:
List2:=Explode('<>', List[i]);
try if List2.Count > 4 then begin ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); end; finally List2.Free; end; |
Re: Meine Drag'n'Drop-Funktion ergänzen
Und wieso soll ich überprüfen, ob mehr als 4 Elemente vorhanden sind? :gruebel:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Weil Du anschließend auf das 5. Element zugreifst. Und wenn das nicht da ist, gibt es den von Dir beschriebenen Fehler.
|
Re: Meine Drag'n'Drop-Funktion ergänzen
Zitat:
|
Re: Meine Drag'n'Drop-Funktion ergänzen
*Gnarf* Probier das Folgende mal aus, dann weißt Du, was ich meine:
Delphi-Quellcode:
Liste := TStringlist.Create;
try Liste.Add('Hallo'); ShowMessage(Liste[1]); //es ist nur ein Element mit Index 0 (!!) vorhanden finally Liste.Free; end; |
Re: Meine Drag'n'Drop-Funktion ergänzen
:gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz