Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2012
elGuerrero elGuerrero is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 10
Poder: 0
elGuerrero Va por buen camino
Question Poner asterisco al lado de un TEdit

Al componente TEdit le agregué la propiedad boleana Requerido para indicar si el campo no debe dejarse en blanco. El valor de esa propiedad quiero mostrarlo poniendo o no poniendo un asterisco rojo al lado derecho del rectángulo que delimita el TEdit, ya sea en tiempo de diseño o de ejecución.

He intentado poner el asterisco con TCanvas dentro del evento WMPaint pero no me ha funcionado.

Algo importante, la validación de que no esté en blanco no la integraré al componente sino en un procedimiento de la TForm.

A ver si pueden echarme una mano con el código o en caso de que no sea posible, pues también me lo digan.

Gracias.
Responder Con Cita
  #2  
Antiguo 12-01-2012
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Hola!
Para lo que quieres hacer, yo heredaría de TCustomLabeledEdit, ya que este componente ya integra el label manteniéndolo público en lugar de published. De esta forma, con tu componente sólo deberías hacer en el setRequerido:

Código Delphi [-]
if (Value)
  Self.EditLabel.Caption:='*' 
else
  Self.EditLabel.Caption:='';

y poner las propiedades de la fuente y la posición del label (con LabelPosition y LabelSpacing).

Cuando lo arrastres en tiempo de diseño, por no tener las propiedades published no te dejará modificarlas, por lo que siempre tendrás el caption que indiques con la propiedad "Requerido".

Espero que te sirva.
Un saludo,
LoPiTaL
Responder Con Cita
  #3  
Antiguo 12-01-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hay varias opciones. Antes comentar que no me ha quedado claro si quieres el asterisco dentro del Edit (a la derecha) o fuera (a la derecha).

Si es dentro, puedes revisar el componente TEditInsideHelp de mi página.
Bájalo y revisa el código, pero creo que es lo que necesitas:

Código Delphi [-]
procedure TEditInsideHelp.WMPaint(var Message: TWMPaint);
var
  MCanvas: TControlCanvas;
  DrawBounds: TRect;
begin

  // Casos en los que no hacemos nada
  if (Self.Text <> '') or (not Self.FInsideHelpActive) then begin
    inherited;
    Exit;
  end;

  inherited;

  MCanvas := TControlCanvas.Create;
  DrawBounds := ClientRect;

  // proteccion
  try
    // Asignar el canvas
    MCanvas.Control := Self;

    // Pintar
    MCanvas.Brush.Color := Self.Color;
    MCanvas.Font.Color := Self.FInsideHelpColor;
    MCanvas.Font.Name := 'Arial';
    MCanvas.Font.Style := MCanvas.Font.Style + [fsBold];
    // texto
    MCanvas.TextOut(2,2, Self.FInsideHelpText);

  finally
    MCanvas.Free;
  end;

end;

En este caso se pinta lo que hay en una propiedad, pero es fácil modificar para que pinte un asterisco rojo a la derecha.

Si lo que quieres es pintarlo fuera del edit (a la derecha), pues puedes derivar como te han dicho, o incluso utilizar Frames, aunque creo que la primera opción es mejor.
Si me apuras puedes crear un componentes nuevo derivado de TPanel, que contenga un Edit y un Label.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 13-01-2012
elGuerrero elGuerrero is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 10
Poder: 0
elGuerrero Va por buen camino
No se me había ocurrido hacerlo así, y sí es como lo imaginaba.
Lo extra que tendría que hacer sería agregarle otras propiedades que ya le había puesto a mi TEdit derivado.
Muchas gracias.
Responder Con Cita
  #5  
Antiguo 13-01-2012
elGuerrero elGuerrero is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 10
Poder: 0
elGuerrero Va por buen camino
Desearía el asterisco estuviera fuera, algo como:

[____] *

espero se entienda, la pseudo-imagen.
Respecto a usar el componente InsideHelp, intenté modificar el evento para poner el asterisco fuera pero no lo he logrado. Si pudieras ayudarme a hacerlo porque los componentes no son mi fuerte, y con eso me economizarías horas silla
Responder Con Cita
  #6  
Antiguo 13-01-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por elGuerrero Ver Mensaje
...
Respecto a usar el componente InsideHelp, intenté modificar el evento para poner el asterisco fuera pero no lo he logrado. Si pudieras ayudarme a hacerlo porque los componentes no son mi fuerte, y con eso me economizarías horas silla
OK, si lo que quieres es que esté fuera, es mejor la opción que te dió LoPiTal, pues ya tienes ambos componentes en uno, el EDIT y el LABEL.

Por lo pronto deriva el componente "sin nada."
(1) En el create modifica la fuente y color del Label y asigna el ASTERISCO al Caption.
(2) Modifica también la ubicación del Label.
...

Prueba, pon el código y dinos si te atascas...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 15-01-2012
elGuerrero elGuerrero is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 10
Poder: 0
elGuerrero Va por buen camino
Voy a hacer la derivación, como comenta LoPiTal y les comento la próxima semana pues estaré fuera unos días.
Por lo pronto, gracias por el apoyo a ambos.
Responder Con Cita
  #8  
Antiguo 17-01-2012
elGuerrero elGuerrero is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 10
Poder: 0
elGuerrero Va por buen camino
Cita:
Empezado por elGuerrero Ver Mensaje
No se me había ocurrido hacerlo así, y sí es como lo imaginaba.
Lo extra que tendría que hacer sería agregarle otras propiedades que ya le había puesto a mi TEdit derivado.
Muchas gracias.
Debido a que ocupo otras propiedades de TEdit como TabOrder derive mejor de TLabeledEdit en lugar de TCustomLabeledEdit.
Les pongo lo escencial del código:

Código:
   TEntradaTxt = class(TLabeledEdit)
       FRequerido: Boolean;
       procedure SetRequerido(lVal: Boolean);
   public
       constructor Create(AOwner: TComponent); override;
   published
       property Requerido: Boolean read FRequerido write SetRequerido;
   end;

constructor TEntradaTxt.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FRequerido   := False;
  LabelPosition:= lpRight;
  LabelSpacing := 4;
  EditLabel.Caption:= '';
  EditLabel.Font.Color:= clRed;
end;

procedure TEntradaTxt.SetRequerido(lVal: Boolean);
begin
  if lVal <> FRequerido then
    begin
    FRequerido := lVal;
    if lVal then
      EditLabel.Caption:= '*'
    else
      EditLabel.Caption:= '';
    RecreateWnd;
    end
  else
    begin
    //***mi parche***
    if (not FRequerido) and (EditLabel.Caption <> '') then
      EditLabel.Caption:= '';
    end;
end;
El problema que tengo ahora es que en tiempo de diseño, cuando inserto el componente dentro de una WinForm me pone en el EditLabel.Caption la propiedad Name del componente.
A mi ver no me falta ninguna inicialización pero me sale ese valor y quise resolverlo agregando el código que marque con la etiqueta "mi parche", pero no me funciona.
En tiempo de diseño para borrar ese valor, una vez insertado el componente, en el Obj Inspector asigno con el mouse Requerido y luego lo desasigno y de esa manera desaparece el valor del Name en el Caption.

Podrian orientarme en ¿cómo puedo corregirlo para que salga en blanco en tiempo de diseño?

Gracias de antemano.
Responder Con Cita
  #9  
Antiguo 17-01-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba con algo así; Tal como lo habías hecho debería funcionar:

Código Delphi [-]
constructor TEntradaTxt.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FRequerido   := False;
  LabelPosition:= lpRight;
  LabelSpacing := 4;
  EditLabel.Font.Color:= clRed;
  EditLabel.Caption:= ' ';
  EditLabel.Invalidate;

end;

procedure TEntradaTxt.SetRequerido(lVal: Boolean);
begin
  if lVal <> FRequerido then begin
    FRequerido := lVal;
    if lVal then begin
      EditLabel.Caption:= '*'
    end
    else begin
      EditLabel.Caption:= '';
    end;
    Invalidate;
  end;
end;

Creo que el problema es dejar la cadena vacía en el Edit; Basta con que coloques un ESPACIO.
Por lo visto al dejarla vacía no le hace caso y vuelve a colocar el nombre.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 18-01-2012
elGuerrero elGuerrero is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 10
Poder: 0
elGuerrero Va por buen camino
Thumbs up

Gracias totales, Neftali, ese era el código ad-hoc.

Y gracias también a LoPiTal, por la línea a desarrollar.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
asterisco (*) en keydown o keypress pborges36 Varios 5 27-02-2009 19:57:03
El lado equivocado ContraVeneno Humor 3 18-09-2007 20:21:17
Tablas al lado Deiv HTML, Javascript y otros 1 19-02-2007 20:32:25
Pasar el valor de un TEdit dentro de un StringGrid a otro TEdit que está fuera atirado Varios 4 11-09-2004 19:13:48
Minimizar al lado del relojito RaulChemical API de Windows 1 07-11-2003 14:32:05


La franja horaria es GMT +2. Ahora son las 15:35:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi