Entwickler-Ecke
Sonstiges (Delphi) - Problem beim Ausschneiden/Einfügen per STRG+X/V
Delete - So 24.04.05 11:54
Titel: Problem beim Ausschneiden/Einfügen per STRG+X/V
Moin,
auch ich hab nach längerem mal wieder eine Frage :wink:
Und zwar steh ich vor einem Problem, auf dessen Lösung ich nach längerem Suchen immer noch nicht gestoßen bin:
Ich kopiere aus meinem Programm einige Dateien mit STRG+C oder möchte sie mit STRG+X ausschneiden - soweit so gut, das funktioniert auch alles (HDROP, Clipboard etc) - allerdings weiß ich nicht wie ich das handhaben soll das die Dateien wirklich ausgeschnitten werden, wenn sie woanders wieder eingefügt wurden?!?
Kleines Beispiel:
Wenn ich bei mir im Programm STRG+X mache und dann bei mir im Programm, oder auch im Explorer STRG+V drücke, dann werden die Dateien zwar korrekt kopiert - allerdings sind die Alten immer noch vorhanden.
Genau das gleiche tritt natürlich auch umgekehrt auf - wenn ich im Explorer Dateien mit STRG+X ausschneide und bei mir im Programm mit STRG+V einfügen will, geht das zwar - allerdings bleiben die Dateien am ursprünglichen Ort ebenfalls bestehen...
Ich hoff mal das Problem ist klar, ich müsste halt wohl irgendwie abfragen ob die Dateien nun grade nur kopiert oder ausgeschnitten werden sollen, bzw. es beim Einfügen in die Zwischenablage selbst festlegen?!?
MfG und herzlichen Dank,
Benedikt
fvolk - So 24.04.05 12:23
Naja, das Programm, das die Ausschneide/Einfüge-Operation beendet, muss sich auch drum kümmern, dass (1.) die Originaldatei nach erfolgreichem Kopieren gelöscht wird und (2.) auch aus der Zwischenablage verschwindet.
So jedenfalls sehe ich die Sache.
Delete - So 24.04.05 16:26
Das ist mir ja auch vollkommen klar - nur woher weiß ich das die Ausschneide/Einfüge-Prozedur beendet wurde?
Ich krieg ja nicht mit ob die bei mir im Prog ausgeschnittene Datei woanders eingefügt wurde bzw. weiß ich anders herum auch nicht, ob eine Datei in der Zwischenablage nun ausgeschnitten, also im Anschluss gelöscht, oder nur kopiert werden soll...
Fabian W. - So 24.04.05 16:59
Wie schneidest dun denn aus? Bei Memos gibt's doch schon Proceduren wie CutToClipboard, kannst du sowas ähnliches nicht verwenden?
Delete - So 24.04.05 17:14
Meines Wissens gibt es sowas für Dateien net, ich kann allerdings mal gerne meine Einfügen und Kopieren-Prozeduren posten:
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:
| procedure ClipBoardGetFiles(AList: TStringList); var F: THandle; Buffer: Array [0..MAX_PATH] of Char; i: Integer; NumFiles: Integer; begin if (not (Clipboard.HasFormat(CF_HDROP))) then Exit;
Clipboard.Open; try F:=Clipboard.GetAsHandle(CF_HDROP); if (F<>0) then begin NumFiles:=DragQueryFile(F, $FFFFFFFF, nil, 0); AList.Clear;
for i:=0 to NumFiles-1 do begin Buffer[0]:=#0; DragQueryFile(F, i, Buffer, SizeOf(Buffer)); AList.Add(Buffer); end; end; finally Clipboard.Close; end; end; |
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:
| procedure ClipBoardSetFiles(AList: TStringList); var AFileList: String; ADropFiles: PDropFiles; AGlobal: THandle; ALength: Integer; i: Integer; begin AFileList:='';
for i:=0 to AList.Count-1 do begin AFileList:=AList[i]+#0+AFileList; end; ALength:=Length(AFileList)+1; AFileList:=AFileList+#0;
AGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDropFiles)+ALength);
if (AGlobal=0) then raise Exception.Create('Could not allocate memory.'); begin ADropFiles := GlobalLock(AGlobal); ADropFiles^.pFiles := SizeOf(TDropFiles); Move(AFileList[1], (PChar(ADropFiles)+SizeOf(TDropFiles))^, ALength); GlobalUnlock(AGlobal); Clipboard.SetAsHandle(CF_HDROP, AGlobal); end; end; |
Ganz fertig sind die beiden Prozeduren noch net, aber sie werden halt aufgerufen einmal mit ner übergebenen Stringliste welche die entsprechenden Dateien enthält die kopiert werden sollen (funktioniert ja auch alles problemlos), und einmal bekomm ich dann halt die Liste zurück der zu kopierenden/ausschneidenden Dateien - nur weiß ich halt wie gesagt dann nicht ob ich ausschneiden oder kopieren soll...
Weiß denn wirklich keiner wie man Dateien unter Windows ausschneidet? :roll: :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!