Giga. No. 4, 2008 - Editorial Universitaria
Giga. No. 4, 2008 - Editorial Universitaria
Giga. No. 4, 2008 - Editorial Universitaria
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
16<br />
CountClipboardFormat<br />
Retorna el número de formatos asociados<br />
a los datos en el Portapapeles.<br />
Hablando de<br />
formatos y recursos<br />
Es necesario conocer los tipos de<br />
formatos válidos para el Clipboard y<br />
el consumo de los recursos del sistema<br />
que éstos provocan. En el caso<br />
de objetos gráficos y películas, la<br />
acción de copiar y pegar puede tardarse<br />
un poco según su tamaño y<br />
cantidad. Cuando se programa en<br />
aplicaciones particulares, el uso del<br />
Clipboard debe tener en cuenta los<br />
formatos y el consumo de los recursos<br />
y conocer que en esos casos<br />
puede haber datos almacenados<br />
en diferentes formatos. Para ello,<br />
el sistema facilita la técnica DELA-<br />
YED RENDERING con los mensajes<br />
WM_RENDERFORMAT y WM_REN-<br />
DERALLFORMAT. El uso de estos<br />
mensajes permite disminuir los<br />
tiempos en la manipulación de<br />
datos complejos.<br />
La conversión de formatos es otra<br />
de las características permitidas<br />
cuando usamos el Clipboard, la cual<br />
es suministrada por el sistema para<br />
un grupo de formatos, y el programador<br />
sólo tiene que preocuparse<br />
por llamar a la función y pasar el<br />
nuevo formato deseado, y si está en<br />
el grupo definido, los resultados<br />
serán los esperados, en la siguiente<br />
tabla se muestran algunos de los<br />
formatos válidos y su grupo de conversión.<br />
[GiGA 4 / <strong>2008</strong>]<br />
softweriando<br />
Existen otros formatos válidos muy<br />
utilizados como el CF_BITMAP o el<br />
Ventana de la aplicación<br />
CF_METAFILEPICT que al igual que el<br />
resto se convierten en manipuladores<br />
del dato en cuestión, haciendo referencia<br />
a éste mediante la función<br />
GetClipboardData.<br />
Entrando en materia<br />
Estoy seguro que más de un programador<br />
se ha preguntado cómo es que<br />
el procesador de textos Word puede<br />
representar muchos objetos almacenados<br />
en el Portapapeles, así ocurre<br />
con otras aplicaciones del paquete<br />
Office. En el caso que nos ocupa dentro<br />
de la misma aplicación mencionada<br />
(WinWord) se puede mostrar el<br />
Panel de Tareas (oprima Ctrl.+C dos<br />
veces) y se mostrará a la<br />
derecha la lista de objetos<br />
que pasemos al Portapapeles.<br />
Para montar una aplicación<br />
particular sólo necesitamos<br />
saber que existen<br />
formatos válidos, que es<br />
necesario un algoritmo para<br />
trabajar y hacernos "dueños"<br />
del Clipboard y muy rápido<br />
se estará utilizando esta<br />
importante herramienta que<br />
se convierte en una interfaz<br />
ideal entre aplicaciones.<br />
Seguidamente se muestra<br />
un pequeño ejemplo que<br />
permite visualizar el contenido<br />
del Clipboard con el<br />
uso del desarrollador Delphi<br />
versión 7.<br />
Prepare una ventana con un<br />
control MEMO y un botón<br />
para la acción de ver el contenido<br />
como se muestra en la figura:<br />
Agregue la siguiente declaración en la<br />
línea de las declaraciones privadas:<br />
procedure VerElClipboard(var<br />
msg: TWMDrawClipboard); message<br />
WM_DRAWCLIPBOARD;<br />
en el bloque de declaración del formulario<br />
agregue:<br />
visualizador: HWND;<br />
y en la implementación inserte el<br />
siguiente código:<br />
procedure<br />
TForm1.VerElClipboard(var msg:<br />
TWMDrawClipboard);<br />
var Formato: THandle;<br />
texto: Pchar;<br />
ClassName: array [0..255]<br />
of char;<br />
ownerwindow: HWND;<br />
begin<br />
if<br />
isClipboardFormatAvailable(CF_TE<br />
XT) then<br />
begin<br />
SetForegroundWindow(Form1.Handle<br />
);<br />
ownerwindow:=getclipboardowner;<br />
openclipboard(form1.Handle);<br />
Formato := getclipboarddata(CF_TEXT);<br />
texto:=globallock(Formato);<br />
setwindowtext(memo1.Handle,<br />
texto);<br />
end;<br />
end;<br />
En el evento OnClick del botón inserte: