Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2017-07

No cambiar de columna en dbgrid

6 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Ismael L. Donis Garcia

Como se podrá impedir que el curso abance una columna al dar enter en un dbgrid en el evento EditingDone?

Tengo lo siguiente:

dbg: TDBGrid;

Y quiero en el evento:

procedure Tfvsal.dbgEditingDone(Sender: TObject);
begin
  if (dbg.SelectedIndex = 4) then begin
   if (dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat > dbg.DataSource.DataSet.FieldByName('exist').AsFloat) then begin
//..........
//que al entrar aqui me salga de la columna 4
//..........
     Application.MessageBox('La cantidad a dar salida no puede ser mayor a la existencia.' , pchar(Self.Caption), MB_ICONINFORMATION);
      dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat := 0;
      dbg.DataSource.DataSet.FieldByName('saldo2').AsFloat:=0;
      dbg.DataSource.DataSet.FieldByName('saldo1').AsFloat:=0;
    end else begin
     try
       dbg.DataSource.DataSet.FieldByName('saldo2').AsFloat:=StrToFloat(FormatCurr('#0.00', dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat * dbg.DataSource.DataSet.FieldByName('pre2').AsFloat));
      except
       dbg.DataSource.DataSet.FieldByName('saldo2').AsFloat:=0;
      end;
      try
       dbg.DataSource.DataSet.FieldByName('saldo1').AsFloat:=StrToFloat(FormatCurr('#0.00', dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat * dbg.DataSource.DataSet.FieldByName('pre1').AsFloat));
      except
       dbg.DataSource.DataSet.FieldByName('saldo1').AsFloat:=0;
      end;
    end;
  end;
end;

Saludos Cordiales

Ismael Devuan User : http://distrowatch.com/table.php?distribution=devuan ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170711/c7dc1724/attachment.html>

Reply by email

Ismael L. Donis Garcia

Quise decir que no me salga de la columna 4, ósea si la cantidad es mayor a la existencia que me de un mensaje y se me quede en dicha columna.

Saludos Reiterados

Earlier message 57 lines
----- Original Message ----- From: Ismael L. Donis Garcia To: Spanish version of Lazarus List ; Spanish Lazarus Sent: Tuesday, July 11, 2017 3:41 PM Subject: No cambiar de columna en dbgrid Como se podrá impedir que el curso abance una columna al dar enter en un dbgrid en el evento EditingDone? Tengo lo siguiente: dbg: TDBGrid; Y quiero en el evento: procedure Tfvsal.dbgEditingDone(Sender: TObject); begin if (dbg.SelectedIndex = 4) then begin if (dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat > dbg.DataSource.DataSet.FieldByName('exist').AsFloat) then begin //.......... //que al entrar aqui me salga de la columna 4 //.......... Application.MessageBox('La cantidad a dar salida no puede ser mayor a la existencia.' , pchar(Self.Caption), MB_ICONINFORMATION); dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat := 0; dbg.DataSource.DataSet.FieldByName('saldo2').AsFloat:=0; dbg.DataSource.DataSet.FieldByName('saldo1').AsFloat:=0; end else begin try dbg.DataSource.DataSet.FieldByName('saldo2').AsFloat:=StrToFloat(FormatCurr('#0.00', dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat * dbg.DataSource.DataSet.FieldByName('pre2').AsFloat)); except dbg.DataSource.DataSet.FieldByName('saldo2').AsFloat:=0; end; try dbg.DataSource.DataSet.FieldByName('saldo1').AsFloat:=StrToFloat(FormatCurr('#0.00', dbg.DataSource.DataSet.FieldByName('cantidad').AsFloat * dbg.DataSource.DataSet.FieldByName('pre1').AsFloat)); except dbg.DataSource.DataSet.FieldByName('saldo1').AsFloat:=0; end; end; end; end; Saludos Cordiales -- Ismael Devuan User : http://distrowatch.com/table.php?distribution=devuan ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170711/cf1a99f4/attachment-0002.html>

Reply by email

Jesus R.
to Ismael L. Donis Garcia

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.

Reply by email

Ismael L. Donis Garcia
to Jesus R.

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

Funciona Perfectamente. Que decirte.....

Saludos Cordiales

Earlier message 65 lines
----- 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 >

Reply by email

Felix Perez
to Ismael L. Donis Garcia

El 14 de julio de 2017, 08:47, Ismael L. Donis Garcia via Lazarus-es

<lazarus-es en lists.lazarus-ide.org> wrote
La verdad Jesús que yo no me explico de donde tu sacas las soluciones. Funciona Perfectamente. Que decirte.....

¿Gracias?

Show quoted text 68 lines
Saludos Cordiales -- > 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 > _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus-es
usuario linux #274354 normas de la lista: http://wiki.debian.org/es/NormasLista como hacer preguntas inteligentes: http://www.sindominio.net/ayuda/preguntas-inteligentes.html

Reply by email

Ismael L. Donis Garcia
to Felix Perez
Earlier message 100 lines
----- Original Message ----- From: "Felix Perez via Lazarus-es" <lazarus-es en lists.lazarus-ide.org> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org> Cc: "Felix Perez" <felix.listadebian en gmail.com> Sent: Friday, July 14, 2017 1:49 PM Subject: Re: [Lazarus-es] No cambiar de columna en dbgrid > El 14 de julio de 2017, 08:47, Ismael L. Donis Garcia via Lazarus-es > <lazarus-es en lists.lazarus-ide.org> escribió: >> La verdad Jesús que yo no me explico de donde tu sacas las soluciones. >> >> Funciona Perfectamente. Que decirte..... > > ¿Gracias? Sería muy poco para los conocimientos que me ha brindado. > >> >> Saludos Cordiales >> -- >> >> >>> 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 >>> >> >> >> _______________________________________________ >> Lazarus-es mailing list >> Lazarus-es en lists.lazarus-ide.org >> https://lists.lazarus-ide.org/listinfo/lazarus-es > > > > -- > usuario linux #274354 > normas de la lista: http://wiki.debian.org/es/NormasLista > como hacer preguntas inteligentes: > http://www.sindominio.net/ayuda/preguntas-inteligentes.html > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > https://lists.lazarus-ide.org/listinfo/lazarus-es >

Reply by email