Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Como pegar algo que esté en el portapapeles (https://www.clubdelphi.com/foros/showthread.php?t=64107)

scaballero 17-03-2009 20:58:11

Como pegar algo que esté en el portapapeles
 
Disculapa si la pregunata está fuera de lugar pero necesito saber como pegar algo que ya esté copiado en en el portapapeles de windows en un directorio

ContraVeneno 17-03-2009 23:13:52

yo crearía una lista de acciones con un TActionList al cuál le puedes agregar acciones predefinidas como lo es copiar, cortar y pegar. En el actionList, le das click con el botón derecho y seleccionas "New Standar Action" y vas a encontrar la función de pegar.

Ahora cuando quieras pegar el contenido, solo mandas llamar esta acción.

roman 17-03-2009 23:25:28

¿Y esa acción sirve también para pegar archivos?

// Saludos

ContraVeneno 17-03-2009 23:40:07

changos, tienes toda la razón, creo que para eso no sirve... ¿?

ya ves, eso les pasa por decirme gurú :o:o:o

roman 17-03-2009 23:45:48

Maestro Contra no se apene, al mejor cazador se le va la liebre :)

// Saludos

roman 18-03-2009 01:45:31

Cita:

Empezado por scaballero (Mensaje 341738)
necesito saber como pegar algo que ya esté copiado en en el portapapeles de windows en un directorio

Si hablas de un directorio, entonces supongo que te refieres a copiar los archivos del portapapeles.

En principio, el siguiente procedimiento te devuelve una lista de los nombres (incluyendo la ruta) de los archivos que estén en el portapapeles:

Código Delphi [-]
procedure GetFilesFromClipboard(Files: TStrings);
var
    Drop: Cardinal;
    Count, I: Integer;
    Buffer: PChar;
    BufferSize: Integer;

begin
    (* Vemos si hay archivos en el portapapeles *)
    if Clipboard.HasFormat(CF_HDROP) then
    begin
        (* Obtenemos una referencia a la estructura *)
        Drop := Clipboard.GetAsHandle(CF_HDROP);

        (* Obtenemos el número de archivos *)
        Count := DragQueryFile(Drop, $FFFFFFFF, nil, 0);

        (* Procesamos cada archivo *)
        for I := 0 to Count - 1 do
        begin
            (* Obtenemos la longitud del nombre de archivo *)
            BufferSize := DragQueryFile(Drop, I, nil, 0) + 1;

            (* Asignamos memoria para recibir la cadena *)
            GetMem(Buffer, BufferSize);

            try
                (* Obtenemos el nombre de archivo *)
                DragQueryFile(Drop, I, Buffer, BufferSize);

                (* Agregamos el archivo a la lista *)
                Files.Add(Buffer);
            finally
                FreeMem(Buffer);
            end;
        end;
    end;
end;

Por ejemplo,

Código Delphi [-]
GetFilesFromClipboard(Memo1.Lines);

te pondría la lista en un Memo. El punto es que, teniendo ya la lista de nombres de archivos, puedes ya copiarlos uno a uno con la función CopyFile.

// Saludos

dec 18-03-2009 02:04:28

Hola,

Muy buen "tip" Román. ;)


La franja horaria es GMT +2. Ahora son las 20:03:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi