Autor Beitrag
Benedikt
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 24.04.05 11:54 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: 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.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)
Benedikt
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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?
Benedikt
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden 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<>0then
                begin
                        NumFiles:=DragQueryFile(F, $FFFFFFFFnil0);
                        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;


ausblenden 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=0then
                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: