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)
-   -   Clipboard.GetTextBuf (https://www.clubdelphi.com/foros/showthread.php?t=35572)

ixMike 14-09-2006 11:32:40

Clipboard.GetTextBuf
 
Hola, amigos.

¿Alguien podría decirme cómo funciona esa función? Yo hago esto, pero aparece un error (algo de puntero inválido, o función de puntero inválido, no lo recuerdo bien).

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var P: PChar;
begin
P:='';
If Clipboard.HasFormat(CF_TEXT)then Clipboard.GetTextBuf(P,NUMERO);
Memo1.Text:=P;
end;

En la ayuda de Delphi, donde pongo NUMERO dice que utilice la función GetTextLen, pero el Clipboard no la tiene. En NUMERO también probé con cero y con MAX_PATH (ya no sabía qué hacer).

Por supuesto, esto era un programa de prueba. No quiero "Pegar del portapapeles", sino extraer el texto del Portapapeles para modificarlo.

Utilizo Delphi 3 Standard.

Muchas gracias.

seoane 14-09-2006 13:53:48

Vamos por partes:

En vez de utilizar GetTextBuf podrias usar la propiedad asText del Clipboard que te devuelve el contenido del portapapeles como un string.

Pero vamos con lo que preguntas. El problema es que tu le pasa un puntero, pero ese debe de apuntar a donde se almacenara el texto y no a un texto en concreto. Esto lo podemos solucionar de varias maneras.

Podemos hacer que apunte a un array de caracteres que usaremos como buffer.
Código Delphi [-]
var
  P: PChar;
  Buffer: array[0..1024] of Char;
begin
  P:= @Buffer;
  if Clipboard.HasFormat(CF_TEXT) then
    Clipboard.GetTextBuf(P,Sizeof(Buffer)-1);
  Memo1.Text:=P;
end;

O tambien asi, reservando un pedazo de memoria.
Código Delphi [-]
var
  P: PChar;
begin
  GetMem(P,1025);
  try
    if Clipboard.HasFormat(CF_TEXT) then
      Clipboard.GetTextBuf(P,1024);
    Memo1.Text:= P;
  finally
    FreeMem(P);
  end;
end;

dec 14-09-2006 13:59:15

Hola,

Seoane, muchas gracias, como siempre, muy instructivo. :)

ixMike 26-09-2006 19:23:33

Primero, pedir perdón por el retraso en contestar, acabo de empezar 2º de Bachillerato, y eso quira mucho tiempo libre.

Segundo, muchísimas gracias por la respuesta, me es de gran ayuda.

Tercero, no utilizo la propiedad AsText porque (al menos en mi versión de Delphi) solo admite 255 carácteres, y yo necesitaba más.

Muchas gracias otra vez


La franja horaria es GMT +2. Ahora son las 11:48:31.

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