tag:blogger.com,1999:blog-23757998408712534972024-03-13T23:01:30.085-05:00infotutorialesTecnologia lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.comBlogger412125tag:blogger.com,1999:blog-2375799840871253497.post-41713925915602997122024-01-16T18:22:00.002-05:002024-01-16T18:22:34.449-05:00Crear archivos Log en PowerBuilder<p style="text-align: center;"><b> Crear archivos Log en PowerBuilder</b></p><p style="text-align: center;"></p><div class="separator" style="clear: both; font-weight: bold; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh2oi-dVgxOCTH5CTZElwz-zlVjS8CJImpmHqnG_0EHFrnGd03G9vYpn5VC4TClLmH81Ib3EPVIDUdXEf6KePt02z6dC4TyDehu3LovaAQ8VXgX64a8A1Av21I75CkKhUOhjcedT20jwEZSE2sUyATy6iY8yHeHmizE-ROKA3HbyMhpVvdrjKUidicGZhQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="541" data-original-width="1022" height="235" src="https://blogger.googleusercontent.com/img/a/AVvXsEh2oi-dVgxOCTH5CTZElwz-zlVjS8CJImpmHqnG_0EHFrnGd03G9vYpn5VC4TClLmH81Ib3EPVIDUdXEf6KePt02z6dC4TyDehu3LovaAQ8VXgX64a8A1Av21I75CkKhUOhjcedT20jwEZSE2sUyATy6iY8yHeHmizE-ROKA3HbyMhpVvdrjKUidicGZhQ=w445-h235" width="445" /></a></div><div class="separator" style="clear: both; font-weight: bold; text-align: center;"><br /></div><div class="separator" style="clear: both; font-weight: bold; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Estoy seguro que a más de uno se ha visto en la necesidad de crear log para poder realizar seguimiento a algunos procesos de sus sistemas. Para esto he creado una clase que simplifica el proceso de creación de estos archivos.</div><div><br /></div>Esta clase tiene varios funciones que podemos usar.<div><br /><div><ul style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: left;"><li style="box-sizing: border-box;">of_log(runtimeerror)<ul style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Recibe como parametro un objeto runtimeerror y escribe en el archivo log el detalle del error.</li></ul></li><li style="box-sizing: border-box; margin-top: 0.25em;">of_log(string)</li><ul><li style="box-sizing: border-box; margin-top: 0.25em;">Recibe un string que es escrito en el archivo log.</li></ul><li style="box-sizing: border-box; margin-top: 0.25em;">of_log(string,string)<ul style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Recibe dos string que es escrito en el archivo log.</li><li style="box-sizing: border-box; margin-top: 0.25em;">El primero es el tipo de mensaje que puede ser IS_TIPO_ERROR o IS_TIPO_INFORMATION. También pueden pasarle un tipo personalizado.</li><li style="box-sizing: border-box; margin-top: 0.25em;">El segundo es la descripción o mensaje a escribir en el log.</li></ul></li><li style="box-sizing: border-box; margin-top: 0.25em;">of_log(string runtimeerror)</li><ul style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Recibe como parametro un string y un objeto runtimeerror.El primero es el tipo de mensaje y el segundo el objeto error para escribir el detalle del error.</li></ul></ul><div><p style="background-color: white; border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted)); box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-weight: var(--base-text-weight-semibold, 600); line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: left;">Instancia</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">Se puede crear la instancia en el evento open de la aplicación y declarar el objeto como una variable global.<br style="box-sizing: border-box;" />gc_log=create cc_lexblas_log Se indica el directorio base.<br style="box-sizing: border-box;" />gc_log.is_directory_base="C:/" Se indica el en donde estaran los archivos log. Si no existe el directorio será creado.<br style="box-sizing: border-box;" />gc_log.is_log_directory="logger"</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;"><span style="font-weight: var(--base-text-weight-semibold, 600);">Destruyendo la instancia</span></p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">En el evento close de la aplicación destruimos la instancia del objeto. destroy gc_log</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;"><span style="font-weight: var(--base-text-weight-semibold, 600);">Archivo cc_lexblas_log.sru</span></p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 0px !important; margin-top: 0px;">Si trabaja con una versión distinta a 11.5 puede importar el objeto usando el archivo cc_lexblas_log.sru</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 0px !important; margin-top: 0px;"><br /></p></div><div>Repositorio: <a href="https://github.com/LEXBLAS/log_powerbuilder" rel="nofollow" target="_blank">https://github.com/LEXBLAS/log_powerbuilder</a><p></p></div></div></div>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-88113067399393873652022-09-06T12:07:00.001-05:002022-09-06T12:08:20.028-05:00BARCODE 128 PowerBuilder<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEih4EgWHvMb7CTdVrK_C-0Qp4aeFVF142J4yeCPilktFq0qHTqjYQpuUSizxOIhelru4DuQ-S2ltK7UWbsFcFGbjlOPU-0pv9jSdsjadFTfuy3X285z0BBUQdv6ZvoQsoHfBoF4raYdXUu-SYyb39QVfeoMVDQ_MvQYysYzHORN2i84xzvxSYAfZMmW" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="329" data-original-width="813" height="258" src="https://blogger.googleusercontent.com/img/a/AVvXsEih4EgWHvMb7CTdVrK_C-0Qp4aeFVF142J4yeCPilktFq0qHTqjYQpuUSizxOIhelru4DuQ-S2ltK7UWbsFcFGbjlOPU-0pv9jSdsjadFTfuy3X285z0BBUQdv6ZvoQsoHfBoF4raYdXUu-SYyb39QVfeoMVDQ_MvQYysYzHORN2i84xzvxSYAfZMmW=w640-h258" width="640" /></a></div><br /><p></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"><span style="font-size: 14px;">Code 128 es un código de barras de alta densidad, usado ampliamente para la logística y paquetería. Puede codificar caracteres alfanuméricos o solo numéricos. Con este código es posible representar todos los caracteres de la tabla ASCII, incluyendo los caracteres de control.</span></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"><span style="font-size: 14px;"><br /></span></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"><span style="font-size: 14px;">Para comprender cómo se codifica este código, debemos tener en cuenta que cada ASCII se codifica mediante 11 barras.</span></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"><span style="font-size: 14px;"><a href="https://es.wikipedia.org/wiki/Code_128">https://es.wikipedia.org/wiki/Code_128</a><br /></span></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"><br /></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;">El código fue adaptado desde vbs <a href="http://www.myonlinetraininghub.com/create-barcodes-with-excel-vba">http://www.myonlinetraininghub.com/create-barcodes-with-excel-vba</a></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"><br /></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"></span></p><div class="separator" style="clear: both; text-align: center;"><span face="sans-serif" style="color: #202122;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjP4x1zEaUXGfsO_2L1FAX7C7pigYFaTzvUm0fV646_X_-bv3aXkwGugou8o-6-sIpDdBenYAJBp21-ZG_PWWR_qaW2KXwlWpZ4V515l4Og6b9gtTw0OIkkJfw7NvsQIJO-Q8DgKdOGmCnONLkYlCDgAdf3Yzm2RdhIn6VGLHAxEPK_slzuJRxHz0m_" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="636" data-original-width="1272" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEjP4x1zEaUXGfsO_2L1FAX7C7pigYFaTzvUm0fV646_X_-bv3aXkwGugou8o-6-sIpDdBenYAJBp21-ZG_PWWR_qaW2KXwlWpZ4V515l4Og6b9gtTw0OIkkJfw7NvsQIJO-Q8DgKdOGmCnONLkYlCDgAdf3Yzm2RdhIn6VGLHAxEPK_slzuJRxHz0m_=w640-h320" width="640" /></a></span></div><div class="separator" style="clear: both; text-align: center;"><span face="sans-serif" style="color: #202122;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><span face="sans-serif" style="color: #202122;">Se de instalar la fuente code128.ttf</span></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><span face="sans-serif" style="color: #202122;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhnhwx9AjsT2gI6GhGLRq6CgNPX1gMX6mS3XsQf2GGN7DC38eFjdBR3YYC8K-dC52tFxQ25m69MuGGxtCHsTEiPU1SyvIly9nF-ltcLgkdT63qUfOrGhTuT7xmCycPW3od9HT8R4pP4REZ_VGP1RV4wGnoeJ3IyngmTPdsmgDug4mKwAVHULZWuiDm7" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="288" data-original-width="770" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhnhwx9AjsT2gI6GhGLRq6CgNPX1gMX6mS3XsQf2GGN7DC38eFjdBR3YYC8K-dC52tFxQ25m69MuGGxtCHsTEiPU1SyvIly9nF-ltcLgkdT63qUfOrGhTuT7xmCycPW3od9HT8R4pP4REZ_VGP1RV4wGnoeJ3IyngmTPdsmgDug4mKwAVHULZWuiDm7=w640-h240" width="640" /></a></span></div><span face="sans-serif" style="color: #202122;"><br /><br /></span></div><p style="background-color: white; margin: 0.5em 0px; text-align: center;"><span face="sans-serif" style="color: #202122;"><span face="sans-serif" style="color: #202122;"><a href="https://github.com/LEXBLAS/barcode128pb.git" rel="nofollow" target="_blank">https://github.com/LEXBLAS/barcode128pb.git</a><br /></span></span></p><p style="background-color: white; margin: 0.5em 0px;"><span face="sans-serif" style="color: #202122;"><span face="sans-serif" style="color: #202122;"><br /></span></span></p><span face="sans-serif" style="color: #202122;"><br /><br /></span><p></p>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-41545404097115040972022-03-16T23:32:00.005-05:002022-03-16T23:32:46.381-05:00Error: /etc/apache2/modules/mod_mpm_worker.so: undefined symbol: ap_thread_current_after_fork<p>El día de hoy apareció un error en un VPS, el cual no permitía levantar el servidor apache.</p><p>El error</p><p><b><i>httpd: Syntax error on line 28 of /etc/apache2/conf/httpd.conf: Syntax error on line 2 of /etc/apache2/conf.modules.d/000_mod_mpm_worker.conf: Cannot load modules/mod_mpm_worker.so into server: /etc/apache2/modules/mod_mpm_worker.so: undefined symbol: ap_thread_current_after_fork</i></b></p><p><b><i><br /></i></b></p><p>Buscando la solucion en internet ingrese en la terminal las siguientes intrucciones.</p><p><br /></p><p>yum shell</p><p>remove ea-apache24-mod_mpm_worker</p><p>install ea-apache24-mod_mpm_event</p><p>run</p><p>Después de terminar la ejecución del comando ingresamos exit.</p><p><br /></p><p>Ahora levantamos el servicio.</p><p><b><i>sudo systemctl start httpd</i></b></p><p><b><i><br /></i></b></p><p>Con esto ya debería funcionar.</p><p>Referencia: <a href="https://docs.cpanel.net/ea4/apache/multi-processing-modules-mpm/" target="_blank">https://docs.cpanel.net/ea4/apache/multi-processing-modules-mpm/</a></p>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-25371730073554470782021-04-20T13:45:00.003-05:002021-04-20T15:24:57.396-05:00Obtener el indice seleccionado en Dropdownlistbox | Powerbuilder<p> Para obtener el indice seleccionado en un Dropdownlistbox vamos a crear un objeto Standar Visual que herede de este objeto.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-xr8PY4LhqYY/YH8fDwYYpBI/AAAAAAAAiX0/1iuvV0x5vUM0x8m8lXD-Esa0sLgWz4wSACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="326" data-original-width="539" height="194" src="https://lh3.googleusercontent.com/-xr8PY4LhqYY/YH8fDwYYpBI/AAAAAAAAiX0/1iuvV0x5vUM0x8m8lXD-Esa0sLgWz4wSACLcBGAsYHQ/image.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-bJM-jgPRocs/YH8fLJMYNwI/AAAAAAAAiX4/JAxfAVXHmPE8JaZZKptEGcXUUnMv5A5rwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="292" data-original-width="322" height="240" src="https://lh3.googleusercontent.com/-bJM-jgPRocs/YH8fLJMYNwI/AAAAAAAAiX4/JAxfAVXHmPE8JaZZKptEGcXUUnMv5A5rwCLcBGAsYHQ/image.png" width="265" /></a></div><p><br /></p>Una vez creado el objeto nos posicionamos en la pestaña instance variables<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-GWXp1fsy6yg/YH8fcqN0N-I/AAAAAAAAiYE/BkB3aNtMM3wpvwcxCvUTic9NBy5JkjtYQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="818" data-original-width="702" height="470" src="https://lh3.googleusercontent.com/-GWXp1fsy6yg/YH8fcqN0N-I/AAAAAAAAiYE/BkB3aNtMM3wpvwcxCvUTic9NBy5JkjtYQCLcBGAsYHQ/w403-h470/image.png" width="403" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Agregamos una variable que almacenara el índice seleccionado, en este caso le pondré de nombre índice.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-OemvKP7GJPo/YH8ftXinScI/AAAAAAAAiYM/4BPKRDsMhjUlBHSdG_CMnBOUJsVGc4p_wCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="292" data-original-width="486" height="232" src="https://lh3.googleusercontent.com/-OemvKP7GJPo/YH8ftXinScI/AAAAAAAAiYM/4BPKRDsMhjUlBHSdG_CMnBOUJsVGc4p_wCLcBGAsYHQ/w387-h232/image.png" width="387" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>En el evento selectionchange coloco lo siguiente:<div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-fi9SFnyD3J4/YH8f2yhIMaI/AAAAAAAAiYQ/nloHBzt87b0c9SwJ_noYRDPSLzEcYDggACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="289" data-original-width="830" height="151" src="https://lh3.googleusercontent.com/-fi9SFnyD3J4/YH8f2yhIMaI/AAAAAAAAiYQ/nloHBzt87b0c9SwJ_noYRDPSLzEcYDggACLcBGAsYHQ/w435-h151/image.png" width="435" /></a></div><div class="separator" style="clear: both; text-align: center;">Con esto ya tengo almacenado el índice seleccionado y puedo acceder a el externamente.</div><div><br /></div>Guardo los cambios y le coloco un nombre, en mi caso le coloque <b>cuvo_ddlb</b>.<br /><br />Para probarlo lo agregamos una ventana, para esto simplemente arrastramos el objeto a la ventana y soltamos. Además agregamos un botón a la ventana.</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-BI95--ANhfM/YH8gX8KBz7I/AAAAAAAAiYY/CfJpRrAqyCwgx8uhbQKm2jg4on_NAPdbQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="261" data-original-width="682" height="185" src="https://lh3.googleusercontent.com/-BI95--ANhfM/YH8gX8KBz7I/AAAAAAAAiYY/CfJpRrAqyCwgx8uhbQKm2jg4on_NAPdbQCLcBGAsYHQ/w485-h185/image.png" width="485" /></a></div><br /><br /></div><div><br />En el ddlb agregamos elementos desde las propiedades(también podríamos hacerlo mediante código)</div><div>Después de esto dentro del botón en el evento clic agregamos lo siguiente:</div><div><br /></div><div><div><i><b>int i</b></i></div><div><i><b>i=ddlb_1.indice</b></i></div><div><i><b>messagebox("",string(i))</b></i></div><div><i><b>ddlb_1.deleteitem( i)</b></i></div><br /><p></p></div><div>Donde índice es el nro de elemento seleccionado y ddlb_1 es el nombre del ddlb.</div><div><br /></div><div>Con este código muestro en un mensaje el índice del elemento seleccionado y además elimino el ítem.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-GLRpazwE_GY/YH8hJUF7WdI/AAAAAAAAiYg/bqMhT823yCIsC3ToMhJzPMjjAJIL1lzLgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="251" data-original-width="682" height="118" src="https://lh3.googleusercontent.com/-GLRpazwE_GY/YH8hJUF7WdI/AAAAAAAAiYg/bqMhT823yCIsC3ToMhJzPMjjAJIL1lzLgCLcBGAsYHQ/image.png" width="320" /></a></div><br /><br /></div>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-70261113094316487262020-11-08T19:35:00.006-05:002020-11-08T19:35:59.780-05:00Prestashop - mercadopago: Las credenciales no pueden estar vacías y deben ser válidas. Por favor, completa tus credenciales para activar el módulo. <p> Al intentar guardar la configuración del modulo de mercadopago en prestashop me mostraba el siguiente mensaje.</p><p style="text-align: center;"></p><blockquote style="font-weight: bold;"><blockquote>Las credenciales no pueden estar vacías y deben ser válidas. Por favor, completa tus credenciales para activar el módulo. </blockquote></blockquote><p style="font-weight: bold;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-SUsU6WRnAK4/X6iLIbZsHPI/AAAAAAAAhQw/NuLgs5Jjf4AjLYcGZLO_mzGkhNuPjxmNACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="654" data-original-width="1399" height="316" src="https://lh3.googleusercontent.com/-SUsU6WRnAK4/X6iLIbZsHPI/AAAAAAAAhQw/NuLgs5Jjf4AjLYcGZLO_mzGkhNuPjxmNACLcBGAsYHQ/w678-h316/image.png" width="678" /></a></div><br /> <p></p><p style="text-align: justify;">Para solucionar esto verifique las dependencias que que necesita el modulo.</p><p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-H1E69rrNhfY/X6iLbTJaoJI/AAAAAAAAhQ4/Q3FKsY2N924z1mPHxjLcdJh1dgQPAvdwwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="665" data-original-width="947" height="335" src="https://lh3.googleusercontent.com/-H1E69rrNhfY/X6iLbTJaoJI/AAAAAAAAhQ4/Q3FKsY2N924z1mPHxjLcdJh1dgQPAvdwwCLcBGAsYHQ/image.png" width="477" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">PDO_MYSQL, simplexml, mcrypt,hash,DG,DOM, iconv, curl y SOAP.</div><div class="separator" style="clear: both; text-align: justify;">De estas dependencias me faltaba el <span style="text-align: center;"><b>mcrypt</b>. Procedí a instalar la librería y volví a probar guardar la configuración, pero me arrojaba el mismo error. Así que desinstale el modulo y lo elimine por completo. Volví a instalar el modelo, procedí a ingresar los datos de configuración y finalmente todo se guardo correctamente. Fue una final feliz.</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Efv6L7CZ9N0/X6iO40NGOBI/AAAAAAAAhRE/4v1L61Ph8WcmybqHRJ6T_M_N4dXlNbF1wCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="603" data-original-width="1620" height="119" src="https://lh3.googleusercontent.com/-Efv6L7CZ9N0/X6iO40NGOBI/AAAAAAAAhRE/4v1L61Ph8WcmybqHRJ6T_M_N4dXlNbF1wCLcBGAsYHQ/image.png" width="320" /></a></div><br /><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><br /><br /><p></p><p></p>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-26473937578241996452020-10-25T19:19:00.000-05:002020-10-25T19:19:01.638-05:00Miniproyecto Powerbuilder Datawindows<p> </p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-GFqgVu6EE-Y/X5JXrdxZ5tI/AAAAAAAAg-w/PlPwh9PJRcoklqIMhOp_Kqd7_uAKgb9iQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="599" data-original-width="734" height="376" src="https://lh3.googleusercontent.com/-GFqgVu6EE-Y/X5JXrdxZ5tI/AAAAAAAAg-w/PlPwh9PJRcoklqIMhOp_Kqd7_uAKgb9iQCLcBGAsYHQ/w461-h376/image.png" width="461" /></a></div><br /><br /></div><div class="separator" style="clear: both; text-align: justify;">En esta ocasión vamos a crear un pequeño proyecto, en el cual solo vamos a implementar la parte principal,el <b><i>Core </i></b>del negocio . Este proceso debe permitir ingresar la fecha, el Po Number, seleccionar un supplier code e ingresar un receive number. Ademas de poder seleccionar varios productos para ser agregados a la lista que se encuentra ubicada en la parte inferior. Los datos que la lista debe contener es el producto, la cantidad y el texto ingresado en la caja de texto <i><b>info.</b></i></div><div class="separator" style="clear: both; text-align: justify;">Al presionar aceptar(guardar), debe insertar un registro en la tabla document y n registros en la tabla document detail, segun la cantidad de productos ingresados en la lista(detalle).</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-GbPCOAwEoYc/X5JJ7wtfpEI/AAAAAAAAg6M/MP2EQUXxqEcdsTs1lHDUN9DkKCDIQuLygCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="544" data-original-width="815" height="313" src="https://lh3.googleusercontent.com/-GbPCOAwEoYc/X5JJ7wtfpEI/AAAAAAAAg6M/MP2EQUXxqEcdsTs1lHDUN9DkKCDIQuLygCLcBGAsYHQ/w470-h313/image.png" width="470" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Nota: Los productos y supplier se agregaron manualmente para solo dedicarse a realizar el <b><i>core</i></b>.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Para avanzar con el tutorial, vamos a saltarnos los pasos de la creación del proyecto y la creación de la conexión a la base de datos.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div>Después de crear el proyecto y realizar la conexión, vamos a agregar dos ventanas.</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-kB6cb0MG0C8/X5JK_O04vmI/AAAAAAAAg6Y/x0bDt5BW6KgP2uaVNBkO8h6w3wbNVkKdQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="687" data-original-width="1316" height="280" src="https://lh3.googleusercontent.com/-kB6cb0MG0C8/X5JK_O04vmI/AAAAAAAAg6Y/x0bDt5BW6KgP2uaVNBkO8h6w3wbNVkKdQCLcBGAsYHQ/w415-h280/image.png" width="415" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Una se llamará w_lista y la otra w_registro.</div><div class="separator" style="clear: both; text-align: justify;">La ventana w_lista tengra un dw que mostrará los documents registrados. Agregamos tres botones, el nuevo, eliminar y salir. Solo programaremos el botón nuevo y eliminar (a estas alturas ya deberían saber como programar el botón salir).</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-RG_GWx5nnCQ/X5JME_WMDcI/AAAAAAAAg6k/IVGoHo_FMnYTbSPa2HfymAsLZ1ENZLxqgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="406" data-original-width="736" height="240" src="https://lh3.googleusercontent.com/-RG_GWx5nnCQ/X5JME_WMDcI/AAAAAAAAg6k/IVGoHo_FMnYTbSPa2HfymAsLZ1ENZLxqgCLcBGAsYHQ/w507-h240/image.png" width="507" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div>El siguiente paso es crear el objecto dw que contendrá la información de la tabla documents y su tabla relacionada (supplier).</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Seleccionamos New Datawindow del tipo grid.</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-b70jGcuvbHk/X5JMhiryzAI/AAAAAAAAg6s/DbQbFECWqVgLF4YRq7h6BfskphKPHzuAQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="334" data-original-width="549" height="275" src="https://lh3.googleusercontent.com/-b70jGcuvbHk/X5JMhiryzAI/AAAAAAAAg6s/DbQbFECWqVgLF4YRq7h6BfskphKPHzuAQCLcBGAsYHQ/w451-h275/image.png" width="451" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-QmQuhUAgcgY/X5JMqQwCCQI/AAAAAAAAg6w/7h5Rt6y8oa8-ROwPNXuHTx8HZw8KS9fiQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="359" data-original-width="514" height="295" src="https://lh3.googleusercontent.com/-QmQuhUAgcgY/X5JMqQwCCQI/AAAAAAAAg6w/7h5Rt6y8oa8-ROwPNXuHTx8HZw8KS9fiQCLcBGAsYHQ/w422-h295/image.png" width="422" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-_ZuttHQ5cwA/X5JMx4TyzgI/AAAAAAAAg60/WNkKQ_wqNOQLmg18T940b_FCXVmVaagrACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="330" data-original-width="671" height="232" src="https://lh3.googleusercontent.com/-_ZuttHQ5cwA/X5JMx4TyzgI/AAAAAAAAg60/WNkKQ_wqNOQLmg18T940b_FCXVmVaagrACLcBGAsYHQ/w473-h232/image.png" width="473" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div>Seleccionamos las tablas document y supplier, así como las columnas que deseamos mostrar.<br />Click en el boton return, luego siguiente y finalizar.</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Y1P6ePJS-dQ/X5JNCbYyqEI/AAAAAAAAg7A/yWIspQH3sgQelxh80ijsFnKTnjPAnsuTgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="393" data-original-width="792" height="259" src="https://lh3.googleusercontent.com/-Y1P6ePJS-dQ/X5JNCbYyqEI/AAAAAAAAg7A/yWIspQH3sgQelxh80ijsFnKTnjPAnsuTgCLcBGAsYHQ/w523-h259/image.png" width="523" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div>Con esto tendremos nuestro objeto dw creado, pero aun falta guardarlo. Le pondremos por nombre dwgr_lista.</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-eG0tYGDefJI/X5JNSuG8wbI/AAAAAAAAg7I/j6rVb3A5_rwEoBjovfnlXBGiAf686-5RQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="599" data-original-width="1116" height="274" src="https://lh3.googleusercontent.com/-eG0tYGDefJI/X5JNSuG8wbI/AAAAAAAAg7I/j6rVb3A5_rwEoBjovfnlXBGiAf686-5RQCLcBGAsYHQ/w510-h274/image.png" width="510" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div>Regresamos a la ventana w_lista y asignamos el dw control el objecto dw que hemos creado.</div><div class="separator" style="clear: both; text-align: justify;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-FIvqLRrpHIM/X5JN0V1pXoI/AAAAAAAAg7Q/BqeIuFoDraMLKwdzceE73JoQHjP3LNy7ACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="578" data-original-width="1286" height="228" src="https://lh3.googleusercontent.com/-FIvqLRrpHIM/X5JN0V1pXoI/AAAAAAAAg7Q/BqeIuFoDraMLKwdzceE73JoQHjP3LNy7ACLcBGAsYHQ/w507-h228/image.png" width="507" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-ES8oInIMioU/X5JN6lXSLII/AAAAAAAAg7U/hjuEPPwBAKsN-cykRXOSMw8AVP-HDAO2ACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="435" data-original-width="986" height="275" src="https://lh3.googleusercontent.com/-ES8oInIMioU/X5JN6lXSLII/AAAAAAAAg7U/hjuEPPwBAKsN-cykRXOSMw8AVP-HDAO2ACLcBGAsYHQ/w700-h275/image.png" width="700" /></a></div><br />Entramos al control dw y buscamos el evento constructor</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-_KPR8lkX3Lo/X5JOPXUH0gI/AAAAAAAAg7g/2wbgkvspsBwb3Uzawx2YTlQWqadyJPWZgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="489" data-original-width="817" height="250" src="https://lh3.googleusercontent.com/-_KPR8lkX3Lo/X5JOPXUH0gI/AAAAAAAAg7g/2wbgkvspsBwb3Uzawx2YTlQWqadyJPWZgCLcBGAsYHQ/w416-h250/image.png" width="416" /></a></div><div class="separator" style="clear: both; text-align: center;">Agregamos el siguiente código (para obtener los datos desde la base de datos, por ahora no mostrará nada porque esta vacío).</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-vk2CYBHlRtI/X5JOXcwlG6I/AAAAAAAAg7k/J7RDMSnRw9g5gkRKju-nbWfkURgftt3UQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="346" data-original-width="645" height="315" src="https://lh3.googleusercontent.com/-vk2CYBHlRtI/X5JOXcwlG6I/AAAAAAAAg7k/J7RDMSnRw9g5gkRKju-nbWfkURgftt3UQCLcBGAsYHQ/w584-h315/image.png" width="584" /></a></div><br /><br /></div>En la venta w_registro deben agregar los siguientes controles y asignarle los nombres que aparecen en la imagen.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-6YMwsZ4Abv4/X5JQt1r6i6I/AAAAAAAAg70/6ZjkdJgPisU-Vt2cgqu_z5tiCkIgZm0iACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="472" data-original-width="683" height="425" src="https://lh3.googleusercontent.com/-6YMwsZ4Abv4/X5JQt1r6i6I/AAAAAAAAg70/6ZjkdJgPisU-Vt2cgqu_z5tiCkIgZm0iACLcBGAsYHQ/w615-h425/image.png" width="615" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Ademas de asignarle a la venta en la propiedad windowType el tipo response.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-btEBtQ-2hhY/X5JQ-TEyifI/AAAAAAAAg78/uQwPpTeffRAwgOItrfweqpMgLD216TnZgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="544" data-original-width="1037" height="318" src="https://lh3.googleusercontent.com/-btEBtQ-2hhY/X5JQ-TEyifI/AAAAAAAAg78/uQwPpTeffRAwgOItrfweqpMgLD216TnZgCLcBGAsYHQ/w604-h318/image.png" width="604" /></a></div><br /><br />Para la cabecera crearemos un datawindow object(dw object o dwo) del tipo freeform.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-ylhYEUw9TWI/X5JRSWqolqI/AAAAAAAAg8E/ciqCe3IjTFAFNFfF6Ww75OndiFZUYZWbQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="326" data-original-width="539" height="313" src="https://lh3.googleusercontent.com/-ylhYEUw9TWI/X5JRSWqolqI/AAAAAAAAg8E/ciqCe3IjTFAFNFfF6Ww75OndiFZUYZWbQCLcBGAsYHQ/w517-h313/image.png" width="517" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Seleccionamos la tabla document y seleccionamos todas las columnas.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-_r3NeHNiOUo/X5JR2VxFI-I/AAAAAAAAg8M/Ge69s-v247sTlaH9xHza2G7HFOrcfj_mACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="550" data-original-width="950" height="320" src="https://lh3.googleusercontent.com/-_r3NeHNiOUo/X5JR2VxFI-I/AAAAAAAAg8M/Ge69s-v247sTlaH9xHza2G7HFOrcfj_mACLcBGAsYHQ/w553-h320/image.png" width="553" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Luego nos vamos al menu Design y seleccionamos Retrieval Arguments.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Wy9LpKogmME/X5JSFbhEoFI/AAAAAAAAg8Q/gVlH_iOPV1MfxTaPWPoLzh326UGovb_KgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="324" data-original-width="243" height="371" src="https://lh3.googleusercontent.com/-Wy9LpKogmME/X5JSFbhEoFI/AAAAAAAAg8Q/gVlH_iOPV1MfxTaPWPoLzh326UGovb_KgCLcBGAsYHQ/w278-h371/image.png" width="278" /></a></div><br /><br /><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-i9ZEniig2bg/X5JSL0GG3PI/AAAAAAAAg8Y/JA0c8A9NYE0gl60PAF35xrnmBAb9sDOkACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="249" data-original-width="412" height="193" src="https://lh3.googleusercontent.com/-i9ZEniig2bg/X5JSL0GG3PI/AAAAAAAAg8Y/JA0c8A9NYE0gl60PAF35xrnmBAb9sDOkACLcBGAsYHQ/image.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-ykNxVJW8qUU/X5JSXDv3JYI/AAAAAAAAg8g/DuEeG7mzSZcRZEynrD6IaZGCheYi-rDBwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="500" data-original-width="874" height="314" src="https://lh3.googleusercontent.com/-ykNxVJW8qUU/X5JSXDv3JYI/AAAAAAAAg8g/DuEeG7mzSZcRZEynrD6IaZGCheYi-rDBwCLcBGAsYHQ/w549-h314/image.png" width="549" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Le asignamos el argumento creado a la columna document number.<br /><br /><div style="text-align: justify;">Una vez hecho esto guardamos el dw con el nombre de dwff_document. Debe verse similar a la imagen.</div><div style="text-align: justify;">Recuerden que apara el supplier se debe seleccionar de una lista. Estos datos ya deben estar ingresados en la tabla supplier para que aparescan. Para esto debemos crear otro dw y enlazar la columna supplier code del dwff_documento con el nuevo dw que vamos a crear. </div></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-PJAeTXXZhMU/X5JS1RBJFFI/AAAAAAAAg8w/sT4YapNc3Xc1UVCwxcTelMNvTxkY_j79wCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="482" data-original-width="838" height="319" src="https://lh3.googleusercontent.com/-PJAeTXXZhMU/X5JS1RBJFFI/AAAAAAAAg8w/sT4YapNc3Xc1UVCwxcTelMNvTxkY_j79wCLcBGAsYHQ/w556-h319/image.png" width="556" /></a></div><br /><br /><br /><br /></div></div><div class="separator" style="clear: both; text-align: justify;">El nuevo dw que contendrá la lista de supplier sera del tipo tabular(también podría haber sido del tipo grid). <div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-DgaWXWqPAd4/X5JTWOGkd4I/AAAAAAAAg84/5mvmSZzpcfEy11OD5rlbrpq0fg0dhhWoQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="327" data-original-width="553" height="293" src="https://lh3.googleusercontent.com/-DgaWXWqPAd4/X5JTWOGkd4I/AAAAAAAAg84/5mvmSZzpcfEy11OD5rlbrpq0fg0dhhWoQCLcBGAsYHQ/w495-h293/image.png" width="495" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-qFVba7J32kc/X5JTcoIJhtI/AAAAAAAAg88/9wgHUvKp46kFg2lAhAf2DMNc1JrqoJ2CQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="327" data-original-width="553" height="345" src="https://lh3.googleusercontent.com/-qFVba7J32kc/X5JTcoIJhtI/AAAAAAAAg88/9wgHUvKp46kFg2lAhAf2DMNc1JrqoJ2CQCLcBGAsYHQ/w584-h345/image.png" width="584" /></a></div><div class="separator" style="clear: both; text-align: center;">Ocultamos el header y debería verse así.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-VvqoPGSSDE4/X5JTjz40qoI/AAAAAAAAg9A/dChEdibjISYzJa5laHxC74GKxJt0wQRCQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="298" data-original-width="771" height="278" src="https://lh3.googleusercontent.com/-VvqoPGSSDE4/X5JTjz40qoI/AAAAAAAAg9A/dChEdibjISYzJa5laHxC74GKxJt0wQRCQCLcBGAsYHQ/w716-h278/image.png" width="716" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;">Este dw lo guardamos con el nombre dwtb_supplier.</div><div class="separator" style="clear: both; text-align: justify;">Regresamos al dwff_document y seleccionamos la columna supplier code. Luegos nos dirigimos a la pestaña Edit y en la propiedad Style type seleccionas dropdowndw</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-13A6t6jCbwc/X5JT6z3XTbI/AAAAAAAAg9M/Waa3JJ71FhAHKtJuLDEXZ04Dcfmiksz3gCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="512" data-original-width="1029" height="311" src="https://lh3.googleusercontent.com/-13A6t6jCbwc/X5JT6z3XTbI/AAAAAAAAg9M/Waa3JJ71FhAHKtJuLDEXZ04Dcfmiksz3gCLcBGAsYHQ/w626-h311/image.png" width="626" /></a></div><br /><br /></div>En la parte inferior seleccionamos el dw tabular, la columna que se mostrara y la que se va a guardar.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-kYB4TvtKcQc/X5JUYpS6YwI/AAAAAAAAg9c/PXusrniBk0APaU-AiwujcKB6VvlPliYFgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="568" data-original-width="476" height="573" src="https://lh3.googleusercontent.com/-kYB4TvtKcQc/X5JUYpS6YwI/AAAAAAAAg9c/PXusrniBk0APaU-AiwujcKB6VvlPliYFgCLcBGAsYHQ/w480-h573/image.png" width="480" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-F5Uu5ohOukk/X5JUlCA3orI/AAAAAAAAg9k/4GPzn5_bxeEEA_DMpzko5xABWJT-FgwvACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="542" data-original-width="878" height="309" src="https://lh3.googleusercontent.com/-F5Uu5ohOukk/X5JUlCA3orI/AAAAAAAAg9k/4GPzn5_bxeEEA_DMpzko5xABWJT-FgwvACLcBGAsYHQ/w499-h309/image.png" width="499" /></a></div><div class="separator" style="clear: both; text-align: center;">En la columna date editamos la propiedad mask y le asignamos el formato dd/mm/yyyy</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-hbSIb3mQZfw/X5YUlwwkC9I/AAAAAAAAhGM/FG3bcDw8v14-ftBtpqq5igjfxMFvD9Z7wCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="510" data-original-width="1086" height="246" src="https://lh3.googleusercontent.com/-hbSIb3mQZfw/X5YUlwwkC9I/AAAAAAAAhGM/FG3bcDw8v14-ftBtpqq5igjfxMFvD9Z7wCLcBGAsYHQ/w487-h246/image.png" width="487" /></a></div><br /><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;">Guardamos los cambios y asignamos en el dw_cabecera el dwo dwff_documento.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-nAe0BHT2dCk/X5JU1jgmEvI/AAAAAAAAg9s/xN-Wcr7Zj2olAX6nHJDQN3PxxLpHG7nFgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="481" data-original-width="706" height="316" src="https://lh3.googleusercontent.com/-nAe0BHT2dCk/X5JU1jgmEvI/AAAAAAAAg9s/xN-Wcr7Zj2olAX6nHJDQN3PxxLpHG7nFgCLcBGAsYHQ/w463-h316/image.png" width="463" /></a></div><br /><br /></div><br /><br /></div>Vamos a crear otro dw para el detalle.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-95dQ4ji_jnU/X5JVS_hotfI/AAAAAAAAg94/oJ4QzWv0wCA2pjAGPRFnPsxhC39fde45wCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="388" data-original-width="912" height="269" src="https://lh3.googleusercontent.com/-95dQ4ji_jnU/X5JVS_hotfI/AAAAAAAAg94/oJ4QzWv0wCA2pjAGPRFnPsxhC39fde45wCLcBGAsYHQ/w631-h269/image.png" width="631" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Retornamos y en la parte del diseño ocultamos las dos primeras columnas.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-R6-1QxecU5Q/X5JVlnCmIQI/AAAAAAAAg-A/ZxebQ2MSxXM_NyQIZB5QlmQJHfetSzl1wCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="238" data-original-width="1057" height="251" src="https://lh3.googleusercontent.com/-R6-1QxecU5Q/X5JVlnCmIQI/AAAAAAAAg-A/ZxebQ2MSxXM_NyQIZB5QlmQJHfetSzl1wCLcBGAsYHQ/w1117-h251/image.png" width="1117" /></a></div><br /><br /><br /><br /><br /></div>Guardamos el dw con el nombre de dwgr_detalle y asignamos este dwo al dw control llamado dw_detalle.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-7N7NsN4tY9g/X5JV7ww4txI/AAAAAAAAg-M/GqrOwrhPpQocDbcVkRMmwVTcf_vgXVmVgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="473" data-original-width="1000" height="335" src="https://lh3.googleusercontent.com/-7N7NsN4tY9g/X5JV7ww4txI/AAAAAAAAg-M/GqrOwrhPpQocDbcVkRMmwVTcf_vgXVmVgCLcBGAsYHQ/w710-h335/image.png" width="710" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>En el evento open de la ventana agregamos el siguiente código.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-ny4TUp4djko/X5JWdqAtBRI/AAAAAAAAg-Y/LAZkCM5nH-U5NJe72FItWnVtuayw5MMKQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="511" data-original-width="644" height="339" src="https://lh3.googleusercontent.com/-ny4TUp4djko/X5JWdqAtBRI/AAAAAAAAg-Y/LAZkCM5nH-U5NJe72FItWnVtuayw5MMKQCLcBGAsYHQ/w427-h339/image.png" width="427" /></a></div><br /><br /><div class="separator" style="clear: both; text-align: justify;"><span style="background-color: #999999;">if message.doubleparm>0 then</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>dw_cabecera.retrieve(message.doubleparm)</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>dw_detalle.retrieve(message.doubleparm)</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="background-color: #999999;">else</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>dw_cabecera.insertrow(1)</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="background-color: #999999;">end if</span></div></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Explicacion:</div><div style="text-align: justify;"><span style="background-color: #999999;">if message.doubleparm>0 then //preguntamos si recibe un message del tipo double, </span><span style="background-color: #999999;">de ser así </span></div><div style="text-align: justify;"><span style="background-color: #999999;">recuperamos los datos según el parámetro pasado. Recuerden que asignamos un argumento en los objetos datawindows que habíamos creado. De caso contrario, inserta un registro en blanco en la cabecera.</span></div><div style="text-align: justify;"><span style="background-color: white;"><br /></span></div><div style="text-align: justify;"><span style="background-color: white;">Para ir viendo como va quedando agregaremos el siguiente script en el evento open de la aplicación.</span></div><div style="text-align: justify;"><span style="background-color: white;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-rpiXFsYFPWU/X5Rt9VF89fI/AAAAAAAAhB0/KVUEBgHD0_UnaaZ0Eu664YAdQNQMFmWBgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="444" data-original-width="794" height="330" src="https://lh3.googleusercontent.com/-rpiXFsYFPWU/X5Rt9VF89fI/AAAAAAAAhB0/KVUEBgHD0_UnaaZ0Eu664YAdQNQMFmWBgCLcBGAsYHQ/w590-h330/image.png" width="590" /></a></div><br /><br /></div><br /><br /></span></div><div class="separator" style="clear: both; text-align: center;"><br /></div>En el botón nuevo de la ventana w_lista agregamos lo siguiente.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-x-e7FN75v4c/X5R99QCzJmI/AAAAAAAAhCo/f-uKRxmrdoIhbMcS78lJ_4A7kJWQ0uUBwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="374" data-original-width="644" height="341" src="https://lh3.googleusercontent.com/-x-e7FN75v4c/X5R99QCzJmI/AAAAAAAAhCo/f-uKRxmrdoIhbMcS78lJ_4A7kJWQ0uUBwCLcBGAsYHQ/w588-h341/image.png" width="588" /></a></div><div class="separator" style="clear: both; text-align: justify;">Explicación: </div><div class="separator" style="clear: both; text-align: justify;">Abrimos la ventana pasando como parámetro el valor cero, de esta manera indicamos que vamos a registrar un nuevo registro. Si la ventana w_registro devuelve un mensaje del tipo double mayor a cero, entonces actualizamos el dw.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><br /><br /></div>Ejecutamos la aplicación y debe verse de esta manera. </div><div class="separator" style="clear: both; text-align: justify;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-_wQgBvudigI/X5JXvvChyJI/AAAAAAAAg-0/WtJlCBZEVfgt37vKpAvXXNH8ZfdgbDyegCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="599" data-original-width="734" height="385" src="https://lh3.googleusercontent.com/-_wQgBvudigI/X5JXvvChyJI/AAAAAAAAg-0/WtJlCBZEVfgt37vKpAvXXNH8ZfdgbDyegCLcBGAsYHQ/w697-h385/image.png" width="697" /></a></div><br /></div><div class="separator" style="clear: both; text-align: center;">Poco a poco va tomando forma.</div><br /><br /> Regresamos a la ventana w_registro y vamos a crear tres funciones.</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-lPGFhy8jwzg/X5JYGzSGbYI/AAAAAAAAg_E/O1FPf-ffnk4D5Ax12TT3FtgasfRYhaPHACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="512" data-original-width="640" height="395" src="https://lh3.googleusercontent.com/-lPGFhy8jwzg/X5JYGzSGbYI/AAAAAAAAg_E/O1FPf-ffnk4D5Ax12TT3FtgasfRYhaPHACLcBGAsYHQ/w493-h395/image.png" width="493" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div>La primera se llamará <b><span style="font-size: medium;">uf_buscar</span></b>, para lo cual primero vamos a tener que crear otra ventana del tipo response para poder buscar el producto a seleccionar. La ventana se llamará w_buscar y el dwo dwgr_product. No olviden colocar el WindowType que sea del tipo response.</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-jQWtZ6wBdbU/X5JY4R6bLPI/AAAAAAAAg_M/yAIGQGWMB1Q6zGhz9ReBrYAbiv8xwMaIACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="379" data-original-width="1136" height="344" src="https://lh3.googleusercontent.com/-jQWtZ6wBdbU/X5JY4R6bLPI/AAAAAAAAg_M/yAIGQGWMB1Q6zGhz9ReBrYAbiv8xwMaIACLcBGAsYHQ/w1029-h344/image.png" width="1029" /></a></div><br /><br /></div><div class="separator" style="clear: both; text-align: justify;"><br />Aquí creamos una función llamada<b><span style="font-size: medium;"> uf_seleccionar()</span></b></div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-jMPZ2L64OKo/X5JZO5Sp2LI/AAAAAAAAg_U/i5AtnNPN9_wfmJFrZimDJLg5z-fMBKpgwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="416" data-original-width="540" height="410" src="https://lh3.googleusercontent.com/-jMPZ2L64OKo/X5JZO5Sp2LI/AAAAAAAAg_U/i5AtnNPN9_wfmJFrZimDJLg5z-fMBKpgwCLcBGAsYHQ/w533-h410/image.png" width="533" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">int fila</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">string id_product</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">fila=dw_1.getrow()</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">if fila=0 then</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>return</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">end if</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">id_product=dw_1.getitemstring( fila,"product_code")</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">closewithreturn(this,id_product)</span></div></div><br />Esta función la llamaremos desde el evento doubleclic del dw control y desde el evento clic del cb_seleccionar.</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-2qyxm7V_hE0/X5JZc0aI0hI/AAAAAAAAg_Y/1d1dBcXr1J0nxfVDgEpS4yb7v1F3_PvDQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="326" data-original-width="572" height="299" src="https://lh3.googleusercontent.com/-2qyxm7V_hE0/X5JZc0aI0hI/AAAAAAAAg_Y/1d1dBcXr1J0nxfVDgEpS4yb7v1F3_PvDQCLcBGAsYHQ/w590-h299/image.png" width="590" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;">Agregar además en el evento construct del dw control</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-cISC9IhE5L4/X5JZ4u-RRPI/AAAAAAAAg_k/LWrV_o4Z4Ic1vsl9nr3zbp0JwMMzne3OgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="371" data-original-width="700" height="411" src="https://lh3.googleusercontent.com/-cISC9IhE5L4/X5JZ4u-RRPI/AAAAAAAAg_k/LWrV_o4Z4Ic1vsl9nr3zbp0JwMMzne3OgCLcBGAsYHQ/w774-h411/image.png" width="774" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Regresamos a la ventana w_registro y en la función <b><span style="font-size: medium;">uf_buscar </span></b>agregamos el siguiente código.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-LRXOvZ5zzPc/X5JaRpNa7UI/AAAAAAAAg_w/RF6854x0QOwpP2FilTsNzjIC-RW1t6PkACLcBGAsYHQ/image.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img alt="" data-original-height="480" data-original-width="715" height="469" src="https://lh3.googleusercontent.com/-LRXOvZ5zzPc/X5JaRpNa7UI/AAAAAAAAg_w/RF6854x0QOwpP2FilTsNzjIC-RW1t6PkACLcBGAsYHQ/w697-h469/image.png" width="697" /></a></div><div class="separator" style="clear: both; text-align: justify;">Abrimos la ventana w_buscar, si el parámetro es correcto hacemos un select para obtener los datos del producto seleccionado (Esto también se podría haber hecho usando struct, el cual seria el valor devuelto por la ventana w_buscar).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Agregamos otra función llamada <b><span style="font-size: medium;">uf_agregar().</span></b></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-4MKEUa8i3kQ/X5Ja-CRmauI/AAAAAAAAg_8/tEBkZWHlgbYRPoVM7L7tAjUMvwMcNif5QCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="373" data-original-width="785" height="356" src="https://lh3.googleusercontent.com/-4MKEUa8i3kQ/X5Ja-CRmauI/AAAAAAAAg_8/tEBkZWHlgbYRPoVM7L7tAjUMvwMcNif5QCLcBGAsYHQ/w749-h356/image.png" width="749" /></a></div><br /><div style="text-align: left;">Agregamos otra función llamada <b><span style="font-size: medium;">uf_guardar</span></b></div></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-IBPzKhmqab4/X5JbMHxsqZI/AAAAAAAAhAE/6P5IZGrZWnoIqUBRnoLv1K7nxDCiaOcLwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="534" data-original-width="798" height="430" src="https://lh3.googleusercontent.com/-IBPzKhmqab4/X5JbMHxsqZI/AAAAAAAAhAE/6P5IZGrZWnoIqUBRnoLv1K7nxDCiaOcLwCLcBGAsYHQ/w641-h430/image.png" width="641" /></a></div><br /><br /></div><br /><br /></div><br /><div class="separator" style="clear: both; text-align: left;">int id,i</div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">dw_cabecera.accepttext( )</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">dw_detalle.accepttext( )</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">if dw_cabecera.update( )= 1 then</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>id=dw_cabecera.getitemnumber(1,1)</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>for i=1 to dw_detalle.rowcount( )</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>dw_detalle.setitem( i, "document_number", id)</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>next</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999; white-space: pre;"> </span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>if dw_detalle.update( )=1 then</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>commit using sqlca;</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>closewithreturn(this,1)</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>else</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>rollback using sqlca;</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>messagebox("Error",sqlca.sqlerrtext)</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>end if</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">else</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>rollback using sqlca;</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><span style="white-space: pre;"> </span>messagebox("Error",sqlca.sqlerrtext)</span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: #999999;">end if</span></div><div style="text-align: left;"><span style="background-color: #999999;"><br /></span></div><div style="text-align: left;"><br /></div></div><div style="text-align: left;"><span style="background-color: #999999;"><br /></span></div></div><div style="text-align: left;">Ademas en el evento construct del dw_cabecera agregar el objeto de transacción.</div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-t54P5rYH3H8/X5RsPJV0ZCI/AAAAAAAAhBg/erxV9oSVREQfc6u1utW-KvlHbp3h8qNxQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="358" data-original-width="703" height="338" src="https://lh3.googleusercontent.com/-t54P5rYH3H8/X5RsPJV0ZCI/AAAAAAAAhBg/erxV9oSVREQfc6u1utW-KvlHbp3h8qNxQCLcBGAsYHQ/w665-h338/image.png" width="665" /></a></div><div class="separator" style="clear: both; text-align: center;">y en el dw_detalle</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-qx1m7twp-js/X5YU7NrJ11I/AAAAAAAAhGU/hPcsafgYW58y7zXwaPFnqeAzCrZEYPNUACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="492" data-original-width="918" height="283" src="https://lh3.googleusercontent.com/-qx1m7twp-js/X5YU7NrJ11I/AAAAAAAAhGU/hPcsafgYW58y7zXwaPFnqeAzCrZEYPNUACLcBGAsYHQ/image.png" width="528" /></a></div><br /><br /></div><br /><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Ejecutamos la aplicación para ir viendo como esta quedando. Le damos clic en nuevo y se abrirá la ventana de registro. Si desplegamos el campo supplier podemos observar que se muestra la lista de supplier que están registradas en la base de datos(ingresadas manualmente).</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Qt-mCGID3vs/X5RuIr3wXrI/AAAAAAAAhB4/PGmARcGV1zcQtTxd8LGiG-IpgQb4c566wCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="479" data-original-width="685" height="364" src="https://lh3.googleusercontent.com/-Qt-mCGID3vs/X5RuIr3wXrI/AAAAAAAAhB4/PGmARcGV1zcQtTxd8LGiG-IpgQb4c566wCLcBGAsYHQ/w521-h364/image.png" width="521" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Agregamos el llamado de las funciones uf_agregar y uf_buscar en los botones cb_agregar y cb_buscar</div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Pko4kQKEAeY/X5R8dxBvJAI/AAAAAAAAhCI/A4wwEHwUf5QKA1W-XgOA3__gY_b-AQGzwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="295" data-original-width="684" height="296" src="https://lh3.googleusercontent.com/-Pko4kQKEAeY/X5R8dxBvJAI/AAAAAAAAhCI/A4wwEHwUf5QKA1W-XgOA3__gY_b-AQGzwCLcBGAsYHQ/w686-h296/image.png" width="686" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-YDLs2X3EKIE/X5R8fUxJhBI/AAAAAAAAhCM/cbCyAxcq5yUjmgWRI0MiwoYKmDHdwkPMQCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="467" data-original-width="669" height="406" src="https://lh3.googleusercontent.com/-YDLs2X3EKIE/X5R8fUxJhBI/AAAAAAAAhCM/cbCyAxcq5yUjmgWRI0MiwoYKmDHdwkPMQCLcBGAsYHQ/w582-h406/image.png" width="582" /></a></div><div class="separator" style="clear: both; text-align: center;">No nos olvidemos del botón aceptar</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-36DbeounzIY/X5R-7IBoniI/AAAAAAAAhC0/JG4ykgEv4TEDeVrSyMWexH-NbP5lH9FkgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="408" data-original-width="566" height="409" src="https://lh3.googleusercontent.com/-36DbeounzIY/X5R-7IBoniI/AAAAAAAAhC0/JG4ykgEv4TEDeVrSyMWexH-NbP5lH9FkgCLcBGAsYHQ/w567-h409/image.png" width="567" /></a></div><br /><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: left;">Ejecutamos la aplicación para probarla.</div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-uxxiAD-jy0g/X5R_I1VmmPI/AAAAAAAAhDA/eZhapGzxKkMw_vUikq5Kcbf3IA7kEqQmwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="481" data-original-width="1147" height="134" src="https://lh3.googleusercontent.com/-uxxiAD-jy0g/X5R_I1VmmPI/AAAAAAAAhDA/eZhapGzxKkMw_vUikq5Kcbf3IA7kEqQmwCLcBGAsYHQ/image.png" width="320" /></a></div><br /><br /></div><br /><br /></div><div style="text-align: left;"><br /></div>Al ingresar los datos y al presionar el botón aceptar debe registrar los datos en la base de datos y mostrarlo en el dw de la ventana w_lista.</div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Uf87PAULqcg/X5YVGSyB-FI/AAAAAAAAhGY/5w930XRDnwoExEMC2AEycC8C328DJb8yACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="413" data-original-width="730" height="274" src="https://lh3.googleusercontent.com/-Uf87PAULqcg/X5YVGSyB-FI/AAAAAAAAhGY/5w930XRDnwoExEMC2AEycC8C328DJb8yACLcBGAsYHQ/w573-h274/image.png" width="573" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><br /></div><br />Si no se muestra ninguna datos verificar si se ha guardado en la base de datos y en e evento construct del dw_1 de la ventana w_lista verificar que este el siguiente codigo:</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div><b style="background-color: #999999;">this.settransobject( sqlca)</b></div><div><b style="background-color: #999999;">this.retrieve( )</b></div><b style="background-color: #999999;"><br /></b></div><b><span style="font-size: large;"><a href="https://github.com/LEXBLAS/tutorial_pb11_5_cabecera_detalle-dw.git" rel="nofollow" target="_blank">Descargar</a></span></b></div><br /><br /></div><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><br /></div><p></p>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com1tag:blogger.com,1999:blog-2375799840871253497.post-86366103096082480782020-08-17T11:08:00.001-05:002020-08-17T11:08:19.100-05:00Como averiguar si una columna existe en un datawindow<p> <img alt="" src="data:image/png;base64,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" /></p><p><br /></p><p></p><p class="MsoNormal">Hay momentos en los cuales deseamos verificar si una columna
existe o no. Como cuando creamos datawindows dinámicamente, esto se puede
realizar usando la siguiente sintaxis:<o:p></o:p></p><b>dw_visualizar.Describe(columna + ".name") </b><p></p><p>En donde columna es una variable, la cual tiene almacenado el nombre de la columna y ".name" es una propiedad de la columna. Si existe la columna, devolverá el nombre de la columna, de caso contrario devolverá el símbolo "!".</p><p>string columna,s_columna</p><p>columna="nombre_columna"</p><p>s_columna=dw_visualizar.Describe(columna + ".name") </p><p><span style="white-space: pre;"> </span>IF s_columna <> "!" THEN</p><p><span> </span><span> </span><span> //no existe</span><br /></p><p><span> </span><span> ELSE</span><br /></p><p><span><span> </span><span> //existe la columna</span><br /></span></p><p><span><span> </span><span> </span>END IF</span></p>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com2tag:blogger.com,1999:blog-2375799840871253497.post-73330866779272902402020-07-31T18:50:00.000-05:002020-07-31T18:50:39.599-05:00Cerrar todas las ventanas hijas - Powerbuilder<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-rAhJh4UmyAM/XySskpPuH9I/AAAAAAAAfvY/6wJ60O5JhvQszo6WjRf_ZRq6rh_hLa-zACLcBGAsYHQ/s1600/cerrar_ventanas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="483" data-original-width="981" height="196" src="https://1.bp.blogspot.com/-rAhJh4UmyAM/XySskpPuH9I/AAAAAAAAfvY/6wJ60O5JhvQszo6WjRf_ZRq6rh_hLa-zACLcBGAsYHQ/s400/cerrar_ventanas.png" width="400" /></a></div>
<br />
Para cerrar todas las ventanas hijas de un MDI realizaremos lo siguiente.<br />
Crearemos una funcion, en mi caso la llamaré uf_closewindowchild la cual recibirá como parámetro una variable del tipo window "iw_handle"<br />
El código es el siguiente:<br />
<br />
<div style="text-align: justify;">
<b>Integer li_counter,i</b></div>
<div style="text-align: justify;">
<b>window lw_sheet</b></div>
<div style="text-align: justify;">
<b>window aw_sheets[] </b></div>
<div style="text-align: justify;">
<b>// valido el window solicitante</b></div>
<div style="text-align: justify;">
<b>if IsNull(iw_handle) or not IsValid(iw_handle) then</b></div>
<div style="text-align: justify;">
<b>return</b></div>
<div style="text-align: justify;">
<b>end if</b></div>
<div style="text-align: justify;">
<b>// obtengo toda las hojas abiertas</b></div>
<div style="text-align: justify;">
<b>lw_sheet = iw_handle.GetFirstsheet( )</b></div>
<div style="text-align: justify;">
<b>if IsValid(lw_sheet) then</b></div>
<div style="text-align: justify;">
<b>do</b></div>
<div style="text-align: justify;">
<b>li_counter++</b></div>
<div style="text-align: justify;">
<b>aw_sheets[li_counter] = lw_sheet</b></div>
<div style="text-align: justify;">
<b>lw_sheet = iw_handle.GetNextSheet(lw_sheet)</b></div>
<div style="text-align: justify;">
<b>loop until IsNull(lw_sheet) or not IsValid(lw_sheet)</b></div>
<div style="text-align: justify;">
<b>end if</b></div>
<div style="text-align: justify;">
<b><br /></b></div>
<div style="text-align: justify;">
<b>for i=1 to li_counter</b></div>
<div style="text-align: justify;">
<b><span style="white-space: pre;"> </span>close(aw_sheets[i])</b></div>
<div style="text-align: justify;">
<b>next</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para usarlo basta con colocar la siguiente instrucción <b>uf_closewindowchild(w_principal),</b> donde w_principal es mi ventana mdi.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<a href="http://www.mediafire.com/file/5al7gt71620np8w/uf_closewindowchild.srf/file" target="_blank"><b>Descargar</b></a></div>
<div style="text-align: justify;">
<br /></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-12259666179854959652020-06-14T09:04:00.000-05:002020-06-14T09:04:13.343-05:00El ejercicio legal de la Criminalistica<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/nI01723FHEw/0.jpg" src="https://www.youtube.com/embed/nI01723FHEw?feature=player_embedded" frameborder="0" allowfullscreen></iframe> </div>
<div class="separator" style="clear: both; text-align: center;">
El ejercicio legal de la Criminalistica desarrollado por Marcelo Ebber el 13 de Junio del 2020.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.youtube.com/channel/UCKHjLcHljysIsVO6NfRLdYQ" target="_blank">Peru Hacking</a> </div>
<span id="goog_1866173521"></span><span id="goog_1866173522"></span><br />
<span id="goog_1866173521"></span><span id="goog_1866173522"></span><br />
<span id="goog_1866173521"></span><span id="goog_1866173522"></span><br /></div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-74714525262631577192020-04-10T13:33:00.003-05:002020-04-10T13:33:20.577-05:00PowerBuilder: Error - bind parameter value for is to big<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: center;">
<b>Error - bind parameter value for is to big</b></div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-8cli7Jo-XGo/XpC7JaWEKgI/AAAAAAAAblQ/bUTUGVmpdlUi4rwPhpI_qPnhnbnoylFSACLcBGAsYHQ/s1600/bin%2Bparameter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="147" data-original-width="331" height="142" src="https://1.bp.blogspot.com/-8cli7Jo-XGo/XpC7JaWEKgI/AAAAAAAAblQ/bUTUGVmpdlUi4rwPhpI_qPnhnbnoylFSACLcBGAsYHQ/s320/bin%2Bparameter.png" width="320" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
Este error se muestra cuando un queremos guardar una cadena bastante larga.</div>
<div style="text-align: center;">
La solucion a este problema es seleccionar Disable Bind en el profile de ODBC(estoy trabajando con conexion ODBC)</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ajAeSxpTo0I/XpC7gGky3vI/AAAAAAAAblY/7AlhE6SBY7kO0O_0RIWba3aidCCxhTxJACLcBGAsYHQ/s1600/disable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="494" data-original-width="363" height="320" src="https://1.bp.blogspot.com/-ajAeSxpTo0I/XpC7gGky3vI/AAAAAAAAblY/7AlhE6SBY7kO0O_0RIWba3aidCCxhTxJACLcBGAsYHQ/s320/disable.png" width="235" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
Luego copiamos la sintaxys generado en el evento open.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/--5fWxISTaLY/XpC7waFolxI/AAAAAAAAblk/ryPhJhh-rV8qPpa4YqNRbujifyHqu7OWQCLcBGAsYHQ/s1600/open.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="458" data-original-width="666" height="440" src="https://1.bp.blogspot.com/--5fWxISTaLY/XpC7waFolxI/AAAAAAAAblk/ryPhJhh-rV8qPpa4YqNRbujifyHqu7OWQCLcBGAsYHQ/s640/open.png" width="640" /></a></div>
<div style="text-align: center;">
Con esta opción ya podremos solucionar el error.</div>
<div style="text-align: center;">
<br /></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-39122114601476185222020-04-10T13:25:00.000-05:002020-04-10T13:27:27.236-05:00PowerBuilder: Control Personalizado - Editmask<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
ontrol Personalizado - Editmask</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-cHKm_3uBR9k/XpC3bt8EUxI/AAAAAAAAbkQ/WaIMXCazWUYYQZb4QSTLOOOEO_Fw6OICACLcBGAsYHQ/s1600/editmask01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="164" data-original-width="434" height="120" src="https://1.bp.blogspot.com/-cHKm_3uBR9k/XpC3bt8EUxI/AAAAAAAAbkQ/WaIMXCazWUYYQZb4QSTLOOOEO_Fw6OICACLcBGAsYHQ/s320/editmask01.png" width="320" /></a></div>
<br />
Cuando usamos el control Editmask, este control muestra el valor ".00" cuando le hemos dado el formato decimal (Control Editmask de la derecha). Si queremos que este en blanco desde el inicio, debemos agregar codigo a este control. Para poder reutilizarlo vamos a crear un objeto del tipo Standar Visual y elegimos el objeto Editmask.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-OZnNZ0f8gj8/XpC4b2pTWQI/AAAAAAAAbkc/1hI6CgawzLgj3sXanVZjs9grWz-XDmDIgCLcBGAsYHQ/s1600/standar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="418" data-original-width="539" height="248" src="https://1.bp.blogspot.com/-OZnNZ0f8gj8/XpC4b2pTWQI/AAAAAAAAbkc/1hI6CgawzLgj3sXanVZjs9grWz-XDmDIgCLcBGAsYHQ/s320/standar.png" width="320" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-KDrod2zZprg/XpC4e6NpPdI/AAAAAAAAbkg/vCHwDsmfv40mTR5go-2qMsklqCVsJNV0gCLcBGAsYHQ/s1600/seleccion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="226" data-original-width="238" src="https://1.bp.blogspot.com/-KDrod2zZprg/XpC4e6NpPdI/AAAAAAAAbkg/vCHwDsmfv40mTR5go-2qMsklqCVsJNV0gCLcBGAsYHQ/s1600/seleccion.png" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
Nos dirijimos a la sección Event List </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-6gOJqSd9LqE/XpC45BJpUyI/AAAAAAAAbks/8vifw22weJ02trqk7CPniPbQp5dFkjlTQCLcBGAsYHQ/s1600/event.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="395" data-original-width="665" height="380" src="https://1.bp.blogspot.com/-6gOJqSd9LqE/XpC45BJpUyI/AAAAAAAAbks/8vifw22weJ02trqk7CPniPbQp5dFkjlTQCLcBGAsYHQ/s640/event.png" width="640" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
Agregamos un nuevo evento</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-n7Z4FK1N1xs/XpC5Io7IMAI/AAAAAAAAbkw/JheTt4mRIPoUcXzes9KkCMonakemSjThQCLcBGAsYHQ/s1600/menusel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="173" data-original-width="124" src="https://1.bp.blogspot.com/-n7Z4FK1N1xs/XpC5Io7IMAI/AAAAAAAAbkw/JheTt4mRIPoUcXzes9KkCMonakemSjThQCLcBGAsYHQ/s1600/menusel.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-zno9NF9MADs/XpC5MIjqqlI/AAAAAAAAbk4/aY8UVr2wUX8UYQgVkrsKeW3sDQwaHejLQCLcBGAsYHQ/s1600/nuevo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="454" data-original-width="987" height="292" src="https://1.bp.blogspot.com/-zno9NF9MADs/XpC5MIjqqlI/AAAAAAAAbk4/aY8UVr2wUX8UYQgVkrsKeW3sDQwaHejLQCLcBGAsYHQ/s640/nuevo.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Le damos un nombre al nuevo evento por ejemplo ue_char</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-wXNhWp6KDt4/XpC5RMPQqmI/AAAAAAAAbk8/K_0Jl1fnG9M6EBA4ogybKAz-mOFjw-ajwCLcBGAsYHQ/s1600/ue_char.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="454" data-original-width="987" height="294" src="https://1.bp.blogspot.com/-wXNhWp6KDt4/XpC5RMPQqmI/AAAAAAAAbk8/K_0Jl1fnG9M6EBA4ogybKAz-mOFjw-ajwCLcBGAsYHQ/s640/ue_char.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
Agregamos el siguiente codigo.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
<i><b>string texto</b></i><br />
<i><b>texto=this.text</b></i><br />
<i><b>if integer(this.text)=0 or this.text=".00" then</b></i><br />
<i><b> this.setmask(decimalmask!,"####")</b></i><br />
<i><b> return</b></i><br />
<i><b>end if</b></i><br />
<i><b>if len(this.text)=1 then</b></i><br />
<i><b> this.setmask(decimalmask!,"####,###.00")</b></i><br />
<i><b> this.text=texto</b></i><br />
<i><b> this.selecttext( len(this.text)-2, 0)</b></i><br />
<i><b>end if </b></i><br />
<br /></div>
<div style="text-align: left;">
<b><br /></b></div>
<div style="text-align: left;">
<b>Aqui pueden<a href="https://github.com/LEXBLAS/editmask" target="_blank"> descargar</a> el codigo fuente. Esta desarrollado en powerBuilder 11.5.</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<br /></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-27980488837795818332020-03-23T16:59:00.001-05:002020-03-23T16:59:58.727-05:00Powerbuilder: Funciones.<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/oMlMQoCso0c?clip=&clipt=EAAYAA%3D%3D" width="480"></iframe>lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-78098147612835673722020-02-22T21:20:00.001-05:002020-02-22T21:20:45.592-05:00PowerBuilder : Activar Autoscript - Atajo de teclado<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/--KmlAxDxW4Q/XlHg719b6eI/AAAAAAAAafw/j6UX53piWm4nyXWrgUnZx95s2AndyxmPgCEwYBhgL/s1600/00-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="199" data-original-width="535" height="119" src="https://1.bp.blogspot.com/--KmlAxDxW4Q/XlHg719b6eI/AAAAAAAAafw/j6UX53piWm4nyXWrgUnZx95s2AndyxmPgCEwYBhgL/s320/00-01.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-gtRKbz_Gd8w/XlHg8d3oriI/AAAAAAAAaf0/wAY_b1LreiAmkEH75ArAeXL_twBezoXWwCEwYBhgL/s1600/00-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="474" data-original-width="372" height="320" src="https://1.bp.blogspot.com/-gtRKbz_Gd8w/XlHg8d3oriI/AAAAAAAAaf0/wAY_b1LreiAmkEH75ArAeXL_twBezoXWwCEwYBhgL/s320/00-1.png" width="251" /></a></div>
<br />
Ahora para usar un atajo de teclado nos dirijimos a Tools->Keyboard Shorcuts<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9b4OHER8fnk/XlHg-eflw-I/AAAAAAAAaf4/xShttKArzZwcjpKEgYDwgxAtP9hrCWzzgCEwYBhgL/s1600/autoscript_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="386" data-original-width="665" height="185" src="https://1.bp.blogspot.com/-9b4OHER8fnk/XlHg-eflw-I/AAAAAAAAaf4/xShttKArzZwcjpKEgYDwgxAtP9hrCWzzgCEwYBhgL/s320/autoscript_01.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Luego a Edit->Activate AutoScript. una vez allí presionamos la combinacion de teclas que usaremos como atajo de teclado. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-SJG-MjTX69E/XlHg-vOqKII/AAAAAAAAaf8/Hp2MTlYpfF8iLT8jBj-3hsnA2wj3t4P5wCEwYBhgL/s1600/autoscript_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="415" data-original-width="362" height="320" src="https://1.bp.blogspot.com/-SJG-MjTX69E/XlHg-vOqKII/AAAAAAAAaf8/Hp2MTlYpfF8iLT8jBj-3hsnA2wj3t4P5wCEwYBhgL/s320/autoscript_02.png" width="279" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-60944554043175178682019-08-30T18:29:00.000-05:002019-08-30T18:29:04.816-05:00Consultar el ruc desde sunat sin ingresar el captcha.<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-vqiqV_I0EP8/XWmtpJxuzRI/AAAAAAAAXLY/a64LdnJ3jA8HxTYpDvJ8S3RhXiMDDk_QgCLcBGAs/s1600/2019-08-30_18-12-20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="458" data-original-width="668" height="219" src="https://1.bp.blogspot.com/-vqiqV_I0EP8/XWmtpJxuzRI/AAAAAAAAXLY/a64LdnJ3jA8HxTYpDvJ8S3RhXiMDDk_QgCLcBGAs/s320/2019-08-30_18-12-20.png" width="320" /></a></div>
A continuación les dejo el codigo fuente de consultar datos de la <b>SUNAT</b> usando el número de RUC, el cual está desarrollado en Power Builder.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/H6xDdRnUAC0/0.jpg" src="https://www.youtube.com/embed/H6xDdRnUAC0?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<br />
link del codigo fuente de giansalex(PHP): <a href="https://github.com/giansalex/peru-consult/tree/master/src/Peru/Sunat" target="_blank">https://github.com/giansalex/peru-consult/tree/master/src/Peru/Sunat</a>.<br />
<br />
link del codigo fuente en PB: <a href="https://github.com/LEXBLAS/consultarRucPbNative" target="_blank">https://github.com/LEXBLAS/consultarRucPbNative</a></div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-62519037002291987942019-04-19T20:16:00.000-05:002019-04-19T20:16:00.697-05:00Error 3d Max c000375 windows 7: Solución<div dir="ltr" style="text-align: left;" trbidi="on">
Esta es una solución que encontré después de probar todas las alternativas que rondan en internet.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Para esto entramos a la opción 3d Max del Menú inicio y seleccionamos "Change Grafics Mode".<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-I69iYjkDntM/XLpx1_J3w6I/AAAAAAAAUMQ/173GZnthZogFnpjXdk0Nkou6igZYPUTKACLcBGAs/s1600/paso_1.fw.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="486" data-original-width="461" height="320" src="https://4.bp.blogspot.com/-I69iYjkDntM/XLpx1_J3w6I/AAAAAAAAUMQ/173GZnthZogFnpjXdk0Nkou6igZYPUTKACLcBGAs/s320/paso_1.fw.png" width="303" /></a></div>
Nos debe aparecer la siguiente imagen.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-ob1S1GcW1nQ/XLpyZ4SkZHI/AAAAAAAAUMc/7hEduraYjLo_Zhf2oAZj8IHXEo_zHOFkACLcBGAs/s1600/paso_2.fw.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="358" height="193" src="https://3.bp.blogspot.com/-ob1S1GcW1nQ/XLpyZ4SkZHI/AAAAAAAAUMc/7hEduraYjLo_Zhf2oAZj8IHXEo_zHOFkACLcBGAs/s320/paso_2.fw.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
Por defecto estará n la opcion Direct3D 11. Lo cambiamos por Legacy OpenGL y aceptamos los cambios. Con esto ya podemos ingresar con normalidad a 3d Max.<br />
<br />
<br />
<br />
<br /></div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-60056977396516142522019-04-09T22:52:00.004-05:002019-04-09T23:08:09.848-05:00Restaurar basede datos desde una carpeta: Postgresql <div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
Restaurar basede datos desde una carpeta </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-x66Vz5VrEQs/XK1lvKfY2nI/AAAAAAAAUCk/y6HM1UA80vUm8rML4aIN6798qheMpddaQCLcBGAs/s1600/Postgresql.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="482" data-original-width="864" height="178" src="https://1.bp.blogspot.com/-x66Vz5VrEQs/XK1lvKfY2nI/AAAAAAAAUCk/y6HM1UA80vUm8rML4aIN6798qheMpddaQCLcBGAs/s320/Postgresql.png" width="320" /></a><a href="https://1.bp.blogspot.com/-x66Vz5VrEQs/XK1lvKfY2nI/AAAAAAAAUCk/y6HM1UA80vUm8rML4aIN6798qheMpddaQCLcBGAs/s1600/Postgresql.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Lo primero que debemos hacer es detener el servicio de Postgresql.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-VnQn8wlmgMA/XK1mwdCCIBI/AAAAAAAAUCw/C09Ii9L06rch7eoRKR9JsLGHlao8AgJqQCEwYBhgL/s1600/detener_servicio.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="482" data-original-width="864" height="178" src="https://4.bp.blogspot.com/-VnQn8wlmgMA/XK1mwdCCIBI/AAAAAAAAUCw/C09Ii9L06rch7eoRKR9JsLGHlao8AgJqQCEwYBhgL/s320/detener_servicio.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: justify;">
Una vez detenido copiamos a la carpeta data al directorio <b>destino </b>y reemplazamos todo el contenido. Luego en la carpeta data debemos eliminar el archivo <i><b>postmaster.pid</b></i> e iniciamos nuevamente el servicio de Postgresql e ingresamos al <b>pgAdmin</b>. Con esto ya deben visualizarse las base de datos que copiamos.</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-f8xAGjLwPi0/XK1n6BcB50I/AAAAAAAAUC8/g_IL8QKFMnc95GeRieRwtM9AwvJe6Jo_gCLcBGAs/s1600/vlcsnap-2019-04-09-22h49m47s312.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="482" data-original-width="864" height="178" src="https://3.bp.blogspot.com/-f8xAGjLwPi0/XK1n6BcB50I/AAAAAAAAUC8/g_IL8QKFMnc95GeRieRwtM9AwvJe6Jo_gCLcBGAs/s320/vlcsnap-2019-04-09-22h49m47s312.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
De salir algun error al iniciar el servicio, verifique los permisos de la carpeta <b>"data"</b>. Asigne todos los permisos al usuario actual, quite el atributo de solo lectura e inicie nuevamente el servicio.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/HnmfnMjYVUs/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/HnmfnMjYVUs?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-42337855208640759372017-06-29T11:13:00.003-05:002017-06-29T11:47:56.093-05:00Error al iniciar apache en eclipse<div dir="ltr" style="text-align: left;" trbidi="on">
Hace unos dias se me presentó un problema al querer iniciar un proyecto de Spring Framework en eclipse.<br />
Al iniciar el apache me arrojaba el siguiente error "Starting Tomcat v9.0 Server localhost has encountered a problem. Server Tomcat v9.0 Server at localhst failed to start."<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-b38TcLSpNDA/WVUl6MFuCxI/AAAAAAAAFP4/OoIB04VlsIMc_vEalyk4AGqj-hCrh1J7wCLcBGAs/s1600/2017-06-29_00-43-43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="539" data-original-width="652" height="528" src="https://4.bp.blogspot.com/-b38TcLSpNDA/WVUl6MFuCxI/AAAAAAAAFP4/OoIB04VlsIMc_vEalyk4AGqj-hCrh1J7wCLcBGAs/s640/2017-06-29_00-43-43.png" width="640" /></a></div>
<br />
Por mas que iniciara un nuevo proyecto en blanco, el error persistia. Asi que hice lo siguiente.<br />
Entre a la carpeta "C:/usuarios/miusuario/". Dentro de esa carpeta borre tres carpetas:<br />
<ul style="text-align: left;">
<li>.eclipse</li>
<li>.m2</li>
<li>.p2</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-QPdvwztuooA/WVUm7pCJL2I/AAAAAAAAFQE/ni7Ef5TzNAEowyOgv414GZZCLKtQsD9pwCLcBGAs/s1600/2017-06-29_00-44-32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="405" data-original-width="518" height="250" src="https://2.bp.blogspot.com/-QPdvwztuooA/WVUm7pCJL2I/AAAAAAAAFQE/ni7Ef5TzNAEowyOgv414GZZCLKtQsD9pwCLcBGAs/s320/2017-06-29_00-44-32.png" width="320" /></a></div>
<br />
Una vez eliminadas estas carpetas inicie nuevamente el proyecto en blanco y ahora si levantaba el proyecto con normalidad.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-gr9dfdJMz3A/WVUnELdANYI/AAAAAAAAFQI/FaWKaJEYX58Q2W5II60GUFcH3kOPZlAdQCLcBGAs/s1600/2017-06-29_00-47-57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="402" data-original-width="712" src="https://2.bp.blogspot.com/-gr9dfdJMz3A/WVUnELdANYI/AAAAAAAAFQI/FaWKaJEYX58Q2W5II60GUFcH3kOPZlAdQCLcBGAs/s1600/2017-06-29_00-47-57.png" /></a></div>
Nota: Tambien podria funcionar eliminando solamente la carpeta ". m2".<br />
<br />
<br />
<br />
<br /></div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-87895415086542344382017-02-01T19:32:00.000-05:002019-03-20T07:24:15.988-05:00PowerBuilder - usando Treeview - Creando un Menu para nuestro sistema<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-mtJFKqmxHaA/WJJ3b76pKyI/AAAAAAAAEqU/M6fdm3WUMQA1OOhpWRBSejs9UMBF1kqdwCLcB/s1600/treeview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="364" src="https://1.bp.blogspot.com/-mtJFKqmxHaA/WJJ3b76pKyI/AAAAAAAAEqU/M6fdm3WUMQA1OOhpWRBSejs9UMBF1kqdwCLcB/s640/treeview.png" width="640" /></a></div>
<br />
Lo primero será agregar un treeview al que llamaremos tv_menu y un boton. Dentro del boton es donde vamos a programar a modo de ejemplo. Una vez terminado, ustedes pueden colocar el codigo dentro de constructor del treeview.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-4OaZTFzKJtk/WJJ4pHxILgI/AAAAAAAAEqg/2oVIiOlxkCUNqOkz1lp6y2yLA9hE_b8mQCLcB/s1600/treeview1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://3.bp.blogspot.com/-4OaZTFzKJtk/WJJ4pHxILgI/AAAAAAAAEqg/2oVIiOlxkCUNqOkz1lp6y2yLA9hE_b8mQCLcB/s400/treeview1.png" width="400" /></a></div>
El siguiente paso es agregar imagenes al treeview, los cuales seran usados para ser asignados a los items del treeview.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-4DaBmvh8uLg/WJJ44ClBOxI/AAAAAAAAEqk/rBl9owq5UZsA7haD4Wn-O3IsjRGmz-HQACLcB/s1600/treeview2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="238" src="https://2.bp.blogspot.com/-4DaBmvh8uLg/WJJ44ClBOxI/AAAAAAAAEqk/rBl9owq5UZsA7haD4Wn-O3IsjRGmz-HQACLcB/s320/treeview2.png" width="320" /></a></div>
<br />
El número que esta al lado izquierdo de la imagen, indica el indice asignado de la imagen. Por ejemplo si deseamos asignar la imagen Asterisk a un item, entonces usaremos el indice 2.<br />
<br />
Para insertar los items en el treeview usaremos la funcion <b>insertitemlast.</b><br />
<br />
<b>control_treeview.insertitemlast( padre, "texto que aparecera",indice_de_la_imagen)</b><br />
<br />
<br />
El primero<b> </b>parametro que recibe la funcion es el indice del padre, al iniciar el primer item o los primeros items, se le asigna el numero cero. El siguiente parametro es el texto que aparecera en el item y el tercer parametro es el indice de la imagen que se mostrará al lado del item.<br />
<br />
Conforme se vayan insertando items, se van asignando automaticamente un indice correlativo.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-Cz8_m72PwLs/WJJ6aP3JOqI/AAAAAAAAEq0/I5i6YiBat1YJRuu7LrHh1lwm8qqjOIOqwCLcB/s1600/treeview3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="62" src="https://2.bp.blogspot.com/-Cz8_m72PwLs/WJJ6aP3JOqI/AAAAAAAAEq0/I5i6YiBat1YJRuu7LrHh1lwm8qqjOIOqwCLcB/s320/treeview3.png" width="320" /></a></div>
<br />
<br />
<br />
Si queremos insertar un item hijo a compras el código seria así.<br />
<br />
<br />
<b>//hijos de Compras<br />tv_menu.insertitemlast( 3, "Proveedores",5)//11</b><br />
<br />
<br />
Codigo para insertar los items al treeview<br />
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br />
//padres<br />
tv_menu.insertitemlast( 0, "Almacen",1)//id 1<br />
tv_menu.insertitemlast( 0, "Ventas",2)//id 2<br />
tv_menu.insertitemlast( 0, "Compras",3)//id 3<br />
tv_menu.insertitemlast( 0, "Configuracion",4)//id 4<br />
//hijos<br />
<br />
//hijos de almacen<br />
tv_menu.insertitemlast( 1, "Tablas",7)//5<br />
tv_menu.insertitemlast( 1, "Articulos",8)//6<br />
tv_menu.insertitemlast( 1, "Grupos",9)//7<br />
<br />
//hijos de Ventas<br />
tv_menu.insertitemlast( 2, "Clientes",4)//8<br />
tv_menu.insertitemlast( 2, "Documento de Venta",2)//9<br />
tv_menu.insertitemlast( 2, "Reportes",3)//10<br />
<br />
//hijos de Compras<br />
tv_menu.insertitemlast( 3, "Proveedores",5)//11<br />
tv_menu.insertitemlast( 3, "Documento de Compra",4)//12<br />
tv_menu.insertitemlast( 3, "Reportes",7)//13<br />
<br />
//hijos de Configuracion<br />
tv_menu.insertitemlast( 4, "IGV",8)//14<br />
<br />
//hijos de reporte de compras<br />
<br />
tv_menu.insertitemlast( 13, "Reportes mensual",6)//15<br />
<br />
/*********************************************************/<br />
<br />
<br />
<br />
Si ejecutamos la aplicacion veremos que los items aparecen todos colapsados. Para desplegar los items usaremos el siguiente código.<br />
<br />
<b>long ll_tvi<br />int i<br /><br />ll_tvi = tv_menu.FindItem(RootTreeItem! , 0)<br />tv_menu.ExpandAll(ll_tvi)<br />for i=1 to 3<br /> ll_tvi = tv_menu.FindItem(NextTreeItem! ,ll_tvi )<br /> tv_menu.ExpandAll(ll_tvi)<br /><br />next</b><br />
<br />
<br />
Si queremos abrir una ventana cuando presionen dos veces sobre un item, entonces debemos programar en el evento doubleclicked. <br />
Para saber en que item se realizo el doble click, usamos el argumento handle del evento. Este argumento contiene el numero que indica el indice del item. Entonces para abrir una ventana sabiendo el numero de item seleccionado, usaremos choose case.<br />
<br />
<b><br /></b>
<b>choose case handle<br /> case 5<br /> open(w_ventana1)<br /> case 6</b><br />
<b> //otra ventana<br /> case 7</b><br />
<b> //otra mas<br />end choose</b><br />
<br />
<b>Nota: </b>Debe agregar una ventana llamada w_ventana1 al proyecto.<br />
<b> </b><br />
<b> </b><br />
<div style="text-align: center;">
<b><a href="https://github.com/LEXBLAS/treeview" target="_blank"><span style="font-size: x-large;">Descargar Codigo Fuente</span></a></b></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com1tag:blogger.com,1999:blog-2375799840871253497.post-87761669739506482972017-01-31T10:08:00.004-05:002017-01-31T10:10:10.190-05:00PowerBuilder usando Dropdowndw<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/4EER3fBU9l4/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/4EER3fBU9l4?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<br />
<div style="text-align: center;">
<b>PowerBuilder usando Dropdowndw</b></div>
<div style="text-align: center;">
<br />
En el presente video se mostrará como usar columnas dropdowndw dependientes y el uso de getchild<br />
<br />
<br /></div>
<div style="text-align: center;">
<b><span style="font-size: x-large;"><a href="https://github.com/LEXBLAS/Dropdowndatawindow" target="_blank">Link del codigo fuente</a></span> </b></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-12249975329273272012017-01-24T09:47:00.001-05:002017-01-24T09:47:36.004-05:00Pruebas de Desempeño y Optimizacion en .NET<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://drive.google.com/file/d/0BxWr_e1z6MQfYWdrNldnY0NYRTA/view?usp=sharing" target="_blank"><img alt="https://drive.google.com/file/d/0BxWr_e1z6MQfYWdrNldnY0NYRTA/view?usp=sharing" border="0" height="640" src="https://2.bp.blogspot.com/-ZtZscorCYg8/WIdoOUgCkrI/AAAAAAAAEpw/j_DaWiyPrnUPd1vBmFybjsjq7bYseWgnwCLcB/s640/testing.png" width="432" /></a></div>
<br />
<br />
<br />
<div style="text-align: center;">
<b>Pruebas de Desempeño y Optimizacion en .NET</b></div>
<div style="text-align: center;">
<b>Paul Gravich y Chris Farrel</b></div>
<div style="text-align: center;">
<b>Idioma: Ingles</b></div>
<div style="text-align: center;">
<b>Páginas: 403</b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<b><a href="https://drive.google.com/file/d/0BxWr_e1z6MQfYWdrNldnY0NYRTA/view?usp=sharing" target="_blank"><span style="font-size: x-large;">Descargar</span></a> </b></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-89981224008579500032016-11-25T10:16:00.001-05:002016-11-25T10:16:48.042-05:00Principios Pratrones y Practicas en C#<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-E1jQYk065LY/WDhUqqsH43I/AAAAAAAAEYA/jO5Y2d_vVhgppEfnECn66h1de1Ujbj5UwCLcB/s1600/csharp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://2.bp.blogspot.com/-E1jQYk065LY/WDhUqqsH43I/AAAAAAAAEYA/jO5Y2d_vVhgppEfnECn66h1de1Ujbj5UwCLcB/s400/csharp.jpg" width="295" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Principios Pratrones y Practicas en C#</div>
<div class="separator" style="clear: both; text-align: center;">
Idioma: Ingles<br />Páginas: 944</div>
<div class="separator" style="clear: both; text-align: center;">
Autor: Robert C, Martin.</div>
<div class="separator" style="clear: both; text-align: center;">
Para desarrollar aplicaciones de calidad este libro no habla sobre el uso patrones, buenas prácticas con c#.</div>
<div class="separator" style="clear: both; text-align: center;">
Para el desarrollo de diferentes tipos de sistemas de informacion.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://drive.google.com/open?id=0BxWr_e1z6MQfUS1HeThDT2tnbms" target="_blank"><span style="font-size: x-large;"><b>Descargar</b></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-7888731458517439452016-11-13T14:02:00.000-05:002016-11-13T14:02:09.874-05:00Buenas practicas con VMWARE <div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-l7QELFtgRsI/WCi3-5-xYVI/AAAAAAAAETk/0Us_bLkzw9YJH2WSUVKC6FZEHe_CR4LpACLcB/s1600/vmware.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="229" src="https://1.bp.blogspot.com/-l7QELFtgRsI/WCi3-5-xYVI/AAAAAAAAETk/0Us_bLkzw9YJH2WSUVKC6FZEHe_CR4LpACLcB/s320/vmware.jpg" width="320" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Parte 1 - Introducción a Vmware Sphere <br />Parte 2 - Gestión de Maquinas Virtuales <br />Parte 3 - Redes <br />Parte 4 - Almacenamiento <br />Parte 5 - Gestión de recursos </b></div>
<div style="text-align: left;">
<b>Hipervisor </b></div>
<div style="text-align: justify;">
El hipervisor es el componente más importante de toda una infraestructura basada en la virtualización, ya que es el componente que monitoriza las diversas máquinas virtuales que se ejecutan en un nodo determinado. Aquí monitoritzación se entiende como interceptación del uso de los recursos y autorización de acceso a los mismos, con lo que en el fondo estamos particionando un nodo para que pueda ejecutar varios entornos operativos (Linux, Windows, etc...) </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<a href="https://drive.google.com/file/d/0BxWr_e1z6MQfX1VWVk40anEza1E/view?usp=sharing" target="_blank"><span style="font-size: x-large;">Descargar</span></a></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-19845721245299082812016-10-31T23:05:00.001-05:002016-10-31T23:05:48.113-05:00OpenGL con Qt<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-34mq7l90xQU/WBgTgbaVUZI/AAAAAAAAESk/JUJqwvw4z9sOowwlM1YOrgomdyh3Q1w-ACLcB/s1600/2016-10-31_19-11-13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://4.bp.blogspot.com/-34mq7l90xQU/WBgTgbaVUZI/AAAAAAAAESk/JUJqwvw4z9sOowwlM1YOrgomdyh3Q1w-ACLcB/s320/2016-10-31_19-11-13.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-DeSWFzwbACI/WBgKlzHlWGI/AAAAAAAAERc/2IRsAsJKjyM_il1J_3ZfpM8DhUuhDPK9ACLcB/s1600/openglqt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://2.bp.blogspot.com/-DeSWFzwbACI/WBgKlzHlWGI/AAAAAAAAERc/2IRsAsJKjyM_il1J_3ZfpM8DhUuhDPK9ACLcB/s320/openglqt.jpg" width="320" /></a></div>
<br />
<br />
En esta ocasión veremos un ejemplo de como usar OpenGL en Qt. Vale recalcar que solo se verá como usarlo, no se va a profundizar sobre el tema de OpenGL.<br />
<br />
<br />
Primero vamos a crear un proyecto común y corriente(no se explicará esta parte por ser muy sencillo).<br />
Una vez que tenemos nuestro proyecto, vamos a agregar una clase.<br />
Clic derecho sobre el proyecto agregar nuevo... seleccionamos C++ Class<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-IQ1rZC1eVOs/WBgRJeReZAI/AAAAAAAAESI/e0NJe6V0O-Ms8cjNNN8cwPLd9X-6C3IjACEw/s1600/2016-10-31_18-57-35.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-IQ1rZC1eVOs/WBgRJeReZAI/AAAAAAAAESI/e0NJe6V0O-Ms8cjNNN8cwPLd9X-6C3IjACEw/s320/2016-10-31_18-57-35.jpg" width="208" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-hXtoD_alhEY/WBgMgAUNe-I/AAAAAAAAERo/0pyvcj-EqXg6qL8Zrd92tV3W3gNCwBmuACLcB/s1600/2016-10-31_18-58-04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://1.bp.blogspot.com/-hXtoD_alhEY/WBgMgAUNe-I/AAAAAAAAERo/0pyvcj-EqXg6qL8Zrd92tV3W3gNCwBmuACLcB/s400/2016-10-31_18-58-04.jpg" width="400" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
Le ponemos un nombre a nuestro Widget, por ejempo <span style="color: purple;">WidgetOpenGL </span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: purple;"><span style="color: black;">y en Base</span> <span style="color: black;">class Custom. Luego colocamos </span></span><span style="color: purple;">QOpenGLWidget <span style="color: black;">y siguiente.</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: purple;"><span style="color: black;"> </span></span> </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-fUshbHFPY5Q/WBgMpzkPWaI/AAAAAAAAERs/1RVvAk2P-zAti4OJMTCTGB5DLwV8x7nMwCLcB/s1600/2016-10-31_18-59-18.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://1.bp.blogspot.com/-fUshbHFPY5Q/WBgMpzkPWaI/AAAAAAAAERs/1RVvAk2P-zAti4OJMTCTGB5DLwV8x7nMwCLcB/s400/2016-10-31_18-59-18.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Finalmente les pedirá finalizar.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Ya tenemos nuestro proyecto con nuestra clase. Ahora vamos a modificar el archivo ".pro" para agregar las referencias a opengl. Agregaremos <span style="color: purple;">QT</span><span style="color: silver;"> </span>+=opengl y <span style="color: purple;">LIBS</span><span style="color: silver;"> </span>+=<span style="color: silver;"> </span>-lOpengl32.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-GauFQupLEZI/WBgNuQ2wK8I/AAAAAAAAER4/CSPqz9YZK6QU59l4oOJhmaqvvI4UIp4kACLcB/s1600/2016-10-31_22-35-31.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://3.bp.blogspot.com/-GauFQupLEZI/WBgNuQ2wK8I/AAAAAAAAER4/CSPqz9YZK6QU59l4oOJhmaqvvI4UIp4kACLcB/s400/2016-10-31_22-35-31.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Ahora nos dirigimos a la clase que habiamos agregado y agregaremos las siguientes librerias.<br />
<br />
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QOpenGLWidget></span>
<br />
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QOpenGLFunctions></span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QGLFramebufferObjectFormat></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">Modificaremos la definicion de la clase.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: olive;">class</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: silver;"> </span><span style="color: black;">:</span><span style="color: silver;"> </span><span style="color: olive;">public</span><span style="color: silver;"> </span><span style="color: purple;">QOpenGLWidget</span><span style="color: black;">,</span><span style="color: olive;">protected</span><span style="color: silver;"> </span><span style="color: purple;">QOpenGLFunctions</span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"> </span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;">Agregamos las funciones virtuales que vamos a reimplementar.</span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">initializeGL</span><span style="color: black;">()</span><span style="color: silver;"> </span><span style="color: navy;">Q_DECL_OVERRIDE</span><span style="color: black;">;</span><span style="color: green;">//reimplementando</span><span style="color: silver;"> </span><span style="color: green;">las</span><span style="color: silver;"> </span><span style="color: green;">funciones</span><span style="color: silver;"> </span><span style="color: green;">virtuales</span>
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">resizeGL</span><span style="color: black;">(</span><span style="color: olive;">int</span><span style="color: silver;"> </span>w<span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: olive;">int</span><span style="color: silver;"> </span>h<span style="color: black;">)</span><span style="color: navy;">Q_DECL_OVERRIDE</span><span style="color: black;">;</span>
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">paintGL</span><span style="color: black;">()</span><span style="color: navy;">Q_DECL_OVERRIDE</span><span style="color: black;">;</span>
Al final su archivo de cabecera widgetopengl.h se vera de la siguiente manera.</span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"> </span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: navy;">#ifndef</span><span style="color: silver;"> </span>WIDGETOPENGL_H
<span style="color: navy;">#define</span><span style="color: silver;"> </span><span style="color: navy;">WIDGETOPENGL_H</span>
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QOpenGLWidget></span>
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QOpenGLFunctions></span>
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QGLFramebufferObjectFormat></span>
<span style="color: olive;">class</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: silver;"> </span><span style="color: black;">:</span><span style="color: silver;"> </span><span style="color: olive;">public</span><span style="color: silver;"> </span><span style="color: purple;">QOpenGLWidget</span><span style="color: black;">,</span><span style="color: olive;">protected</span><span style="color: silver;"> </span><span style="color: purple;">QOpenGLFunctions</span>
<span style="color: black;">{</span>
<span style="color: olive;">public</span><span style="color: black;">:</span>
<span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">();</span>
<span style="color: olive;">explicit</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">(</span><span style="color: purple;">QWidget</span><span style="color: silver;"> </span><span style="color: black;">*</span>parent<span style="color: silver;"> </span><span style="color: black;">=</span><span style="color: silver;"> </span><span style="color: navy;">0</span><span style="color: black;">);</span>
<span style="color: olive;">protected</span><span style="color: black;">:</span>
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">initializeGL</span><span style="color: black;">()</span><span style="color: silver;"> </span><span style="color: navy;">Q_DECL_OVERRIDE</span><span style="color: black;">;</span><span style="color: green;">//reimplementando</span><span style="color: silver;"> </span><span style="color: green;">las</span><span style="color: silver;"> </span><span style="color: green;">funciones</span><span style="color: silver;"> </span><span style="color: green;">virtuales</span>
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">resizeGL</span><span style="color: black;">(</span><span style="color: olive;">int</span><span style="color: silver;"> </span>w<span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: olive;">int</span><span style="color: silver;"> </span>h<span style="color: black;">)</span><span style="color: navy;">Q_DECL_OVERRIDE</span><span style="color: black;">;</span>
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">paintGL</span><span style="color: black;">()</span><span style="color: navy;">Q_DECL_OVERRIDE</span><span style="color: black;">;</span>
<span style="color: black;">};</span>
<span style="color: navy;">#endif</span><span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">WIDGETOPENGL_H</span>
Las funciones que hemos declarado van a ser implementadas.Asi que nos dirigimos </span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;">al archivo widgetopengl.cpp</span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"> </span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"> </span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;">Modificamos el archivo modificando el constructor.</span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">::</span><span style="color: black;">WidgetOpenGL</span><span style="color: black;">(</span><span style="color: purple;">QWidget</span><span style="color: silver;"> </span><span style="color: black;">*</span><span style="color: black;">parent</span><span style="color: black;">):</span><span style="color: purple;">QOpenGLWidget</span><span style="color: black;">(</span><span style="color: black;">parent</span><span style="color: black;">)</span></span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"> </span></span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"> Agregando las funciones declaradas. </span></span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">initializeGL</span><span style="color: black;">()</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span>
<span style="color: black;">}</span>
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">resizeGL</span><span style="color: black;">(</span><span style="color: olive;">int</span><span style="color: silver;"> </span><span style="color: black;">w</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: olive;">int</span><span style="color: silver;"> </span><span style="color: black;">h</span><span style="color: black;">)</span>
<span style="color: black;">{</span>
<span style="color: black;">}</span>
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">paintGL</span><span style="color: black;">()</span>
<span style="color: black;">{</span>
<span style="color: black;"></span>
<span style="color: black;">}</span>
En la funcion </span></span></span></span></span><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"><span style="color: black; font-style: italic;">initializeGL</span><span style="color: black;">()vamos a agregar el siguiente código </span></span></span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"><span style="color: black;"> </span></span></span></span></span></span><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: black;">//esta parte sirve para poder usar las funciones de opengl</span></span></span></span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: silver;"> </span><span style="color: black;">initializeOpenGLFunctions</span><span style="color: black;">(); </span></span></span></span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: black;"> //</span></span></span></span></span></span></span><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: black;">Para <strong>habilitar o deshabilitar el buffer de profundidad</strong></span>
<span style="color: silver;"> </span><span style="color: black;">glEnable</span><span style="color: black;">(</span><span style="color: navy;">GL_DEPTH_TEST</span><span style="color: black;">);</span> </span></span></span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: purple;"><span style="color: black;"><span style="color: black;"> </span> </span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">la fucion deberia quedar asi.</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">initializeGL</span><span style="color: black;">()</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span><span style="color: black;">initializeOpenGLFunctions</span><span style="color: black;">();</span>
<span style="color: silver;"> </span><span style="color: black;">glEnable</span><span style="color: black;">(</span><span style="color: navy;">GL_DEPTH_TEST</span><span style="color: black;">);</span>
<span style="color: black;">}</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">la fucion resizeGL no la tocaremos por ahora, esta sirve como su mismo nombre </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">lo dice para redimensionar el contenido cuando la ventana cambia de tamaño.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">Ahora vamos con el painGL. Aqui codificaremos nuestras instrucciones openGL.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">Por ejemplo, si deseamos mostrar un rectangulo, usaremos la GL_POLYGON. Si han </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">usado openGL con glut, esto es lo mismo.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">WidgetOpenGL</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">paintGL</span><span style="color: black;">()</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span><span style="color: black;">glClear</span><span style="color: black;">(</span><span style="color: navy;">GL_COLOR_BUFFER_BIT</span><span style="color: black;">|</span><span style="color: navy;">GL_DEPTH_BUFFER_BIT</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glDepthFunc</span><span style="color: black;">(</span><span style="color: navy;">GL_LESS</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glEnable</span><span style="color: black;">(</span><span style="color: navy;">GL_DEPTH_TEST</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glShadeModel</span><span style="color: black;">(</span><span style="color: navy;">GL_SMOOTH</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">Resetear</span><span style="color: silver;"> </span><span style="color: green;">transformaciones</span>
<span style="color: silver;"> </span><span style="color: black;">glLoadIdentity</span><span style="color: black;">();</span>
<span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">LADO</span><span style="color: silver;"> </span><span style="color: green;">IZQUIERDO:</span><span style="color: silver;"> </span><span style="color: green;">lado</span><span style="color: silver;"> </span><span style="color: green;">verde</span>
<span style="color: silver;"> </span><span style="color: black;">glBegin</span><span style="color: black;">(</span><span style="color: navy;">GL_POLYGON</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glColor3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: navy;">1.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">0.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">0.0</span><span style="color: silver;"> </span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glVertex3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: silver;"> </span><span style="color: black;">);</span><span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">P1</span><span style="color: silver;"> </span><span style="color: green;">es</span><span style="color: silver;"> </span><span style="color: green;">rojo</span>
<span style="color: silver;"> </span><span style="color: black;">glColor3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: navy;">0.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">1.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">0.0</span><span style="color: silver;"> </span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glVertex3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: silver;"> </span><span style="color: black;">);</span><span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">P2</span><span style="color: silver;"> </span><span style="color: green;">es</span><span style="color: silver;"> </span><span style="color: green;">verde</span>
<span style="color: silver;"> </span><span style="color: black;">glColor3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: navy;">0.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">0.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">1.0</span><span style="color: silver;"> </span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glVertex3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: silver;"> </span><span style="color: black;">);</span><span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">P3</span><span style="color: silver;"> </span><span style="color: green;">es</span><span style="color: silver;"> </span><span style="color: green;">azul</span>
<span style="color: silver;"> </span><span style="color: black;">glColor3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: navy;">1.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">0.0</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: navy;">1.0</span><span style="color: silver;"> </span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">glVertex3f</span><span style="color: black;">(</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: black;">,</span><span style="color: silver;"> </span><span style="color: black;">-</span><span style="color: navy;">0.5</span><span style="color: silver;"> </span><span style="color: black;">);</span><span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">P4</span><span style="color: silver;"> </span><span style="color: green;">es</span><span style="color: silver;"> </span><span style="color: green;">morado</span>
<span style="color: silver;"> </span><span style="color: black;">glEnd</span><span style="color: black;">();</span>
<span style="color: silver;"> </span><span style="color: black;">glFlush</span><span style="color: black;">();</span>
<span style="color: silver;"> </span><span style="color: olive;">this</span><span style="color: black;">-></span><span style="color: black;">makeCurrent</span><span style="color: black;">();</span>
<span style="color: black;">}</span>
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"> Con esto ya tenemos lista nuestra clase. Ahora vamos a usarla en nuesta ventana.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">En nuestra ventana(formulario) insertamos un widget.</span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-7iTfDVXYuHk/WBgQqGtFKQI/AAAAAAAAESE/uHIZqppXvMIt4i8MRSad2Aaix42vp7dFwCLcB/s1600/2016-10-31_19-09-09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="472" src="https://4.bp.blogspot.com/-7iTfDVXYuHk/WBgQqGtFKQI/AAAAAAAAESE/uHIZqppXvMIt4i8MRSad2Aaix42vp7dFwCLcB/s640/2016-10-31_19-09-09.jpg" width="640" /></a></div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"> </span>
<span style="color: black;"> una vez agregado el widget hacemos clic derecho sobre el y elegimos Promote to...</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"> </span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-m6tptOHP6rU/WBgRj3-P5wI/AAAAAAAAESQ/ZgS2IUPdpc4RINan-qHMTC22K0CiBfE4ACLcB/s1600/2016-10-31_19-10-07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-m6tptOHP6rU/WBgRj3-P5wI/AAAAAAAAESQ/ZgS2IUPdpc4RINan-qHMTC22K0CiBfE4ACLcB/s320/2016-10-31_19-10-07.jpg" width="167" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-pXZhZBKOVAY/WBgTKNc-eSI/AAAAAAAAESc/ZbP2pDeuLCg0p2C3v_Lmp4NijqrSIXp3wCLcB/s1600/2016-10-31_19-10-19.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://2.bp.blogspot.com/-pXZhZBKOVAY/WBgTKNc-eSI/AAAAAAAAESc/ZbP2pDeuLCg0p2C3v_Lmp4NijqrSIXp3wCLcB/s320/2016-10-31_19-10-19.jpg" width="320" /></a></div>
<br />
<br />
En promoted class name ingresamos el nombre de la clase que habiamos creado.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-zx_xZ0vgzQA/WBgTWOhygwI/AAAAAAAAESg/FV-_8G8_TOoI06x0v6HFP5nVusUabbdaACLcB/s1600/2016-10-31_19-11-02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://1.bp.blogspot.com/-zx_xZ0vgzQA/WBgTWOhygwI/AAAAAAAAESg/FV-_8G8_TOoI06x0v6HFP5nVusUabbdaACLcB/s320/2016-10-31_19-11-02.jpg" width="320" /></a></div>
<br />
<br />
<br />
<br />
Luego le damos clic en Add.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-34mq7l90xQU/WBgTgbaVUZI/AAAAAAAAESk/JUJqwvw4z9sOowwlM1YOrgomdyh3Q1w-ACLcB/s1600/2016-10-31_19-11-13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://4.bp.blogspot.com/-34mq7l90xQU/WBgTgbaVUZI/AAAAAAAAESk/JUJqwvw4z9sOowwlM1YOrgomdyh3Q1w-ACLcB/s320/2016-10-31_19-11-13.jpg" width="320" /></a></div>
<br />
Finalmente click en Promote.<br />
<br />
Ejecutamos el proyecto y este es el resultado.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-18C66WmzVp0/WBgTzfwzrCI/AAAAAAAAESo/XYQpa8DJLyUAaRLJxSrI5w5zYIWXhg8cwCLcB/s1600/2016-10-31_23-01-24.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="293" src="https://2.bp.blogspot.com/-18C66WmzVp0/WBgTzfwzrCI/AAAAAAAAESo/XYQpa8DJLyUAaRLJxSrI5w5zYIWXhg8cwCLcB/s400/2016-10-31_23-01-24.jpg" width="400" /></a></div>
<br />
<br />
Aqui podran descargar el codigo fuente de este ejemplo y el ejemplo del cubo.<br />
<br />
<div style="text-align: center;">
<span style="font-size: x-large;"><a href="https://drive.google.com/file/d/0BxWr_e1z6MQfTHQybG1LalBFUHc/view?usp=sharing" target="_blank">Descargar</a></span></div>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-54222724013836590242016-10-18T17:57:00.002-05:002016-10-18T17:57:33.649-05:00Qt - Graficos en 2D QPainted<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-WDfteesaWDw/WAaQyxA7yuI/AAAAAAAAEPQ/ISWAWV3O3fk-322TE1SiVYR__NkU5bZPgCLcB/s1600/transformations-example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="116" src="https://1.bp.blogspot.com/-WDfteesaWDw/WAaQyxA7yuI/AAAAAAAAEPQ/ISWAWV3O3fk-322TE1SiVYR__NkU5bZPgCLcB/s320/transformations-example.png" width="320" /></a></div>
<br />
Ahora vamos a ver un ejemplo sencillo de como crear graficos 2D en Qt. Para esto haremos uso de la clase QPainter y del evento paintEvent.<br />
<br />
Para esto ya debemos tener un proyecto vacio creado y dentro del proyecto una ventana.<br />
<br />
Dentro del archivo de cabecera incluimos las siguientes lineas de código.<br />
<br />
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QPaintEvent></span>//para el evento<br />
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QPainter>//para el pintor con el cual crearemos nuestros gráficos.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;">Entonces la parte superior de nuestro archivo quedaria así.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: navy;">#ifndef</span><span style="color: silver;"> </span>MAINWINDOW_H
<span style="color: navy;">#define</span><span style="color: silver;"> </span><span style="color: navy;">MAINWINDOW_H</span>
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QMainWindow></span>
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QPaintEvent></span>
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;"><QPainter></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: green;"> </span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: green;"> </span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: green;"><span style="color: black;"><span style="color: green;"><span style="color: black;">En la seccion de protected</span> </span> colocamos </span></span>
<span style="color: silver;"> </span><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">paintEvent</span><span style="color: black;">(</span><span style="color: purple;">QPaintEvent</span><span style="color: silver;"> </span><span style="color: black;">*)</span><span style="color: silver;"> </span><span style="color: black;">;//para implementar la creación</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> de los gráficos dentro del evento.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: olive;">class</span><span style="color: silver;"> </span><span style="color: purple;">MainWindow</span><span style="color: silver;"> </span><span style="color: black;">:</span><span style="color: silver;"> </span><span style="color: olive;">public</span><span style="color: silver;"> </span><span style="color: purple;">QMainWindow</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span><span style="color: navy;">Q_OBJECT</span>
<span style="color: olive;">public</span><span style="color: black;">:</span>
<span style="color: silver;"> </span><span style="color: olive;">explicit</span><span style="color: silver;"> </span><span style="color: purple;">MainWindow</span><span style="color: black;">(</span><span style="color: purple;">QWidget</span><span style="color: silver;"> </span><span style="color: black;">*</span>parent<span style="color: silver;"> </span><span style="color: black;">=</span><span style="color: silver;"> </span><span style="color: navy;">0</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">~</span><span style="color: black; font-style: italic;">MainWindow</span><span style="color: black;">();</span>
<span style="color: olive;">private</span><span style="color: black;">:</span>
<span style="color: silver;"> </span><span style="color: purple;">Ui</span><span style="color: black;">::</span><span style="color: purple;">MainWindow</span><span style="color: silver;"> </span><span style="color: black;">*</span><span style="color: maroon;">ui</span><span style="color: black;">;</span>
<span style="color: silver;"> </span><span style="color: black;"></span>
<span style="color: olive;">protected</span><span style="color: black;">:</span>
<span style="color: silver;"> </span><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: black; font-style: italic;">paintEvent</span><span style="color: black;">(</span><span style="color: purple;">QPaintEvent</span><span style="color: silver;"> </span><span style="color: black;">*)</span><span style="color: silver;"> </span><span style="color: black;">;</span>
<span style="color: black;"></span>
<span style="color: black;">};</span>
Ahora vamos a nuestro archivo cpp a implementar dentro del evento paint.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">MainWindow</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">paintEvent</span><span style="color: black;">(</span><span style="color: purple;">QPaintEvent</span><span style="color: silver;"> </span><span style="color: black;">*)</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span><span style="color: green;"></span>
<span style="color: silver;"> </span><span style="color: purple;">QPainter</span><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">(</span><span style="color: olive;">this</span><span style="color: black;">);</span><span style="color: silver;"> </span><span style="color: black;"></span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">translate</span><span style="color: black;">(</span><span style="color: navy;">300</span><span style="color: black;">,</span><span style="color: navy;">300</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;"></span>
<span style="color: silver;"> </span><span style="color: green;"></span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(</span><span style="color: navy;">0</span><span style="color: black;">,</span><span style="color: navy;">0</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">);</span>
<span style="color: black;">}</span> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><b><span style="color: black;">Explicacion del código.</span></b></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">QPainter pintor(this).</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">Aqui tenemos nuestro objeto pintor que recibe en su constructor </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">el dispositivo en donde se va a realizar el pintado.En este caso será la misma </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">ventana, por eso le pasamos "this", haciendo referencia a esta misma clase.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">translate</span><span style="color: black;">(</span><span style="color: navy;">300</span><span style="color: black;">,</span><span style="color: navy;">300</span><span style="color: black;">);</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">Aqui le indicamos que se realizará una transformación, concretamenta una </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">traslacion de 300 unidades en x y 300 unidades en y.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span><span style="color: black;"><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(</span><span style="color: navy;">0</span><span style="color: black;">,</span><span style="color: navy;">0</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">);</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Aqui le indicamos que dibuje un rectangulo en donde:</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span>
<span style="color: black;"> </span><span style="color: black;"><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(x</span><span style="color: navy;"></span><span style="color: black;">,</span><span style="color: navy;">y</span><span style="color: black;">,ancho</span><span style="color: navy;"></span><span style="color: black;">,alto</span><span style="color: navy;"></span><span style="color: black;">);</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Si ejecutamos el codigo veremos lo siguiente.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> <div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-D8JC5ax-iUE/WAaUe0OayjI/AAAAAAAAEPY/uUJ-ygyq6Ukp1XnmNQDNeVvQ_IR2M4x5gCLcB/s1600/pintor01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="197" src="https://3.bp.blogspot.com/-D8JC5ax-iUE/WAaUe0OayjI/AAAAAAAAEPY/uUJ-ygyq6Ukp1XnmNQDNeVvQ_IR2M4x5gCLcB/s320/pintor01.jpg" width="320" /></a></div>
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Si comentamos la linea </span></span><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">translate</span><span style="color: black;">(</span><span style="color: navy;">300</span><span style="color: black;">,</span><span style="color: navy;">300</span><span style="color: black;">). Entonces se veria así.</span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: black;"> </span></span></span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-rAQFXY3UKYY/WAaUmrVIXhI/AAAAAAAAEPc/Xg1SAuNii_4BAW2VkWhq3y7gmCWOf2RWwCLcB/s1600/pintor02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="292" src="https://1.bp.blogspot.com/-rAQFXY3UKYY/WAaUmrVIXhI/AAAAAAAAEPc/Xg1SAuNii_4BAW2VkWhq3y7gmCWOf2RWwCLcB/s320/pintor02.jpg" width="320" /></a></div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: black;"> </span></span></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: black;"> </span></span> Esto se debe a que por defecto el tamaña y las coordenas de ventana </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">de pintado es el mismo que la ventana que la contiene(No confundir). Para</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">esto pueden revisar mas a fondo sobre viewport y window(esto referente a graficos</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> por computadora). Entonces el origen (0,0) estaria en la ezquina supeior</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> izquierda(desde mi perspectiva)</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-6-XdaF1ICnw/WAaVqIuphmI/AAAAAAAAEPg/wMZZONx1JVYPYXiQjX0h-qZ4GkBubdCBgCLcB/s1600/painted3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-6-XdaF1ICnw/WAaVqIuphmI/AAAAAAAAEPg/wMZZONx1JVYPYXiQjX0h-qZ4GkBubdCBgCLcB/s320/painted3.png" width="320" /></a></div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Con lo cual para traslador un objeto tanto dentro de la parte visible, </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">tanto "x" como "y" deberan ser positivos.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><b><span style="color: black;"><span style="color: black;">¿Que pasará si a la figura que tenemos le agregamos una rotación?</span></span></b></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Empezaremos con 10 grados, luego con 20 y finalmente con 45.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Comentamos la linea de traslacion y deberia quedar así.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">MainWindow</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">paintEvent</span><span style="color: black;">(</span><span style="color: purple;">QPaintEvent</span><span style="color: silver;"> </span><span style="color: black;">*)</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span><span style="color: purple;">QPainter</span><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">(</span><span style="color: olive;">this</span><span style="color: black;">);</span><span style="color: silver;"> </span>
<span style="color: silver;"> </span></span><span style="color: black;"><span style="color: black;"><span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">pintor.translate(300,300);</span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">rotate</span><span style="color: black;">(10</span><span style="color: black;">);</span></span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(</span><span style="color: navy;">0</span><span style="color: black;">,</span><span style="color: navy;">0</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">);</span>
<span style="color: black;">}</span> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: black;">Resultado de 10 grados.</span></span><div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-fTNhXEDzRS8/WAaYG46nANI/AAAAAAAAEPo/cx7pKb7FJfcyy-S9kyCNJ2RajJtj9-GhgCLcB/s1600/2016-10-18_16-45-32.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-fTNhXEDzRS8/WAaYG46nANI/AAAAAAAAEPo/cx7pKb7FJfcyy-S9kyCNJ2RajJtj9-GhgCLcB/s1600/2016-10-18_16-45-32.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
</span></span><pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Resultado de 20 grados</span></span></pre>
</pre>
<span style="color: black;"><span style="color: black;">
</span></span><span style="color: black;"><span style="color: black;"><div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-1U_yqPGUJws/WAaYS9p_IHI/AAAAAAAAEPs/xZFIqTsXQToktuwyyang-DCKqSOQcTbfgCLcB/s1600/2016-10-18_16-46-21.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-1U_yqPGUJws/WAaYS9p_IHI/AAAAAAAAEPs/xZFIqTsXQToktuwyyang-DCKqSOQcTbfgCLcB/s1600/2016-10-18_16-46-21.jpg" /> </a></div>
</span></span><pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<span style="color: black;"><span style="color: black;"><div class="separator" style="clear: both; text-align: center;">
</div>
Resultado de 45</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-1ImF5jgAN3Q/WAabuJ32l8I/AAAAAAAAEP0/djRIMHnL-XUrY4r-5yaW5aHlYo1qhi4MACLcB/s1600/2016-10-18_17-00-57.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-1ImF5jgAN3Q/WAabuJ32l8I/AAAAAAAAEP0/djRIMHnL-XUrY4r-5yaW5aHlYo1qhi4MACLcB/s1600/2016-10-18_17-00-57.jpg" /></a></div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span><pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> Como vemos esta rotando segun la coordenado (0,0). No esta rotando desde su</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> centro.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Si al momento de crear el rectangulo cambiamos las coordenadas por 300,300.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span></span></pre>
<span style="color: black;"><span style="color: black;"><span style="color: black;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">MainWindow</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">paintEvent</span><span style="color: black;">(</span><span style="color: purple;">QPaintEvent</span><span style="color: silver;"> </span><span style="color: black;">*)</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span><span style="color: purple;">QPainter</span><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">(</span><span style="color: olive;">this</span><span style="color: black;">);</span><span style="color: silver;"> </span>
<span style="color: silver;"> </span></span><span style="color: black;"><span style="color: black;"><span style="color: silver;"> </span><span style="color: green;">//</span><span style="color: silver;"> </span><span style="color: green;">pintor.translate(300,300);</span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">rotate</span><span style="color: black;">(45</span><span style="color: black;">);</span></span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(</span><span style="color: navy;">300</span><span style="color: black;">,30</span><span style="color: navy;">0</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">);</span>
<span style="color: black;">}</span> </span>
</span></span><span style="color: black;"><span style="color: black;"> </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> Resultado en 45 grados </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"><div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-vxo4LgeZF4s/WAacdmFwYTI/AAAAAAAAEP4/MifrshRY5UUJIznOIZe4fPeqOAJZon3VQCLcB/s1600/2016-10-18_17-03-50.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-vxo4LgeZF4s/WAacdmFwYTI/AAAAAAAAEP4/MifrshRY5UUJIznOIZe4fPeqOAJZon3VQCLcB/s320/2016-10-18_17-03-50.jpg" width="189" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Como vemos tiene el mismo angulo de rotacion, pero está mas abajo. Esto </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">ocurre porque toma como centro de giro el eje de coordenadas (0,0).</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Si quisieramos que rote segun su centro de masa, entonces deberiamos ubicar </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">su centro de masa en las coordenadas (0,0). Esto se puede hacer de dos formar.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"><b>Forma 1: </b></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Cambiando los parametros de la ventana del pintor y colocando desde su creacion </span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">en el origen.</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
<span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">setWindow</span><span style="color: black;">(-</span><span style="color: navy;">50</span><span style="color: black;">,-</span><span style="color: navy;">50</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">);</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">El -50,-50 ahora sera la esquina superior izquierda y la ventana ahora</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> mide 100 de alto, por 100 de ancho.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">Aqui tenemos un ejemplo en donde se estipuló que la esquina superior izquierda es </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">la coordenada (-50,-50) y como tiene 100 de ancho por 100 de alto, la coordenada</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">de la esquina inferior derecha es (+50,+50).</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> <div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-pIQOyPJ46so/WAadsCzoqFI/AAAAAAAAEP8/5gdsD-pzDRw8TJaXOEmcrkpVOY1vb8_XgCLcB/s1600/painted2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-pIQOyPJ46so/WAadsCzoqFI/AAAAAAAAEP8/5gdsD-pzDRw8TJaXOEmcrkpVOY1vb8_XgCLcB/s320/painted2.png" width="320" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
</span><span style="color: black;"><div class="separator" style="clear: both; text-align: center;">
<br /></div>
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"></span><span style="color: black;">
</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> </span> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> Si se desea ubicar el rectangulo en el centro (coodenada 0,0), debo restar a la </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">coordena "X" menos la mitad del largo y a la coordenada "Y" menos la mitad del alto. </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">Es decir,Si mi rectangulo será de 10x10, entonces la mitada es 5 y 0 - 5 es igual </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">a -5 para "X" y para "Y" seria igual a -5. </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(-</span><span style="color: navy;">5</span><span style="color: black;">,-</span><span style="color: navy;">5</span><span style="color: black;">,</span><span style="color: navy;">10</span><span style="color: black;">,</span><span style="color: navy;">10</span><span style="color: black;">);</span> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"> </pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"> </pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-N4zVzn7clXw/WAahEYhcv0I/AAAAAAAAEQI/MTy3AIIr59cajniksKcAoz_OKUD5voF7ACLcB/s1600/2016-10-18_17-23-16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://1.bp.blogspot.com/-N4zVzn7clXw/WAahEYhcv0I/AAAAAAAAEQI/MTy3AIIr59cajniksKcAoz_OKUD5voF7ACLcB/s320/2016-10-18_17-23-16.jpg" width="320" /></a></div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">Ahora aplicamos la rotación.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">MainWindow</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">paintEvent</span><span style="color: black;">(</span><span style="color: purple;">QPaintEvent</span><span style="color: silver;"> </span><span style="color: black;">*)</span>
<span style="color: black;">{</span>
<span style="color: green;"></span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span><span style="color: purple;">QPainter</span><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">(</span><span style="color: olive;">this</span><span style="color: black;">);</span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">setWindow</span><span style="color: black;">(-</span><span style="color: navy;">50</span><span style="color: black;">,-</span><span style="color: navy;">50</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">);</span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span></span><span style="color: black;"><span style="color: silver;"><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">rotate</span><span style="color: black;">(</span><span style="color: maroon;">45</span><span style="color: black;">);</span></span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(-</span><span style="color: navy;">5</span><span style="color: black;">,-</span><span style="color: navy;">5</span><span style="color: black;">,</span><span style="color: navy;">10</span><span style="color: black;">,</span><span style="color: navy;">10</span><span style="color: black;">);</span>
<span style="color: silver;"> </span>
<span style="color: black;">}</span> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-8VidQcm0l88/WAajiJIXmSI/AAAAAAAAEQU/cyYSGIcux7EpsfGupSUeFQ1yFdS7E5IGgCLcB/s1600/2016-10-18_17-33-54.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://3.bp.blogspot.com/-8VidQcm0l88/WAajiJIXmSI/AAAAAAAAEQU/cyYSGIcux7EpsfGupSUeFQ1yFdS7E5IGgCLcB/s320/2016-10-18_17-33-54.jpg" width="320" /></a></div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">Forma 2:</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">Trasladando al origen, luego rotar y nuevamente trasladar a la posicion inicial.</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
<span style="color: olive;">void</span><span style="color: silver;"> </span><span style="color: purple;">MainWindow</span><span style="color: black;">::</span><span style="color: black; font-style: italic;">paintEvent</span><span style="color: black;">(</span><span style="color: purple;">QPaintEvent</span><span style="color: silver;"> </span><span style="color: black;">*)</span>
<span style="color: black;">{</span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span><span style="color: purple;">QPainter</span><span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">(</span><span style="color: olive;">this</span><span style="color: black;">);</span>
<span style="color: silver;"> </span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">translate</span><span style="color: black;">(</span><span style="color: navy;">150</span><span style="color: black;">,</span><span style="color: navy;">150</span><span style="color: black;">);// se posiciona en la ubicacion inicial</span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">rotate</span><span style="color: black;">(</span><span style="color: maroon;">angulo</span><span style="color: black;">);//tercero rota</span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">translate</span><span style="color: black;">(-</span><span style="color: navy;">150</span><span style="color: black;">,-</span><span style="color: navy;">150</span><span style="color: black;">);//segundo se traslada al origen</span>
<span style="color: silver;"> </span><span style="color: black;">pintor</span><span style="color: black;">.</span><span style="color: black;">drawRect</span><span style="color: black;">(</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">,</span><span style="color: navy;">100</span><span style="color: black;">);</span>//primero se dibuja
<span style="color: silver;"> </span>
<span style="color: black;">}</span>
</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">Como vemos esto opera como una pila. La ultima instrucción es la primera </pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">en realizarse.</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">Resultado.</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-tZDiivRSg00/WAaneqlDHvI/AAAAAAAAEQc/-TFqrvbEfg0MgfOWEB3H2wmQ-HHU8UBuwCLcB/s1600/2016-10-18_17-50-55.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-tZDiivRSg00/WAaneqlDHvI/AAAAAAAAEQc/-TFqrvbEfg0MgfOWEB3H2wmQ-HHU8UBuwCLcB/s1600/2016-10-18_17-50-55.jpg" /></a></div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<div style="text-align: center;">
<pre style="margin: 0px; text-indent: 0px;"><span style="font-size: x-large;"><a href="https://drive.google.com/file/d/0BxWr_e1z6MQfd1l4QVBCQ19uVm8/view?usp=sharing" target="_blank">Descargar código fuente</a></span></pre>
<pre style="margin: 0px; text-indent: 0px;"><span style="font-size: x-large;"> </span></pre>
<pre style="margin: 0px; text-indent: 0px;"><span style="font-size: x-large;"> </span></pre>
</div>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;">Para profundizar mas sobre gráficos por computadora,</span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"><span style="color: black;"> les recomiendo el siguiente libro <a href="http://www.infotutoriales.info/2016/09/graficos-por-computadora-con-opengl.html" target="_blank">graficos por computadora con opengl</a></span></span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">
</span></pre>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0tag:blogger.com,1999:blog-2375799840871253497.post-17091188109303570202016-10-17T20:06:00.001-05:002016-10-17T20:06:30.306-05:00Qt - Expresiones Regulares - Validar LineEdit Solo numeros<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-lKkA9CTYUhE/WAVyzb2vgkI/AAAAAAAAEPA/UjUHqXdzsDUhkFj7pDqiEIY4p59voaMeQCLcB/s1600/qt_expresiones_regulares.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="354" src="https://4.bp.blogspot.com/-lKkA9CTYUhE/WAVyzb2vgkI/AAAAAAAAEPA/UjUHqXdzsDUhkFj7pDqiEIY4p59voaMeQCLcB/s640/qt_expresiones_regulares.jpg" width="640" /></a></div>
Para validar un lineEdit usaremos la clase QRegExp.<br />
En nuestra ventana debemos tener un lineEdit agregado.<br />
<br />
<span style="color: silver;"> </span><span style="color: purple;">QRegExp</span><span style="color: silver;"> </span><span style="color: black;">expresion</span><span style="color: black;">(</span><span style="color: green;">"[0-9]{1,8}"</span><span style="color: black;">); </span>
<br />
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: maroon;">ui</span><span style="color: black;">-></span><span style="color: maroon;">lineEdit</span><span style="color: black;">-></span><span style="color: black;">setValidator</span><span style="color: black;">(</span><span style="color: olive;">new</span><span style="color: silver;"> </span><span style="color: purple;">QRegExpValidator</span><span style="color: black;">(</span><span style="color: black;">expresion</span><span style="color: black;">,</span><span style="color: olive;">this</span><span style="color: black;">));</span></pre>
<br />
Este código lo insertamos en el constructor de la ventana y despues de la sentencia setupUI;<br />
<br />
Deberia quedar así.<br />
<span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;">"mainwindow.h"</span>
<br />
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: navy;">#include</span><span style="color: silver;"> </span><span style="color: green;">"ui_mainwindow.h"</span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: purple;">MainWindow</span><span style="color: black;">::</span><span style="color: black;">MainWindow</span><span style="color: black;">(</span><span style="color: purple;">QWidget</span><span style="color: silver;"> </span><span style="color: black;">*</span><span style="color: black;">parent</span><span style="color: black;">)</span><span style="color: silver;"> </span><span style="color: black;">:</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: purple;">QMainWindow</span><span style="color: black;">(</span><span style="color: black;">parent</span><span style="color: black;">),</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: maroon;">ui</span><span style="color: black;">(</span><span style="color: olive;">new</span><span style="color: silver;"> </span><span style="color: purple;">Ui</span><span style="color: black;">::</span><span style="color: purple;">MainWindow</span><span style="color: black;">)</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">{</span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: maroon;">ui</span><span style="color: black;">-></span><span style="color: black;">setupUi</span><span style="color: black;">(</span><span style="color: olive;">this</span><span style="color: black;">);</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"></span><span style="color: black;">
</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: purple;">QRegExp</span><span style="color: silver;"> </span><span style="color: black;">expresion</span><span style="color: black;">(</span><span style="color: green;">"[0-9]{1,8}"</span><span style="color: black;">);</span></pre>
<br /><pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: maroon;">ui</span><span style="color: black;">-></span><span style="color: maroon;">lineEdit</span><span style="color: black;">-></span><span style="color: black;">setValidator</span><span style="color: black;">(</span><span style="color: olive;">new</span><span style="color: silver;"> </span><span style="color: purple;">QRegExpValidator</span><span style="color: black;">(</span><span style="color: black;">expresion</span><span style="color: black;">,</span><span style="color: olive;">this</span><span style="color: black;">));</span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">}</span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<span style="color: purple;">MainWindow</span><span style="color: black;">::~</span><span style="color: black; font-style: italic;">MainWindow</span><span style="color: black;">()</span>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">{</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: olive;">delete</span><span style="color: silver;"> </span><span style="color: maroon;">ui</span><span style="color: black;">;</span></pre>
<pre style="-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">}</span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">Ejecutamos la aplicacion y miren lo que sucede.</pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">
</pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;">Si desean que solo admita letras pueden usar la siguiente linea de código.</pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: silver;"> </span><span style="color: purple;">QRegExp</span><span style="color: silver;"> </span><span style="color: black;">expresion</span><span style="color: black;">(</span><span style="color: green;">"[A-Z]{1,8}"</span><span style="color: black;">); </span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;">En donde solo admitirá hasta 8 caracteres.</span></pre>
<pre style="-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;"><span style="color: black;"> </span></pre>
</div>
lexblashttp://www.blogger.com/profile/11263911018750673208noreply@blogger.com0