Vamos por partes, hablas de un error, pero por tu descripción pareciera ser de dos: Uno en la función BidiFlipAligment y otro en el uso de ShowMessage.
Respecto a la función BidiFlipAligment, tengo un par de preguntas y dudas. ¿Cuál es el objetivo de esa función? ¿Y que valor debería devolverte en cada caso?
Ese código no debería poder compilarte porque esa forma de hacer array no es permitida. Un array necesita un rango para definir su índice y TAligment no lo es. Se puede usar los enumerativos pero así:
const
BidiAlignment: array[Boolean, taLeftJustify..taCenter] = (...);
O así:
type
TAligmentRange = taLeftJustify..taCenter;
const
BidiAlignment: array[Boolean, TAligmentRange] = (...);
Tu error está en que TAligment sólo admite uno de 3 posibles valores, en cada momento. No está definido como sub rango. Esta es la declaración de TAligment:
type
TAlignment = (taLeftJustify, taRightJustify, taCenter);
Este array que definí ahora si espera las 6 combinaciones posibles dadas por los valores false, true, taLeftJustify, taRightJustify y taCenter. Eso queda claro, lo que hace "ruido" es lo se espera almacenar en él y lo que se termina regresando en la función... Su implementación y uso suena confusa. Si la idea es que la función haga un "Flip" el parámetro boolean está demás. En todo caso sería "CanFlip". ¿Me explico?
Por ejemplo, Si el valor es false, no tiene que hacer un flip, por lo tanto debería regresar el propio valor, solamente tiene sentido devolver el "opuesto" cuando es true. Y encima aplica a 2 de los 3 posibles valores ya que taCenter no tiene "opuesto". El valor a devolver se dedude del propio valor, no tiene sentido guardar las combinaciones posibles.
Me parece a mi que podría encararse de forma más simple.
Ahora, por el segundo error:
Un ShowMessage me cuesta creer que ocasione un motivo por el que falle, sobre todo en Windows y no en Linux (tiene más sentido lo inverso convengamos). Más bien en lo que yo pensaría que está el problema es en la línea anterior: el procedimiento GraboTempAsientos.
¿Que hace ese procedimiento?
¿Crea algo? Un Access Violation es justamente un error debido a un intento de hacer uso de una memoria no reservada. Casos típicos de un objeto no instanciado... o que fue liberado y se está intentando acceder posteriormente. Y esto me hace mirar a las siguientes líneas, cuando creas ese form modal. ¿Ese form tiene algo en el evento OnClose y/o OnCloseQuery? ¿La variable FormRegDiario es global o local?
Y un detalle adicional, la forma en como estás pretendiendo usar las ventanas modales no cuadra. Estás pretendiendo liberar el form modal al momento de mostrarlo. Básicamente tu código dice:
Crea, Muestra y Libera todo de una vez. El try actúa modo de "transacción", o ejecuta todo bien, o nada. Las sentencias se realizan de forma atómica.
El problema está en que una llamada a ShowModal hace que la aplicación se ponga en "modo de espera" hasta que el usuario cierre ese form modal y por tanto el procedimiento que debería hacerse atómicamente está siendo pausado de manera forzada contra su voluntad.
La forma de usar try con ShowModal en todo caso es así:
try
Dialogo.ShowModal;
finally
Dialogo.Free;
end;
Siendo Dialogo un form que se destinará como uso de form modal.
Ten muy presente cual es el propósito de una ventana modal. Como esto impide la ejecución normal de la aplicación y se queda esperando la intervención del usuario su uso principalmente está pensado para ventanas de diálogo y/o avisos y que requieren de una invertención forzoza de parte del usuario. Una vez aceptado/confirmado es que la aplicación puede continuar con la ejecución normal.
No hay que abusar de ventanas modales.
Deberías aclararnos bien que es lo que estás intentando hacer, y comentarnos todos los errores escritos en inglés.
Me extraña que digas que en Linux te deje trabajar y no en Windows por ese ShowMessage. Hay algo más profundo por analizar... Cuanto más nos puedas decir al respecto más fácil será asesorarte.
Te sugiero que hagas una traza a tu código, ayúdate del debug y los puntos de interrupción. Ve paso a paso por las líneas de código para detectar exactamente cual es el problema del Access Violation.
Saludos,