Hello Ismael,
Wednesday, December 9, 2009, 6:34:53 PM, you wrote:
ILDGa> De esa forma funciona pero no devuelve lo mismo. ILDGa> Si quiere mira en pantalla para que veas: los c�digos por ejemplo de 148, ILDGa> 149 y 156
Aqu� podemos vernos con varios problemas que se quedan ocultos entre la mara�a de conversiones y codepages.
ILDGa> El problema que tengo es que tengo aplicaciones ILDGa> corriendo en Visual Basic 6
ILDGa> y ahora no logro crear la funci�n que me devuelva lo mismo con Lazarus, ya
Lo que podr�as hacer por ejemplo es poner una cadena de ejemplo como origen de datos, otra cadena con el resultado que da VB6 y cualquiera de nosotros puede intentar realizar una funci�n que haga la conversi�n que tu esperas. Pero tenemos que daber de donde vienen los datos y en que codificaci�n. Por ejemplo si vienen de un textbox en Lazarus estos vendr�n en UTF-8, pero si vienen de la base de datos vendr�n en ANSI (ya que as� las tienes dise�adas creo).
ILDGa> que AnsiToUTF8(Char(149)) Asc(149). Y esto me trae el embrollo de no
Eso no puede ser lo mismo nunca :) Asc(149) eso es de VB no ? Si es as� char(149)=asc(149) ya que un "char" no tiene codificaci�n de ning�n tipo, un char es un byte que se usa en cadenas de texto.
Si quieres poner las funciones en VB6 (yo programaba en VB6, hace tiempo pero creo que recordar� como iba) e intento hacer lo mismo en Pascal.
Resumiendo el problema, las strings que le envias a lazarus (ojo, lazarus no es freepascal) deben ir en UTF-8, y el contestar� con UTF-8 tambi�n. Si lo que quieres es trabajar con ANSI (que es lo que veo que necesitas) siempre que leas algo de un textbox, de un memo, o de cualquier sitio tendr�s que convertir de UTF-8 a ANSI antes de hacer nada, y al rev�s si quieres enviarlo a los controles visuales.
FreePascal no es UTF-8 si no ANSI, por lo tanto las funciones que no son visuales (son de freepascal) trabajan en ANSI, como los nombres de ficheros y alguna cosa m�s.
Otras funciones de freepascal como RightStr, LeftStr, etc, trabajan en ANSI pero se pueden usar en UTF-8 en muchos casos, pero hay que tener cuidado porque en UTF-8 lo caracteres no tienen por qu� ocupar un 1 byte, si no que pueden ocupar hasta 4 dependiendo del caracter que sea. As� esto:
p:=pos(Cadena,'a');
r:=LeftStr(Cadena,p);
es perfectamente v�lido, esto:
p:=pos(Cadena,'�');
r:=LeftStr(Cadena,p);
no lo es, ya que en UTF-8 '�' son 2 bytes o 2 chars y el resultado puede no ser el deseado.
ILDGa> poder atacar la misma base de datos con aplicaciones realizadas en los ILDGa> diferentes lenguajes, cuesti�n esta que es ILDGa> imprescindible para mi hasta que
ILDGa> no migre todas las aplicaciones, que de hecho son bastantes. Esto sin contar ILDGa> mi conocimiento nulo de Lazarus o Delphi y por ILDGa> consiguiente el retrazo que
ILDGa> esto trae en la migraci�n.
Es comprensible, uno no va a cambiar una base de datos que funciona, por lo menos por ahora.
ILDGa> Por lo que veo tendr� que rehacer la funci�n en VB6
Todo lo que puede hacer VB6 lo puede hacer Lazarus, al reves no.
PD: Por cierto, a lo del MaskEdit no te he contestado por que desconozco totalmente el tema y no quiero dar ideas falsas.
Best regards,
JoshyFun