Forum > Spanish

Redimensionar y reposicionar ventanas con Lazarus

<< < (2/2)

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

Go to full version