Hallo zusammen,
auf meiner Form liegen 2 StringGrids, diese Grids sollen Dateien per Drap&Drop erhalten.
Das Problem das ich dabei im Moment habe ist herauszufinden auf welches der Grids die Datei
gedroppt worden ist.
Hier mal etwas Code dazu:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| uses ShellApi;
type TStringGrid = class(Grids.TStringGrid) private procedure WMDROPFILES(var Msg: TMessage); Message WM_DROPFILES; end; |
Vielleicht verfolge ich aktuell auch den falschen Ansatz um das Problem zu lösen:
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:
| procedure TStringGrid.WMDROPFILES(var Msg: TMessage); var Counts, Size: Integer; PCharFileName: PChar; MausPos: TPoint; begin inherited; PCharFileName := nil; Counts := DragQueryFile(Msg.WParam, $FFFFFFFF, PCharFileName, 255); if Counts=1 then begin GetCursorPos(MausPos); Size := DragQueryFile(Msg.WParam, 0, nil, 0) + 1; PCharFileName := StrAlloc(Size); DragQueryFile(Msg.WParam, 0, PCharFileName, Size); ShowMessage(PCharFileName); if ExtractFileExt(PCharFileName)='.xls' then begin if ((FindDragTarget(MausPos, FALSE) as TStringGrid).Name='Datei1Grid') then begin ShowMessage('grid1'); XLStoGrid (PCharFileName, XLSHauptForm.Datei1Grid); DragFinish(Msg.WParam); end; if ((FindDragTarget(MausPos, FALSE) as TStringGrid).Name='Datei2Grid') then begin ShowMessage('grid2'); XLStoGrid (PCharFileName, XLSHauptForm.Datei2Grid); DragFinish(Msg.WParam); end; end else begin ShowMessage('Es können nur .XLS-Dateien verarbeitet werden'); end; end else begin ShowMessage('Bitte nur jeweils eine Datei ziehen und ablegen!'); end; StrDispose(PCharFileName); DragFinish(Msg.WParam); end; |
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TXLSHauptForm.FormCreate(Sender: TObject); begin DragAcceptFiles(Datei1Grid.Handle, True); DragAcceptFiles(Datei2Grid.Handle, True); end; |
Das aktuelle Problem bei meinem Versuch ist, das ich zeitweise eine Fehlermeldung erhalte.
Diese scheint vorallem dann aufzutreten wenn die Function etwas länger beschäftigt ist (Große XLS-Datei).
Fehlermeldung ist die folgende:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EInvalidCast mit der Meldung 'Ungültige Typumwandlung' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
Ich bin für jeden Vorschlag oder einen Denkansatz für mich dankbar.
Mir fehlt im Moment echt die Idee wie ich es anders lösen könnte, bzw. etwas eleganter.
Besten Dank vorab und viele Grüße,
Der Neuling
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt