Forum > Spanish

Redimensionar y reposicionar ventanas con Lazarus

(1/2) > >>

mgayo:
Hola:
Necesito crear una aplicación que me permita redimensionar y reposicionar ventanas. No solo las de mi aplicación sino las del resto de aplicaciones que estén abiertas en ese momento. Sería sobre Windows.
La idea sería sacar un listado de todas esas ventanas, elegir aquella que quiero manipular y después redimensionarla o reposicionarla.
He hecho alguna búsqueda por Internet pero redimensionar, Windows, resize ... son palabras tan generales que no he encontrado nada útil.
¿Alguna sugerencia de por dónde tengo que empezar a tirar del hilo?
Gracias.

Edson:
Hola.

Nunca lo he intentado desde Lazarus, pero recuerdo que para Windows tendrías que hacer uso de las llamadas a las API de windows. Algo como SetWindowPos() y similares, que deben ser accesibles desde Lazarus.

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos

Todo esto es a muy bajo nivel. No conozco otra forma.

mosquito:
Usando Linux uso 'xprop' que me devuelve el 'WM_CLASS' de una ventana, con este dato puedo trastear con la ventana hasta donde me deja el entorno gráfico.

Aunque no tengo mucha idea de Windows, juraría que lo que necesitas es recibir es el HWND, debe ser como el identificador de la ventana (lo recuerdo de usar AutoHotkey).

Si consigues disparar llamadas a la winapi, podrías usar estas  funciones, aunque ni idea de su estructura interna:

BeginDeferWindowPos()
DeferWindowPos()
EndDeferWindowPos()
SetWindowPlacement

Estas están 'deprecated' por no evitar flick.
SetWindowPos()
MoveWindow()
AdjustWindowRectEx()

Para recibir el listado de todas las ventanas abiertas quizás alguna de estas, pero no te lo puedo asegurar:

GetWindowText
GetClassName

Al menos en Linux a veces hay problema a la hora de identificar la WM_CLASS si no conoces el nombre exacto (Case Sensitive).

Suponiendo que GetClassName haga algo similar, yo usaría
getclassname('google-chrome') OR getclassname('Google-Chrome').

Pero a ver si contesta algún experto, porque yo, ni idea.
 

RayoGlauco:
Hola,

Yo tengo este código que usé hace tiempo, para localizar los handles de todas las ventanas.


--- 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";}};} ---uses  Windows;  procedure BuscarVentanas;var  NextHandle: Hwnd;begin  // Buscar handle de la primera ventana  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);  while (NextHandle > 0) do  begin    // hacer lo que sea con NextHandle     ...    // buscar la siguiente ventana    NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);   end;end;

mgayo:
Muchas gracias a todos por las respuestas.
Me proporcionan el punto de inicio para tratar de encontrar la solución.
Ahora no tengo tiempo de probar, pero lo intentaré.
Un saludo.

Navigation

[0] Message Index

[#] Next page

Go to full version