[Lazarus-es] No cambiar de columna en dbgrid

Ismael L. Donis Garcia slibre en natio.co.cu
Vie Jul 14 14:47:44 CEST 2017


La verdad Jesús que yo no me explico de donde tu sacas las soluciones.

Funciona Perfectamente. Que decirte.....

Saludos Cordiales
--
Ismael
Devuan User : http://distrowatch.com/table.php?distribution=devuan
----- Original Message ----- 
From: "Jesus R. via Lazarus-es" <lazarus-es en lists.lazarus-ide.org>
To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org>
Cc: "Jesus R." <jesusrmx en gmail.com>
Sent: Thursday, July 13, 2017 10:49 AM
Subject: Re: [Lazarus-es] No cambiar de columna en dbgrid


> Hola Ismael, seguramente habrán un par de cosas que podrías hacer para
> lograr lo que quieres de una forma mas directa, pero me parece
> apropiado hacerte una sugerencia para esos casos como en que aquí nos
> ocupa. En este punto te encuentras procesando un evento OnEditingDone,
> sin un análisis muy detallado es difícil saber que ocurrió antes y que
> ocurrirá después, solo sabemos que en algún punto el grid seleccionará
> el campo siguiente. Entonces estamos en la situación en la que se
> desea alterar el comportamiento pero no sabemos en medio de cuantas
> capas de procesamiento estamos. En estos casos sería muy útil
> simplemente dejar que las cosas sucedan y al primer momento disponible
> tomar acción. Para ello hay dos formas, algunos usan Timers pero en
> realidad no soy fan de esa técnica y por eso te sugiero una segunda
> alternativa. Lazarus cuenta con un método de postergar una acción de
> tal manera que se efectué cuando haya terminado de hacer lo que sea
> que esté haciendo, ya sea una interacción con el usuario mediante el
> ratón o el teclado, o alguna otra cosa. Para ello lo que se tiene que
> hacer es usar el procedimiento Application.QueueAsyncCall, ésta toma
> dos parámetros: un método y un dato cuyo valor puede ser a nuestra
> conveniencia o 0. El método es el procedimiento que la aplicación
> llamará justo cuando no tenga otra cosa mas que hacer. Se usa de la
> siguiente forma:
>
> // agregar RegresarAColumnaCantidad en la declaración de  Tfvsal
> ....
>   procedure RegresarAColumnaCantidad(Data: PtrInt);
> ....
>
> // poner en la fila de espera de métodos a procesar ....
> ....
> Application.MessageBox('La cantidad a dar salida no puede ser mayor a
> la existencia.' , pchar(Self.Caption), MB_ICONINFORMATION);
> Application.QueueAsyncCall(@RegresarAColumnaCantidad,  0);
> ....
>
> // luego o antes como quieras, la implementación de 
> RegresarColumnaACantidad
> procedute Tfvsal.RegresarAColumnaCantidad(Data: PtrInt);
> begin
>  dbg.SelectedIndex := NUMERODECOLUMNA;
> end;
>
> y eso teóricamente :), debería funcionar.
>
> Como un tip extra, si colocas el cursor el algún punto de la palabra
> @RegresarAColumnaCantidad y presionas SHIFT+CTRL+C, Lazarus no solo
> declarará el método por ti, sino también introducirá una
> implementación vacía lista para tu línea "dbg.SelectedIndex :=
> NUMERODECOLUMNA;"
>
> Saludos.
>
> Jesus Reyes A.
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus-ide.org
> https://lists.lazarus-ide.org/listinfo/lazarus-es
> 




Más información sobre la lista de distribución Lazarus-es