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;