10.05.2013 Views

Giga. No. 4, 2008 - Editorial Universitaria

Giga. No. 4, 2008 - Editorial Universitaria

Giga. No. 4, 2008 - Editorial Universitaria

SHOW MORE
SHOW LESS

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:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!