Dateien in/aus Clipboard [ERLEDIGT]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Dateien in/aus Clipboard [ERLEDIGT]

Beitrag von Rolf »

Hallo

ich will eine Art einfachen FileExplorer umsetzen, wie z.B. XPPW32\SOURCE\SAMPLES\BASICS\GUIBROW\FBrowse.exe nun benötige ich noch die Funktionalität eine Datei in die Zwischenablage zu verschieben bzw. einzufügen. Wie das mit Dateiinhalten funktioniert, dass verstehe ich, aber mit einer Datei selbst?

hat das jemand schon umgesetzt?

Grüße Rolf
Zuletzt geändert von Rolf am Mi, 11. Nov 2009 15:13, insgesamt 1-mal geändert.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Dateien in/aus Clipboard

Beitrag von Tom »

Hallo, Rolf.

Du willst vermutlich den (binären) Inhalt einer Datei in die Zwischenablage kopieren, richtig? Dafür müsstest Du m.E. mit "XbpClipboard:RegisterFormat()" ein eigenes Format definieren und das dann AUF JEDEN FALL beim Auskopieren aus der Zwischenablage wieder angeben, da das Clipboard standardmäßig nur wenige Formate "kann". Interessehalber - warum willst Du den Inhalt einer Datei übergeben und nicht einfach ihren Namen mit Pfad?
Herzlich,
Tom
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Re: Dateien in/aus Clipboard

Beitrag von Rolf »

Ja, mir geht es nicht darum Dateien xBase intern zu kopieren, sondern Windows kompatibel
z.B.
Ich stehe in meinem Browser, auf der Zeile C:\temp\test.doc, rechte Maustaste, [Kopieren].
Das Programm schiebt die Datei in die Zwischenablage.
nun Wechsel ich auf den Desktop, rechte Maustaste, [Einfügen].
Datei wird auf den Desktop angelegt.

Unter http://www.vbarchiv.net/workshop/details.php?id=25 wird erstmal Grundsätzliches erklärt mit den entsprechenden DLL aufrufen.
Unter http://www.c-plusplus.de/forum/viewtopi ... 51309.html ist ein C-Beispiel für Drop angegeben. Funktioniert ist aber leider C und das Drag fehlt.

Grüße Rolf
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Dateien in/aus Clipboard

Beitrag von AUGE_OHR »

Rolf hat geschrieben:Ich stehe in meinem Browser, auf der Zeile C:\temp\test.doc, rechte Maustaste, [Kopieren].
Das Programm schiebt die Datei in die Zwischenablage.
nun Wechsel ich auf den Desktop, rechte Maustaste, [Einfügen].
soweit klar
Rolf hat geschrieben:Datei wird auf den Desktop angelegt.
also bei mit wird eine Verknüpfung auf den Desktop angelegt wie mit ShellLinkCreate().
Nur mit Shift Drag/Drop "verschiebe" ich die Datei.
Rolf hat geschrieben:Unter http://www.vbarchiv.net/workshop/details.php?id=25 wird erstmal Grundsätzliches erklärt mit den entsprechenden DLL aufrufen.
Unter http://www.c-plusplus.de/forum/viewtopi ... 51309.html ist ein C-Beispiel für Drop angegeben. Funktioniert ist aber leider C und das Drag fehlt.
Es wird ja immer von Datei Handle gesprochen, also sollte SHfile (Phil Idle) die richtigen API Funktionen haben.
auch Pablo könnte mit ShFileOperation() Functionen in die selbe Richtung gehen.
gruss by OHR
Jimmy
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Re: Dateien in/aus Clipboard

Beitrag von Rolf »

Hallo Jimmy
hab nach shFile gesucht und in folderBrow.zip bei Alaska\Downlod\Phils gefunden.
Habe aber keine Funktionen für mein Problem gefunden.

Da Problem ist wieder die Zeit, so dass ich nicht weiter experimentieren kann.
Wir haben es jetzt so umgesetzt, dass wir mit dem XbpFileDialog die Dateien hinzufügen bzw. speichern.

Ich möchte noch den letzten Stand weiter geben:
clipboard.prg
Anfänge der XBase Umsetzung des VB-Samples von weiter oben
(5.15 KiB) 213-mal heruntergeladen
Und noch eine C-Exe die eine Datei in die Zwischenablage schiebt z.B. Runshell( "c:\Temp\test.bmp","Clipboard.exe",.t.)
clipboard.zip
Umsetzung des Drag aus dem C-Sample als C-Exe
(10.7 KiB) 199-mal heruntergeladen
Sollte es irgendwelche Copyright Probleme mit den Anhängen geben bitte ich die Moderatoren diese ggf. zu entfernen.

Liebe Grüße Rolf
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Re: Dateien in/aus Clipboard

Beitrag von Rolf »

Nun bin ich doch noch dran

Habe folgenden Tipp im einem VBForum gefunden http://www.activevb.de/tipps/vb6tipps/tipp0520.html
und diesen wie folgt umgesetzt.

Code: Alles auswählen

#include "dll.ch"
#include "xbp.ch"
#include "appevent.ch"
//------------------------------------------------------------------
DLLFUNCTION OpenClipboard()                         USING STDCALL FROM USER32.DLL
DLLFUNCTION CloseClipboard()                        USING STDCALL FROM USER32.DLL
DLLFUNCTION EmptyClipboard()                        USING STDCALL FROM USER32.DLL
DLLFUNCTION CountClipboardFormats()                 USING STDCALL FROM USER32.DLL
DLLFUNCTION EnumClipboardFormats( lngFormat )       USING STDCALL FROM USER32.DLL
//------------------------------------------------------------------
DLLFUNCTION IsClipboardFormatAvailable( lngFormat )   USING STDCALL FROM USER32.DLL
DLLFUNCTION GetClipboardData( lngFormat )             USING STDCALL FROM USER32.DLL
DLLFUNCTION DragQueryFileA( hDrop, UINT, lpStr, ch)   USING STDCALL FROM SHELL32.DLL
//------------------------------------------------------------------
#define MAX_PATH 260
#define CF_HDROP             15
//------------------------------------------------------------------
FUNCTION GetDragFilelist(oDlg1)
    LOCAL hWnd         := oDlg1:getHWND()
    LOCAL arrFiles     := SPACE(260)
    LOCAL hDrop        := 0 // 'Handle auf die Clipboard-Daten
    LOCAL nFiles       := 0 //'Anzahl der Dateien in den Daten
    LOCAL cFileName     := "" //'temporäre Variable
    LOCAL T            := 0 //'temporäre Variable
    LOCAL result       := 0 //'temporäre Variable
    LOCAL iLenFileName := 0
    
    oClipBoard := XbpClipBoard():new():create()
    oClipBoard:open()
    //OpenClipboard(hWnd)

    if( IsClipboardFormatAvailable( CF_HDROP ) > 0) //Then 'Wenn Daten vom Typ CF_HDROP vorhanden sind

        //'Handle auf Daten holen
        hDrop = GetClipboardData(CF_HDROP)

        Msgbox(Var2Char(hDrop),"Handle hDrop")

        //'Anzahl der Dateien abfragen
        //VB// nFiles = DragQueryFile(hDrop, -1&, "", 0)
        nFiles = DragQueryFileA(hDrop, -1, "", 0)

        Msgbox(Var2Char(nFiles), "Dateien in Clipboard") //> 1???

        //'Dateiname(T) holen
        For T = 0 To nFiles - 1
            cFileName = Space(260)//+Chr(0) // 260
            iLenFileName = Len(cFileName)//-1
            result = DragQueryFileA(hDrop, T, @cFileName, iLenFileName)

            //MemoWrit("temp.txt",cFileName)

            Msgbox(Var2Char(result))
            Msgbox(Var2Char(iLenFileName))
            Msgbox(cFileName)

            //arrFile(T + 1) = Left(FileName, result)
        Next
    else
        Msgbox("Bitte zuerst eine Datei im WindowsExplorer mit Strg+C kopieren")
    endif
    
    //GetDragFilelist = nFiles 'Anzahl der geholten Dateien als Funktionswert  zurückliefern
    //CloseClipboard 'Clipboard schließen

    EmptyClipboard()

    oClipBoard:close()
    //CloseClipboard(hWnd)
RETURN NIL
Das Problem ist nur ich bekomme den Dateinamen immer leer zurück?
Hat jemand eine Idee was ich noch ändern muss?

Liebe Grüße
Rolf
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: Dateien in/aus Clipboard

Beitrag von Günter Beyes »

Hallo Rolf,

DLLFUNCTION DragQueryFileA( hDrop, UINT, @lpStr, ch) USING STDCALL FROM SHELL32.DLL

Günter
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Re: Dateien in/aus Clipboard

Beitrag von Rolf »

Danke genau das wars,
hab mich gerade noch mit C abgekämft.

Vielen Dank

Nachtrag: hab nun auch die C-Dll fertig mit den Funktionen putFile() und getFileList().
Bei Interesse bitte PN an mich. Ich verwende derzeit auch die weiter oben angehängte .exe.

Hinweise:
- Bitte im Xbase-Quellcode den Rückgabestring mit der Function ZTrim() von
C:\ALASKA\XPPW32\SOURCE\samples\basics\ExtDll\DLLCALL.prg bearbeiten, um den Stringabschluss '\0' abzuschneiden.
- Das öffnen des Clipboards sollte auch erst nach IsClipboardFormatAvailable() erfolgen.

Liebe Grüße
Rolf
Antworten