PDA

Ver la Versión Completa : Forms con las esquinas redondeadas


CORBATIN
12-09-2003, 01:29:40
Hola a todos, he buscado en los foros y en páginas de componentes alguno para redondear los bordes de un form, pero no he encontrado nada. Si he visto varios códigos que pintan el form de varias formas o lo hacen tranparente pero si eso también sirve para hacer lo que pido no tengo ni idea como se hace.

Agradecería cualquier información sobre el tema, gracias por vuestra ayuda.

marcoszorrilla
12-09-2003, 08:02:45
Aquí tienes un ejemplo:


procedure TForm1.FormCreate(Sender: TObject);
var
f: HRGN;
begin
Form1.Borderstyle := bsNone;
f := CreateRoundRectRgn(
0, // x-coordinate of the region's upper-left corner
0, // y-coordinate of the region's upper-left corner
clientwidth, // x-coordinate of the region's lower-right corner
clientheight, // y-coordinate of the region's lower-right corner
40, // height of ellipse for rounded corners
40); // width of ellipse for rounded corners
SetWindowRgn(Handle,f,True);
end


Un Saludo.

CORBATIN
15-09-2003, 00:30:48
Ok gracias, aunque tendré que ver como se ajustan ahora los botones de cerrar, etc porque se los come al hacer el circulo, pero de todas formas gracias por tú ayuda.

DarkByte
15-09-2003, 15:06:02
Posteado originalmente por CORBATIN
tendré que ver como se ajustan ahora los botones de cerrar, etc

Si quiere puede usar sus propios botones:

Cerrar:
Application.Terminate;
Minimizar:
Application.Minimize;
Maximizar:
(No me acuerdo :D)


Espero que le sirva ;)

CORBATIN
17-09-2003, 14:44:12
¿Qué quieres decir con usar mis propios botones?.

DarkByte
17-09-2003, 20:42:12
Posteado originalmente por CORBATIN
¿Qué quieres decir con usar mis propios botones?.
·······Pues, en vez de usar la X y el _ de la barra de título de windows (cerrar, maximizar/restaurar y minimizar) usar los suyos propios, es decir, un botón, con el caption X (por ejemplo) para cerrar, otro con el caption _ para minimizar..., en caso de que las esquinas redondeadas no te dejen ver los de windows.

·······No se si me he explicado bien, pero ahí esta

CORBATIN
18-09-2003, 01:08:18
Ya te he entendido, pero entonces se debe imitar también la caption del form además de la diferencia de color con el resto del form, creo que eso supone bastante más trabajo.

Sí dispones de algún ejemplo tuyo te estaría muy agradecido que me lo enviaras, gracias.

iriber
19-09-2003, 15:59:17
Gente, quise usar el código para redondear las puntas del formulario pero mi compilador no reconoce los siguientes identificadores

HRGN
CreateRoundRectRgn
SetWindowRgn

en qué librería están?

saludos :)

delphi.com.ar
19-09-2003, 16:06:17
Tienes que utilizar la unit Windows

Saludos!

iriber
19-09-2003, 16:21:24
gracias por tu ayuda, ahora me surgió otro inconveniente:

tipos incompatibles -> HWND and QOpenScrollViewH

en esta función

SetWindowRgn(Handle,f,True);


donde f: HRGN;

saludos :)

delphi.com.ar
19-09-2003, 16:26:40
No se de dónde has sacado el QOpenScrollViewH...
¿Porqué no nos pasas tu código?

Saludos!

iriber
19-09-2003, 16:34:39
el codigo la saque de la sección de trucos, donde muestran cómo crear formularios con diferentes formas:


procedure TForm1.FormCreate(Sender: TObject);
var
hRgn: THandle;
begin
// Crear una zona eliptica
hRgn := CreateEllipticRgn(10, 10, Width - 20, Height - 20);
// poner la nueva region
SetWindowRgn(Handle, hRgn, False);
end;


cuando compilo me dice el error que te envié en el mensaje anterior

saludos :)

delphi.com.ar
19-09-2003, 16:41:41
El tema es que lo estas haciendo en un QForm... Tienes que tener mucho cuidado en usar WinApis aplicaciones CLX!

Saludos!

radge
04-07-2013, 09:42:13
Buenas , he usado este truco para redondear un formulario que tengo pero entonces pierdo el botón de "CERRAR" que me recomendais crearlo manualmente con un button ?

saludos

Chris
04-07-2013, 20:15:37
Buenas , he usado este truco para redondear un formulario que tengo pero entonces pierdo el botón de "CERRAR" que me recomendais crearlo manualmente con un button ?

saludos

Lo más fácil es que lo crees con un botón. De lo contrario tendrías que controlar lo que en la Windows API se conoce como "Non Client Area". Haciendo lo último obtendrías un trabajo más armónico ya que podrás pintar y decorar el título de las ventanas a cómo más te guste y haga juego con tu aplicación.

Para controlar la Non Client Area, tendrás que controlor los siguientes eventos:

WM_NCHITTEST
WM_NCLBUTTONDOWN
WM_NCLBUTTONUP
WM_NCMOUSEMOVE
WM_NCPAINT, entre otros.


Talvez el siguiente ejemplo te puede ayudar http://www.bobpowell.net/NonClient2.aspx. Así te puedes dar una idea de lo que necesitas.

Saludos!