PDA

Ver la Versión Completa : Clipboard.GetTextBuf


ixMike
14-09-2006, 11:32:40
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).


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.

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.

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