Ir al contenido


Foto

Mostrar indicio o sugerencia en EDIT


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

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 01 abril 2016 - 05:05

Buenas amigos, un gusto volver a saludarles, me preguntaba como puedo hacer para que dentro de un componente EDIT poder poner un indicio de completado, por ejemplo si el cuadro de texto es para poner un nombre que dentro del EDIT diga en color medio gris y cursiva "nombre" y si encaso va una contraseña que diga en gris "contraseña" todo dentro del EDIT, asi de esta manera me ahorro colocar aparte de los EDIT los Label que actualmente lo uso como encabezado de los EDIT.

PD: para más detalles les mando una imagen, me gustaría lograr que salga como el texto que dice en la imagen "Enter Name Here"

 

Saludos y gracias por su tiempo. :)


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 01 abril 2016 - 05:31

Con la propiedad TextHint

 

El string que pongas en esa propiedad se va a mostrar cuando el TEdit este vacío y no tenga foco

 

En Lazarus es mejor que en Delphi: Te permite asignar estilo a la fuente (negrita, cursiva, ..) y color


Editado por Agustin Ortu, 01 abril 2016 - 05:32 .

  • 0

#3 cram

cram

    Advanced Member

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

Escrito 01 abril 2016 - 06:06

Si lo que quieres es que el texto aparezca dentro del mismo control y no en el indicio a manera de cartel flotante, lo que puedes hacer asignarle el valor de texto correspondiente según lo que quieres que diga, para saber si debe ser considerado como texto vacío puedes hacer uso de la variable Tag que todo componente tiene.

Capturar el evento OnEnter y verificar el estado del Tag para saber si se trata del indicio o el dato ingresado. Si se trata del dato ingresado por el operador, deberás dejarlo como está, en caso contrario escribir el indicio, si por otra parte el operador sale del control, sin modificar el valor, puedes capturar el evento OnExit y volver a escribir el indicio.

En cuanto al caracter grisado, también puedes usar color vivo para indicar que ese cuadro no fue usado.

 

Otra manera de hacerlo es capturando el evento OnMouseEnter y OnMouseLeave, para mostrar u ocultar el indicio o devolverle el valor asignado. Claro que deberás declarar una variable extra.

 

Te recomiendo que escribas un nuevo componente.

 

Saludos


  • 0

#4 cram

cram

    Advanced Member

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

Escrito 01 abril 2016 - 06:13

Hace poco estuve trabajando en un control (aunque no lo implementé como componente), en éste compruebo que el dato cumpla con ciertos requisitos para ser aceptado, en el caso de no ser aceptado muestra un color y en el caso de ser aceptado otro.

No es invento mío y ayuda mucho en la interfaz. Por ejemplo puede ser utilizado al ingresar ciertos datos ue requieren validación como por ejemplo códigos GTIN u otros similares.

El único inconveniente de esto es que hay que agregar a cada uno de los controles en un arreglo de objetos que contiene todo el mecanismo de validación según el caso.

 

(b)


Editado por cram, 01 abril 2016 - 06:13 .

  • 0

#5 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 01 abril 2016 - 06:19

Muchas gracias por sus respuestas amigos, más o menos que códigos debo trabajarlos y sobre la propiedad "TextHint" que menciono el amigo Agustin no lo encuentro...


  • 0

#6 cram

cram

    Advanced Member

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

Escrito 01 abril 2016 - 08:02

En el inspector de objetos hay una propiedad llamada Hint, ahí deberías escribir el texto.

La proopiedad ShowHint, debes cambiarla a True.

 

Saludos


  • 0

#7 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 01 abril 2016 - 08:39

Yo la tengo, estoy usando Lazarus 1.6

 

Probe tanto como con TEdit, como con TLabeledEdit por si acaso

 

 

0b550e6b6cd45fe3c4eb646ea4c1850do.jpg

 
c7614ba2a5f2b69503ebeb11e81d6325o.jpg
 

 

PD: Estuve mirando muy por arriba toda la paleta de componentes de la LCL y es impresionante, hay un monton que no existen en Delphi y estan muy pero muy bien (algunos son "triviales" pero siempre muy utiles, como los que filtran otros controles para listar ya sea ListView, Combos, ListBox) por solo mencionar algunos

 


  • 1

#8 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 01 abril 2016 - 09:43

Muchas gracias amigos por la ayuda :) , al ver las imágenes que presento "Agustin" efectivamente se ve que la versión 1.6  trae la propiedad "Texthint", también les comento que actualmente estoy usando la versión 1.4, pues cuando probe la 1.6 había un Bug que no me agradaba, exactamente el bug era que dentro de un Label si yo ponía una oración larga no funcionaba la propiedad "Wordwarp" (salto de línea) estando la propiedad "Autosize" del label a false, por eso me regrese a la versión 1.4.

Ahora al ver que la nueva versión 1.6 trae interesantes novedades, creo que lo voy a reconsiderar. (y)


  • 0

#9 cram

cram

    Advanced Member

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

Escrito 02 abril 2016 - 05:39

Interesante, según puede verse en la imagen de Agustín, el texto aparece dentro del control. Eso es muy útil, como nunca lo usé y estoy acostumbrado a la VCL, me imaginé emularlo. En fin, también agradezco por la información.

 

Saludos


  • 0

#10 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 02 abril 2016 - 09:01

Esta sencilla forma es la que uso para emularlo en aplicaciones VCL sencillas:
 

cpp
  1. void __fastcall TForm1::Edit1Click(TObject *Sender)
  2. {
  3.   if(Edit1->Font->Color == clGrayText){
  4.     Edit1->Text = "";
  5.     Edit1->Font->Color = clWindowText;
  6.     Edit1->Font->Style = TFontStyles();
  7.   }
  8. }

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.