{"id":199,"date":"2011-07-29T21:35:05","date_gmt":"2011-07-30T00:35:05","guid":{"rendered":"http:\/\/leandroascierto.com\/blog\/?p=199"},"modified":"2011-08-25T07:47:33","modified_gmt":"2011-08-25T10:47:33","slug":"clsbuttonnc","status":"publish","type":"post","link":"https:\/\/leandroascierto.com\/blog\/clsbuttonnc\/","title":{"rendered":"ClsButton No Client"},"content":{"rendered":"<div align=\"justify\">\n<p style=\"text-align: justify;\">M\u00f3dulo clase para agregar un bot\u00f3n en las partes no cliente del formulario (bordes), actualmente con la llegada de Windows Seven son varias las aplicaciones que utilizan este sistema. Bien, esta clase s\u00f3lo intenta crear un efecto parecido, y digo intenta ya que es otro m\u00e9todo el que utilizan, lo que hace es crear una ventana en la que aplica el API UpdateLayeredWindow, la cual transforma un mapa de bits en una m\u00e1scara para la ventana, la cual tiene soporte Alpha. Las aplicaciones por ejemplo Firefox, donde hoy en d\u00eda se puede ver un bot\u00f3n naranja sobre el \u00e1rea no cliente utilizan otro m\u00e9todo\u00a0<a href=\"http:\/\/www.leandroascierto.com\/foro\/index.php?topic=161.0\">(DwmExtendFrameIntoClientArea, DwmEnableBlurBehindWindow)<\/a>\u00a0que es el de repintar el marco de la ventana empleando la nueva Guid de Windows Seven, esta clase tambi\u00e9n se puede utilizar bajo Windows XP, para ser m\u00e1s exacto esta clase hace lo mismo que se v\u00e9 en el Bot\u00f3n Inicio de Windows 7.<\/p>\n<p>Detalles de sus propiedades y funciones:<\/p>\n<ul style=\"text-align: justify;\">\n<li><em>CreateButton<\/em>: Inicializa el bot\u00f3n, el primer par\u00e1metro debe ser el hwnd de la ventana padre, el segundo par\u00e1metro es opcional para el ToolTipText.<\/li>\n<li><em>LoadImageFromFile<\/em>: Lee una imagen desde archivo.<\/li>\n<li><em>LoadImageFromRes<\/em>: Lee una imagen desde el archivo de recurso de la aplicaci\u00f3n.<\/li>\n<li><em>LoadImageFromStream<\/em>: Lee una imagen desde un array de bits.<\/li>\n<li><em>Left<\/em>: Devuelve o establece la ubicaci\u00f3n izquierda del bot\u00f3n con respecto a su ventana padre.<\/li>\n<li><em>Top<\/em>: Devuelve o establece la ubicaci\u00f3n superior del bot\u00f3n con respecto a su ventana padre.<\/li>\n<li><em>Right<\/em>: Devuelve o establece la ubicaci\u00f3n derecha del bot\u00f3n con respecto a su ventana padre.<\/li>\n<li><em>Bottom<\/em>: Devuelve o establece la ubicaci\u00f3n inferior del bot\u00f3n con respecto a su ventana padre.<\/li>\n<li><em>MoveMode<\/em>: Indica a la clase en qu\u00e9 sentido debe mover el bot\u00f3n cuando la ventana padre se mueva o cambie de tama\u00f1o.<\/li>\n<li><em>Enabled<\/em>: Devuelve o establece si el bot\u00f3n est\u00e1 o no habilitado<\/li>\n<li><em>Alpha<\/em>: Transparencia del bot\u00f3n rango de 0 a 255.<\/li>\n<li><em>ToolTipText<\/em>: Devuelve o establece el texto mostrado cuando el mouse se sit\u00faa sobre el control.<\/li>\n<li><em>ImageWidth<\/em>: Devuelve\u00a0 el ancho de la imagen cargada.<\/li>\n<li><em>ImageHeight<\/em>: Devuelve el alto de la imagen cargada.<\/li>\n<li><em>hwnd<\/em>: Devuelve el Handle del bot\u00f3n.<\/li>\n<li><em>ButtonWidth<\/em>: Devuelve el ancho del bot\u00f3n.<\/li>\n<li><em>ButtonHeight<\/em>: Devuelve el alto del bot\u00f3n.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Vale aclarar que el bot\u00f3n no tiene Caption ya que es una tira de im\u00e1genes (la imagen debe ser siempre una tira vertical) -ver el formato en el zip del ejemplo-, el orden utilizado de los estados es\u00a0Normal, Hot, Presionado y Deshabilitado. El formato de la imagen es conveniente que sea .PNG para la transparencia.<\/p>\n<p>Nota: La clase subclasifica las ventanas y no utilic\u00e9 el m\u00e9todo modo seguro (SafeMode) s\u00f3lo para que no sea muy grande el m\u00f3dulo, as\u00ed que ojo No presionar el Stop del IDE de VB6. Ante cualquier error seguramente se les cerrar\u00e1 todo el proyecto y en el peor de los casos se les reiniciara Windows. Es recomendable comentar la l\u00ednea de inicializaci\u00f3n del bot\u00f3n (CreateButton) hasta que se compile el proyecto.<\/p>\n<p align=\"center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.leandroascierto.com\/blog\/imagenes\/Vista_Seven_ButtonNC.png\" alt=\"Boton No Cliente\" width=\"318\" height=\"765\" \/><\/p>\n<p style=\"text-align: justify;\">En el ejemplo hice una validaci\u00f3n que si la versi\u00f3n de Windows es Vista o Seven que quite el icono y el Caption de la ventana utilizando el api SetWindowThemeAttribute, ahora si es Windows XP van a ver que no queda muy bien ya que debajo del bot\u00f3n se v\u00e9 el icono y el caption, quiz\u00e1s est\u00e9s pensando en poner un icono transparente y remover el Caption pero esto har\u00e1 que no se vea en la barra de tareas.<\/p>\n<\/div>\n<p align=\"center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.leandroascierto.com\/blog\/imagenes\/XP_ButtonNC.png\" alt=\"Boton No Cliente\" width=\"201\" height=\"118\" \/><\/p>\n<p align=\"center\"><a href=\"https:\/\/leandroascierto.com\/blog\/descarga.php?url=ClsButtonNC.zip\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Descargar\" src=\"https:\/\/leandroascierto.com\/blog\/descarga.php?file=ClsButtonNC.zip\" alt=\"\" width=\"280\" height=\"61\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u00f3dulo clase para agregar un bot\u00f3n en las partes no cliente del formulario (bordes), actualmente con la llegada de Windows Seven son varias las aplicaciones que utilizan este sistema. Bien, esta clase s\u00f3lo intenta crear un efecto parecido, y digo intenta ya que es otro m\u00e9todo el que utilizan, lo que hace es crear una <a href='https:\/\/leandroascierto.com\/blog\/clsbuttonnc\/' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[31,33,19,18],"class_list":["post-199","post","type-post","status-publish","format-standard","hentry","category-modulos","tag-api","tag-button","tag-updatelayeredwindow","tag-visual-basic","category-29-id","post-seq-1","post-parity-odd","meta-position-corners","fix"],"_links":{"self":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/comments?post=199"}],"version-history":[{"count":6,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/199\/revisions"}],"predecessor-version":[{"id":452,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/199\/revisions\/452"}],"wp:attachment":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/media?parent=199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/categories?post=199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/tags?post=199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}