Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-07-2006
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Question Texto del portapapeles sin Clipbrd.dcu

Hola, gente del foro

Quería saber cómo obtener el texto del portapapeles usando la API de windows, y no la uses Clipbrd.

Hice un proyecto de prueba, pero no me funciona (solo consigue los carácteres #10#13)

Este es el código:
Código Delphi [-]
program ClipBoardTextFileCreator;
 
uses Windows;
 
var
  Puntero: PChar;
  HC: THandle;
  F: TextFile;
 
begin
OpenClipboard(GetModuleHandle(nil));
HC:=GetClipboardData(CF_TEXT);
Puntero:=GlobalLock(HC);
AssignFile(F, ParamStr(0)+'.txt');
ReWrite(F);
WriteLn(F, string(Puntero));
CloseFile(F);
GlobalUnlock(HC);
CloseClipboard;
end.

¿Alguien puede decirme dónde está el fallo?

Gracias.
Responder Con Cita
  #2  
Antiguo 28-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
El problema es una cosa sencillita, pero ya puestos, he retocado un poco el código espero que no te moleste

Código Delphi [-]
var
  hText: THandle;
  pText: PChar;
  F: TextFile;
begin
  if IsClipboardFormatAvailable(CF_TEXT) then
    if OpenClipboard(0) then
    try
      hText:= GetClipboardData(CF_TEXT);
      if hText <> 0 then
      begin
        pText:= GlobalLock(hText);
        if pText <> nil then
        begin
          AssignFile(F, ParamStr(0)+'.txt');
          {$I-}
            Rewrite(F);
          {$I+}
          if IOResult=0 then
          begin
            // Aqui estaba el error, para que lo convierta en string primero hay que indicarle que es un PChar
            WriteLn(F, String(PChar(pText)));
            CloseFile(F);
          end;
          GlobalUnlock(hText);
        end;
      end;
    finally
      CloseClipboard;
    end;
end;
Responder Con Cita
  #3  
Antiguo 29-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Joroba Seoane, eres como un libro abierto, no dejas de sorprender con el código fuente que escribes como un poeta... de los buenos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 29-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por dec
Hola,
Joroba Seoane, eres como un libro abierto, no dejas de sorprender con el código fuente que escribes como un poeta... de los buenos
Me vas a hacer sonrojar. Citando a los clásicos "Hasta el mas tonto hace relojes"
Responder Con Cita
  #5  
Antiguo 29-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

"Hasta el más tonto hace relojes", ¡Ay!, ya lo creo yo que sí. Pero, no es tu caso Seoane, no es tu caso. Y no digo que no pudieras dedicarte a relojero.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 29-07-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Oigan, todo esto está muy bonito, de veras que sí, y coincido con David en que seoane es sorprendente; tal pareciera que cualquier cosa que se pregunte, él tiene justo enfrente un pedazo de código apropiado. Pero hay algo que me da curiosidad, sólo eso, ¿por qué no usar la unidad clipbrd?

// Saludos
Responder Con Cita
  #7  
Antiguo 29-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Pero hay algo que me da curiosidad, sólo eso, ¿por qué no usar la unidad clipbrd?
Supongo, y es solo una suposición, que lo quiere así por el tamaño. Por el código que puso al principio deduzco que esta creando su aplicación directamente en el dpr sin usar demasiadas units. Un programa así te puede ocupar unos 16Kb, pues bien si se añade la unit clipbrd se están añadiendo a su vez classes y graphics, lo que engorda el ejecutable a unos 300 kb. Yo también pase por esa fiebre de intentar reducir los ejecutables usando solo las APIs, pero al final te das cuenta que estas reinventando la rueda y que es mucho trabajo. De todas formas es bueno conocer como funcionan las cosas por dentro y no quedarse en la superficie.
Responder Con Cita
  #8  
Antiguo 09-08-2006
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Muschísimas gracias.

Y muy bonito el código.

El cuanto a por qué no usar la Clipbrd.dcu, pues que no me apetece multiplicar el tamaño de mi ejecutable casi por dos por algo tan pequeño que necesito (es que Clipbrd.dcu, Forms.dcu, Dialogs.dcu y Graphics.dcu son unidades que siempre intento evitar, soy un poco maniático con el espacio, sobre todo porque hasta hace poco tenía un HD de 15 GB nada más, y sin grabadora de CD ni pendrive, lo que me limitaba al uso de Floppys).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar del portapapeles a un DBGrid bbjb Varios 1 31-05-2006 18:23:10
De cómo pueden robarte el contenido del portapapeles en una página Web dec Seguridad 9 02-10-2005 16:05:55
Monitorizar el portapapeles de windows rsantosr API de Windows 3 26-09-2005 07:29:38
Portapapeles... Perio Varios 3 29-07-2005 16:27:41
StringGrid -> Portapapeles acertij022 OOP 3 17-10-2003 17:14:16


La franja horaria es GMT +2. Ahora son las 16:08:07.


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