Forum > Spanish
Redimensionar y reposicionar ventanas con Lazarus
mgayo:
Ya me he puesto con el tema y con vuestra ayuda ha resultado fácil. Muchas gracias.
Ya consigo un listado de ventanas y puedo redimensionar la que quiero.
El problema es que el listado contiene cientos de ventanas pero solo me interesan las que se corresponden con las aplicaiones que hay abiertas. Tal y como está me obliga a recorrer infinidad de opciones en el listado y es muy incómodo.
He intentado buscar una manera de filtrar pero no la encuentro.
¿Alguna sugerencia de como puedo hacer ese filtrado?
Gracias.
RayoGlauco:
Tengo un par de pistas:
1) buscar la ventana propietaria de la que hemos encontrado (quizás recursivamente, hasta encontrar una que ya no tenga propietaria)
2) descartar las ventanas no visibles
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---// Hallar la ventana propietaria de otrahandlepropietario := GetWindow(handle, GW_OWNER); // devuelve 0 si no hay propietario // Saber si una ventana es visibleif IsWindowVisible(handle) then // ...
mgayo:
En primer lugar muchas gracias a todos los que habéis arrojado algo de luz en el tema.
He conseguido el propósito de aislar las ventanas de las aplicaciones pero no me parece una solución muy elegante y además no es portable. He usado una combinación de condiciones y al final he añadido la condición de parar al encontrar la ventana con título "Microsoft Text" que he observado que es la primera que corresponde al SO. A partir de esa, hay alguna otra del SO que no me interesa. Os pongo el código por si a alguien le interesa o puede sugerir alguna mejora:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- { Eliminamos las que tengan 0 píxeles de anchura o de altura } DwmGetWindowAttribute(hw,DWMWA_EXTENDED_FRAME_BOUNDS,@rect,sizeof(rect)); nula:=(rect.Bottom-rect.Top=0) or (rect.Right-rect.Left=0); Getwindowtext(hw, titulo, 255); final:=pos('Microsoft Text',titulo)=1; { Marca la ventana final } if IsWindowVisible(hW) and { que sea visible } ((getwindow(hw,GW_OWNER)=0) or form1.cb_hijas.checked) and { Que sea padre o estén habilitadas las hijas } (GetWindowTextLength(hw)>0) and { que el título no sea nulo } (pos('RedimensionaVentana',titulo)<>1) and { Elimina esta aplicación } not nula and { Que no tenga dimensiones nulas (ni altura ni anchura) } not final then { Elimina las ventanas iniciales del sistema operativo. (Esto es arbitrario) } begin inc(contvent); form1.listbox1.Items.Add(inttostr(contvent)+': '+inttostr(hW)+' --- '+titulo); end;
Navigation
[0] Message Index
[*] Previous page