AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim Ausschneiden/Einfügen per STRG+X/V
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Ausschneiden/Einfügen per STRG+X/V

Ein Thema von Benedikt · begonnen am 23. Apr 2005 · letzter Beitrag vom 16. Mär 2010
Antwort Antwort
Benedikt
(Gast)

n/a Beiträge
 
#1

Problem beim Ausschneiden/Einfügen per STRG+X/V

  Alt 23. Apr 2005, 18:11
Moin,

auch ich hab nach längerem mal wieder eine Frage

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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem beim Ausschneiden/Einfügen per STRG+X/V

  Alt 25. Apr 2005, 12:01
Wenn du bereits mit der IDataObject-Schnittstelle arbeitest, dann hast du wohl nur vergessen, dass du die Methode SetData benutzen kannst um dem Source-Object mitzuteilen, dass die Drop- resp. Paste-Operation erfolgreich war.

Wenn nicht kannst du im MSDN näheres nachlesen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benedikt
(Gast)

n/a Beiträge
 
#3

Re: Problem beim Ausschneiden/Einfügen per STRG+X/V

  Alt 25. Apr 2005, 15:00
Hi,

momentan benutze ich folgende beide Methoden:

Delphi-Quellcode:
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-Quellcode:
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;

Ist das damit nicht möglich? Wenn dann muss ich mich wohl mal mit dem von dir angesprochenen IDataObject etc. auseinandersetzen (gibts da denn nirgendwo ein Beispiel für? Schneidet denn keiner Dateien aus )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Problem beim Ausschneiden/Einfügen per STRG+X/V

  Alt 25. Apr 2005, 16:43
Deine gezeigten Routinen lesen und schreiben das ClipBoard-Format CF_HDROP. An anderer Stelle wirst du dein Formular als DropTarget registriert haben und die Drag&Drop-Events verarbeiten. Oder wie erfährst du von den Drop-Versuchen aus dem Shell-Namensraum?

Übrigens: Obwohl ich die VirtualShellTools noch nicht verwendet habe vermute ich, dass du dort jede Menge Delphi-Code studieren kannst, der sich mit dieser Problematik auseinander setzt.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benedikt
(Gast)

n/a Beiträge
 
#5

Re: Problem beim Ausschneiden/Einfügen per STRG+X/V

  Alt 25. Apr 2005, 20:14
Ich benutze meine Methoden im Moment einfach in einer ListView wobei ich STRG+V/X/C abfange und dann die entsprechenden Methoden aufrufe.
Das heißt bei STRG+V arbeite ich mit der GetFiles und bei STRG+X/C mit SetFiles und kopiere dann mit den Shell-Funktionen die Dateien. Nur wie gesagt war mein Problem dann, das ich nicht weiß ob die Dateien ausgeschnitten oder kopiert werden sollen...
Aber ich glaub ich schau mir da mal die VirtualShellTools oder anderes an - is ja irgendwie ne merkwürdige Sache das Ganze.
  Mit Zitat antworten Zitat
Benutzerbild von ralfschwalbe
ralfschwalbe

Registriert seit: 19. Jul 2007
Ort: Lichtenstein/Sachsen
133 Beiträge
 
Delphi XE3 Professional
 
#6

Re: Problem beim Ausschneiden/Einfügen per STRG+X/V

  Alt 16. Mär 2010, 14:51
Hallo,

ich krame mal dieses alte Thema heraus...

Hat jemand eine Lösung, um herauszufinden, ob im Explorer nun Ctrl+C oder Ctrl+X gedrückt wurde?

Ich benutze in etwa obigen Code. Funktioniert super beim Einfügen, wenn vorher kopiert wurde. Wenn vorher ausgeschnitten wurde, kommt manchmal gar nichts an, manchmal ne AV, usw... Auf jeden Fall bleiben die Ausgangsdateien stehen...
Ralf Schwalbe
viele Grüße...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz