FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
problemas con las comparaciones "num1 in [num2 .. num3]" en Delphi 2009
Hola compañeros, recurro a ustedes para que me ayuden a aclarar una duda que tengo. Es con respecto a las evaluaciones del tipo "if num1 in [num2 .. num3]" específicamente evaluaciones de rangos. Resulta que ayer estaba escribiendo este algoritmo:
El anterior algoritmo es para probar si un texto dibujado está sobre cierta región del Canvas, para dibujar el texto con estilo "Underline" por ejemplo, al estilo Web. El problema no es con el algoritmo en si, sino es con la evaluación. Ya que luego de quebrarme la cabeza por gran rato modifiqué la anterior evaluación y me quedé con el mismo algoritmo, pero con una evaluación más de principiante :
Un dato curioso también, la existencia de las variables X, Y, L, R, T y B se debe a que la anterior evaluación hecha directamente con las variables Mouse.CursorPos y TextRect no funcionaba tampoco. No sé si es que estoy equivocado sobre la función de in o es que realmente mi suposición de que es un problema de Delphi 2009 es correcta. Quisiera saber sus opiniones al respecto. Saludos, Chris |
#2
|
||||
|
||||
Me jugaría la cabeza a que es un problema de rango de los conjuntos.
Verás, un conjunto en Delphi tiene un máximo de 255 elementos, porque la estructura interna del conjunto usa 8 bits. Cuando uno crea un conjunto "al vuelo" (con "[" y "]") si los valores sobrepasan el máximo de 8 bits ocurreo overflow y por eso si uno intenta evaluar valores mayores a 255, pues... no funciona porque los valores fueron truncados. Por ejemplo:
Da que 30 está entre 270 y 345 . Eso es porque en realidad el conjunto [a..b] quedó formado por los valores 14 y 89. Así, si uno hace:
Va a decir que 300 no está entre 14 y 89, aunque uno pensó que era entre 270 y 345... EDITO: Esto es en Delphi 7, no sé si los conjuntos de D2009 serán igual. Última edición por Lord Delfos fecha: 27-05-2010 a las 22:03:55. |
#3
|
||||
|
||||
Gracias Delfos por la explicación. No sabía ese datos de los conjuntos. Seguramente la limitación sigue existiendo en D2009. Aunque no quedé claro porque A queda en 14 y B en 89??????
Saludos, Chris |
#4
|
||||
|
||||
Cita:
Sets A set is a collection of values of the same ordinal type. The values have no inherent order, nor is it meaningful for a value to be included twice in a set. The range of a set type is the power set of a specific ordinal type, called the base type; that is, the possible values of the set type are all the subsets of the base type, including the empty set. The base type can have no more than 256 possible values, and their ordinalities must fall between 0 and 255. 2) Se queda entre 14 y 89 porque se trunca el valor (270 - 256 = 14). Si representas 270 en binario = 100001100, al guardarlo en 8 bits, el digito más significativo se pierde, y se guarda solo el valor 00001100, que es el 14 en decimal.
__________________
Progress Openedge https://abevoelker.com/progress_open...dered_harmful/ Delphi forever... Última edición por defcon1_es fecha: 28-05-2010 a las 17:51:37. |
#5
|
||||
|
||||
Satamente, no lo podría haber explicado mejor.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
El programa se queda "colgado" mientras copia y luego "despierta" | NeWsP | OOP | 5 | 10-03-2010 22:05:40 |
Problemas con fechas, cambiar de formato "mm/dd/aaaa" a "dd/mm/aaaa" | nurilla | Firebird e Interbase | 6 | 18-02-2010 13:40:53 |
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" | Xavierator | Varios | 3 | 27-10-2008 09:09:50 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 00:03:53 |
Tiene delphi Problemas con "Pentum M"? | akela | Varios | 4 | 05-10-2005 00:24:40 |
|