Ir al contenido



Foto

TRoundEdit, un TEdit con las esquinas redondas.


  • Por favor identifícate para responder
9 respuestas en este tema

#1 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.852 mensajes
  • LocationMadrid - España

Escrito 14 agosto 2010 - 12:20

TRoundEdit es un control derivado de TEdit con las esquinas redondeadas y un borde de un color seleccionable.

Las propiedades añadidas a TRoundEdit son las siguientes:

1.- sbRound: Un nuevo estilo de borde en la propiedad BorderStyle que redondea el Edit.
2.- BorderColor: El color del borde redondeado. Solo activo si BorderStyle = bsRound.
3.- BorderRadio: Radio de curvatura de las esquinas (0 a 12). Activo si BorderStyle = bsRound.

El efecto se consigue creando una región que esconda las esquinas y capturando el mensaje WM_NCPAINT para pintar el borde del color deseado.

La función de redondeo es privada, para uso interno de TRoundEdit:

delphi
  1. procedure TRoundEdit.SetRound(Value: boolean);
  2. var
  3.   Rgn: HRGN;
  4. begin
  5.   Rgn:= 0;
  6.   if Value then
  7.     Rgn := CreateRoundRectRgn(0, 0, Width+1, Height+1, FBorderRadio-2, FBorderRadio-2) ;
  8.   SetWindowRgn(Handle, Rgn, true);
  9.   DeleteObject(Rgn);
  10. end;

La función que responde al mensaje WM_NCPAINT:

delphi
  1. procedure TRoundEdit.WMNCPaint(var Message: TMessage);
  2. var
  3.   Brush: TBrush;
  4.   Pen: TPen;
  5.   DC: HDC;
  6.   Clip: integer;
  7. begin
  8.   if (BorderStyle <> bsRound) or not inherited Ctl3D then
  9.   begin
  10.     inherited;
  11.     exit;
  12.   end;
  13.  
  14.   DC:= GetWindowDC(Handle);
  15.   Brush:= TBrush.Create;
  16.   Pen:= TPen.Create;
  17.   Pen.Color:= BorderColor;
  18.   Brush.Color:= Color;
  19.  
  20.   ExcludeClipRect(DC, 4, 4, Width-4, Height-4);
  21.   Windows.SelectObject(DC, Brush.Handle);
  22.   Windows.SelectObject(DC, Pen.Handle);
  23.  
  24.   Windows.Rectangle(DC, 0, 0, Width, Height);
  25.   Brush.Style:= bsClear;
  26.   Windows.RoundRect(DC, 0, 0, Width, Height,  FBorderRadio, FBorderRadio);
  27.  
  28.   Windows.ReleaseDC(Handle, DC);
  29.   Brush.Destroy;
  30.   Pen.Destroy;
  31. end;


post-12294-0-31206200-1430954729.jpg

La instalación del componente se realiza manualmente desde el menú Component -> Install Component.

El código completo lo subo en el archivo adjunto.

Espero que os sea de utilidad.  :)




Saludos.

Archivos adjuntos


  • 1

#2 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 14 agosto 2010 - 01:43

Hola
Como siempre, impresionante. (y)
Gracias por el aporte maestro. (b)
Saludos
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.979 mensajes
  • LocationMéxico

Escrito 14 agosto 2010 - 09:19

Genial amigo, (y)

Salud OS
  • 0

#4 wilox

wilox

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 07 mayo 2012 - 10:20

:D Muy bueno, hasta ahora lo uso y esta bien chido....

Gracias amigo por el aporte.  (y)
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.852 mensajes
  • LocationMadrid - España

Escrito 06 mayo 2015 - 05:22

Repongo el archivo con el código en el primer mensaje del hilo, se perdió con la última mudanza.

 

 

Saludos.


  • 4

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.940 mensajes
  • LocationMéxico

Escrito 07 mayo 2015 - 01:22

Gracias por la actualización amigo. Saludos.


  • 0

#7 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.852 mensajes
  • LocationMadrid - España

Escrito 07 mayo 2015 - 01:45

Gracias por la actualización amigo. Saludos.


En realidad no es una actualización, sino reponer el archivo. Tras la mudanza del motor del foro  los archivos comprimidos subidos con extensiones distintas a zip se han perdido y he repuesto algunos en distintos temas. 27.gif

 

Saludos.


  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 07 mayo 2015 - 02:25

Repongo el archivo con el código en el primer mensaje del hilo, se perdió con la última mudanza.

 

 

Saludos.

 

Maestro muchas gracias por tu compromiso con nuestra comunidad.

 

Un abrazo.


  • 0

#9 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 24 mayo 2015 - 09:49

Excelente. Sobre todo por el nivel de programación.

Yo hace unos años creé un grupo de controles similares. Precisamante es el de edición al que no modifiqué. :tongue:

Aun los tengo guardados y "traducidos" a Lazarus. Aquí me encontré con un problema con los arreglos dinámicos (que uso para cosas que no vienen al caso aquí) pero lo solucioné gracias a un foro. Creo que el mismo de Lazarus.

 

Saludos


  • 0

#10 oscargvh

oscargvh

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 02 octubre 2019 - 11:13

Saludos a todos

 

CRAM lo podras compartir para Lazarus.

 

Se agradece.


  • 0