Ir al contenido


Foto

Existe un componente Edit con las esquinas redondas?


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

#1 romfrost13

romfrost13

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 07 agosto 2010 - 04:04

Como este de la imagen, incluso que se pueda colorear el bordo al foco

asi como este de la imagen:
Imagen Enviada

si existe en que suite se encuentra o como hago ese efecto, me gustaria que fuera como el de la imgen
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.074 mensajes
  • LocationMadrid - España

Escrito 07 agosto 2010 - 10:00

No existe en el entorno de delphi o Builer, a no ser que terceros lo tengan hecho...
Visita webs de controles...

Nada te impide hacerlo tu mismo. En caso de que te animes comienza estudiando el mensaje NM_CUSTOMDRAW, que es enviado por los controles tipo "common controls" para notificar a su parent cuando van a realizar procesos de dibujado de si mismos.

Saludos.
  • 0

#3 romfrost13

romfrost13

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 07 agosto 2010 - 11:28

No existe en el entorno de delphi o Builer, a no ser que terceros lo tengan hecho...
Visita webs de controles...

Nada te impide hacerlo tu mismo. En caso de que te animes comienza estudiando el mensaje NM_CUSTOMDRAW, que es enviado por los controles tipo "common controls" para notificar a su parent cuando van a realizar procesos de dibujado de si mismos.

Saludos.


Pues e estado buscando, lamentablemente no conozco todos los distribuidores de componentes para delphi que existen, e probado con los tms, los bergsoft, los alpha, en estos momento estoy bajando unos demos de los suipack.

Si no tengo otra opcion vere el tema de hacerlos yo mismo, por lo pronto estoy buscando informes, quizas alguien los vio o uso en algun momento.
  • 0

#4 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 07 agosto 2010 - 12:24

Claro que puedes hacerlo por código por ejemplo:




delphi
  1. procedure Redondear(Control: TWinControl) ;
  2. var
  3.   R: TRect;
  4. Rgn: HRGN;
  5. begin
  6.   with Control do
  7.   begin
  8.     R := ClientRect;
  9.     rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20) ;
  10.     Perform(EM_GETRECT, 0, lParam(@r)) ;
  11.     InflateRect(r, - 4, - 4) ;
  12.     Perform(EM_SETRECTNP, 0, lParam(@r)) ;
  13.     SetWindowRgn(Handle, rgn, True) ;
  14.     Invalidate;
  15.   end;
  16. end;



Lo pones en el código aparte luego para usarlo solo tienes que ir a el evento create del form

y escribir Redondear(edit1); eso es un ejemplo osea Redondear y entre parentesis el componente que quieras .

si no lo quieres muy redondeado bájale el inflate a menos -2 o el que prefieras y consideres más adecuado.
  • 0

#5 romfrost13

romfrost13

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 07 agosto 2010 - 01:12

Claro que puedes hacerlo por código por ejemplo:




delphi
  1. procedure Redondear(Control: TWinControl) ;
  2. var
  3. R: TRect;
  4. Rgn: HRGN;
  5. begin
  6. with Control do
  7. begin
  8. R := ClientRect;
  9. rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20) ;
  10. Perform(EM_GETRECT, 0, lParam(@r)) ;
  11. InflateRect(r, - 4, - 4) ;
  12. Perform(EM_SETRECTNP, 0, lParam(@r)) ;
  13. SetWindowRgn(Handle, rgn, True) ;
  14. Invalidate;
  15. end;
  16. end;



Lo pones en el código aparte luego para usarlo solo tienes que ir a el evento create del form

y escribir Redondear(edit1); eso es un ejemplo osea Redondear y entre parentesis el componente que quieras .

si no lo quieres muy redondeado bájale el inflate a menos -2 o el que prefieras y consideres más adecuado.


probe el codigo que pusiste alli pero el efecto no es el deseado, no se ve muy bien que digamos.
  • 0

#6 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 07 agosto 2010 - 02:03



delphi
  1. procedure Redondear(Control: TWinControl) ;
  2. var
  3. R: TRect;
  4. Rgn: HRGN;
  5. begin
  6. with Control do
  7. begin
  8. R := ClientRect;
  9. rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 4, 4) ;
  10. Perform(EM_GETRECT, 0, lParam(@r)) ;
  11. InflateRect(r, -4, -4) ;
  12. Perform(EM_SETRECTNP, 0, lParam(@r)) ;
  13. SetWindowRgn(Handle, rgn, True) ;
  14. Invalidate;



Intenta con esto cambie algo a ver que pasa y me dices como se ve el efecto. utiliza el mismo procedimiento con el edit en create ya sabes que hacer.
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 agosto 2010 - 02:44

Hola

Como este de la imagen, incluso que se pueda colorear el bordo al foco

asi como este de la imagen:
Imagen Enviada

si existe en que suite se encuentra o como hago ese efecto, me gustaria que fuera como el de la imgen

Me parece muy interesante el codigo que facilito Master23 ya que trabaja con los wincontrols.
Simplemente se usa lo que se tiene a mano.
Esto se puede hacer como un componente sin problemas.
Este ejemplo se puede hacer de mil maneras, con un poco de imaginación.
Saludos
PD: Si os gusta os paso el código *-)
PD2: Presionen el mundo. (y)
PD3: El color del borde cambia de color cada 3 segundos :p

Archivos adjuntos


  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.379 mensajes
  • LocationMéxico

Escrito 07 agosto 2010 - 08:37

Anda tu, eso de novato ya no me lo creo para nada :p (y)

Salud OS
  • 0

#9 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 agosto 2010 - 08:59

Hola

Anda tu, eso de novato ya no me lo creo para nada :p (y)

Salud OS

Como que no, si lo que hago es solo copiar y pegar.... *-) :D
Saludos
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.379 mensajes
  • LocationMéxico

Escrito 07 agosto 2010 - 09:00

Hola


Anda tu, eso de novato ya no me lo creo para nada :p (y)

Salud OS

Como que no, si lo que hago es solo copiar y pegar.... *-) :D
Saludos


Ajá, pero hasta en eso hay que saber, un novato no lo hace tan bien como ustéd señor :p :D :D :D

Y ya suelta el código :D

Salud OS
  • 0

#11 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 08 agosto 2010 - 12:04

Hola
Lo de: ''Si os gusta os paso el código'' era para ver que decían  :D
El codigo lo facilito Master23 yo solo le di algunos toques de novato. *-)
Saludos
  • 0

#12 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 08 agosto 2010 - 12:37

Hola
Jugando con esto:
Este tambien es sencillo y queda bien. (y)
Saludos

Archivos adjuntos


  • 0

#13 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 09 agosto 2010 - 08:38

Ah pero qué pillo nos has salido amigo Caral :D
  • 0

#14 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 09 agosto 2010 - 08:51

Ajá todo muy lindo pero.... mmmm.... y el código fuente ?  :

Saludox "novato" ! :)
  • 0

#15 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 agosto 2010 - 10:07

Hola
El codigo es el que puso el amigo Master23.
Lo único que hay que hacer es:
Modificar el largo de la curva.
No modificar el edit.
Colocar un Panel
Colocar un Shape.

Orden:
Panel, Shape, Edit.
El Shape ya tiene la opcion de redondear las esquinas.
El panel viene de wincontrol.
El edit se le quita el marco y se pone encima del shape.

Osea: Una chapuza pero se ve bien jejejeje.

Saludos
PD: Aqui os dejo los dos códigos para que os riáis un rato de este novato. :D

Archivos adjuntos


  • 0

#16 romfrost13

romfrost13

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 09 agosto 2010 - 05:44

Si probe el codigo Master23 pero no llegue al resultado esperado...

Hola
El codigo es el que puso el amigo Master23.
Lo único que hay que hacer es:
Modificar el largo de la curva.
No modificar el edit.
Colocar un Panel
Colocar un Shape.

Orden:
Panel, Shape, Edit.
El Shape ya tiene la opcion de redondear las esquinas.
El panel viene de wincontrol.
El edit se le quita el marco y se pone encima del shape.

Osea: Una chapuza pero se ve bien jejejeje.

Saludos
PD: Aqui os dejo los dos códigos para que os riáis un rato de este novato. :D

Me falto ponerles que si lo e intentado hacer de esa forma, incluso se pueden hacer "minicomponentes" usando frames segun el tipo de entrada para el edit, o la version db usando dbedit en lugar de edits, como sea seguira buscando.
  • 0

#17 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 09 agosto 2010 - 06:12

Mmmmm.... y porqué no es como lo esperebas amigo romfrost13 ?... Qué le hace falta al componente ? o mejor dicho, cómo deseas que se comporte ?... a lo mejor nos surgen más ideas ("nos" ?  ^o|  :D)

Saludox ! :)
  • 0

#18 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 agosto 2010 - 06:29

Hola

Mmmmm.... y porqué no es como lo esperebas amigo romfrost13 ?... Qué le hace falta al componente ? o mejor dicho, cómo deseas que se comporte ?... a lo mejor nos surgen más ideas ("nos" ?  ^o|  :D)

Saludox ! :)

Es que lo que hicimos con el codigo de Master23 no es un componente, es una chapuza. :D
Lo que esta buscando romfrost13 es un componente. (y)
Saludos

  • 0

#19 romfrost13

romfrost13

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 10 agosto 2010 - 12:42

Hola


Mmmmm.... y porqué no es como lo esperebas amigo romfrost13 ?... Qué le hace falta al componente ? o mejor dicho, cómo deseas que se comporte ?... a lo mejor nos surgen más ideas ("nos" ?  ^o|  :D)

Saludox ! :)

Es que lo que hicimos con el codigo de Master23 no es un componente, es una chapuza. :D
Lo que esta buscando romfrost13 es un componente. (y)
Saludos

Exacto, lo que hace el codigo del amigo Master23 es dibujar un circulo en los lados del edit, por mas que le busque siempre parecia que las lineas se cortaban, porque las cubre el circulo que se dibuja sobre ellas, al parecer no existe un componente que se vea como yo quiero por lo que te tendre que ponerme manos a la obra sobre uno que se vea asi, pero sera un poco mas adelante porque tengo unos cuantos pendientes que terminar...
  • 0

#20 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 10 agosto 2010 - 01:42

Aquí mi granito, de cal :o


delphi
  1. procedure TForm1.Redondear(Control: TWinControl;Round:integer;ColorLine,ColorFondo:Tcolor;WidthLine,Style,Border,space,STyleF:integer) ;
  2. //-----------------------------------------------------------------------------
  3. // Bueno basandome en el código de master23 y en el código de about
  4. // página [url]http://delphi.about.com/od/adptips2006/qt/focusrectangle.htm[/url]
  5. // más unas modificaciones mias queda bastante cuioso
  6. // No llega al nivel del Novato JEFE "Caral"  Espero te guste el cargo  :)
  7. //
  8. //  Ejemplo  Redondear(Edit1,2,clGreen,clyellow,2,1,3,3,1);
  9. //
  10. //-----------------------------------------------------------------------------
  11. var
  12.   R: TRect;
  13.   Rgn: HRGN;
  14.   focusRectangle:tshape;  //unit  ExtCtrls
  15. begin
  16.   focusRectangle := TShape.Create(self) ;
  17.   case border of
  18.     1: focusRectangle.Shape := stRectangle;
  19.     2: focusRectangle.Shape := stSquare;      //queda mal
  20.     3: focusRectangle.Shape := stRoundRect;
  21.     4: focusRectangle.Shape := stRoundSquare; //queda mal
  22.     5: focusRectangle.Shape := stEllipse;    //queda mal
  23.     6: focusRectangle.Shape := stCircle;      //queda mal
  24.   end;
  25.   focusRectangle.Visible := false;
  26.   case Style of
  27.     1: focusRectangle.Pen.Style := psSolid;
  28.     2: focusRectangle.Pen.Style := psDash;
  29.     3: focusRectangle.Pen.Style := psDot;
  30.     4: focusRectangle.Pen.Style := psDashDot;
  31.     5: focusRectangle.Pen.Style := psDashDotDot;
  32.     6: focusRectangle.Pen.Style := psClear;
  33.     7: focusRectangle.Pen.Style := psInsideFrame;
  34.     8: focusRectangle.Pen.Style := psUserStyle;
  35.     9: focusRectangle.Pen.Style := psAlternate;
  36.   end;
  37.   focusRectangle.Brush.Color:=ColorFondo;
  38.   case STyleF of
  39.     1:focusRectangle.Brush.Style := bsSolid;
  40.     2:focusRectangle.Brush.Style := bsClear;
  41.     3:focusRectangle.Brush.Style := bsHorizontal;
  42.     4:focusRectangle.Brush.Style := bsVertical;
  43.     5:focusRectangle.Brush.Style := bsFDiagonal;
  44.     6:focusRectangle.Brush.Style := bsCross;
  45.     7:focusRectangle.Brush.Style := bsDiagCross;
  46.   end;
  47.   FocusRectangle.Pen.Color := ColorLine;
  48.   focusRectangle.Pen.Width := WidthLine;
  49.   with Control do
  50.   begin
  51.     R := ClientRect;
  52.     rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, Round, Round) ;
  53.     Perform(EM_GETRECT, 0, lParam(@r)) ;
  54.     InflateRect(r, - 4, - 4) ;
  55.     Perform(EM_SETRECTNP, 0, lParam(@r)) ;
  56.     SetWindowRgn(Handle, rgn, True) ;
  57.     with focusRectangle do
  58.     begin
  59.       Parent := Control.Parent;
  60.       Top := Control.Top - (space+WidthLine);
  61.       Height := Control.Height + ((space*2)+WidthLine);
  62.       Left := Control.Left - (space+WidthLine);
  63.       Width := Control.Width + ((Space*2)+WidthLine);
  64.       Visible := true;
  65.     end;
  66.     Invalidate;
  67.   end;
  68. end;



  • 0




IP.Board spam blocked by CleanTalk.