![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
__________________
Guía de Estilo de los Foros Cita:
|
|
#2
|
||||
|
||||
|
Gracias Marcos efectivamente funciono pero recorta el ultimo caracter,
como sabia que más o menos un caracter son 12 Pixels, a lo que me pasastes le sume 12 y Ok. |
|
#3
|
||||
|
||||
|
De donde has sacado que un caracter son 12 pixels? Porque si usas Courier New de tipo de letra... todo ok, pero en cuanto usas letras no proporcionales... adios el tema...
El código de Marcos funciona muy bien, teniendo en cuenta un detalle. En el código propuesto, estaría usando el Canvas de ¿?¿?¿?¿ se supone que de la ventana. Si el DBEdit tiene puesta una fuente distitnta a la de la ventana, por eso no te da el ancho exacto. Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#4
|
||||
|
||||
|
De momento se me ocurre esta pequeña chapuza para arreglar la posible diferencia en los tipos de letra:
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
|
#5
|
||||
|
||||
El objeto de este codigo, es que ultimamente por los foros veo mucho esta misma pregunta, por supuesto, si tenemos la propiedad Canvas a mano, pues consultamos los métodos TextWidth y TextHeight. Si no tenemos el canvas.... pues lo creamos nosotros y punto. La verdad, es excesivo crear un canvas, un handle y todos los recursos asociados para ver el tamaño de un string. Si se necesita para un string .... se llama a estas funciones y listo. Si tenemos que hallar el ancho para varios strings, se debería crear el Canvas, el handle, hacer el bucle necesario comprobando el tamaño de todos los string que tenemos y despues liberar el canvas. Es decir: No abusemos de estas rutinas, retocarlas y meterlas en vuestro código, llamar a estas funciones dentro de un bucle es EXCESIVO. Queda claro no? Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#6
|
||||
|
||||
|
Cita:
Una observación: Según entendí de la pregunta original, se require ajustar el ancho del DBEdit a la lóngitud máxima posible, misma que se especifica como parámetro. Es decir, que no se tiene disponible la cadena en sí que tiene la longitud máxima, de manera que TextWidth no funcionaría aquí, a menos que se sepa cuál es el caracter de mayor anchura y se forme una cadena de longitud máxima con dicho caracter. Así que, una opción podría ser usar la función GetTextMetrics, aplicada a Canvas.Handle, para obtener una estructura TEXTMETRICS que es un registro uno de cuyos campos es tmMaxCharWidth que es el ancho del caracter más ancho de la fuente utilizada. Este valor se multiplicaría por la longitud máxima y el valor se asignaría a DBEdit.Width. // Saludos |
|
#7
|
||||
|
||||
|
Siendo un DbEdit conectado a un campo texto, sabemos de antemano cual es el máximo ancho que puede ocupar.
Y por lo tanto al abrir el formulario podemos darle el máximo ancho al vuelo, y luego en el evento que convenga por ejemplo OnExit ajustarlo al ancho final del texto introducido. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|