Sign in Join

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

Mailing lists / lazarus-es / 2013-07

Error SIGSEGV en TDBGrid en columna con propiedad .ButtonStyle:=cbsEllipsis

9 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
Cuando le pongo a una columna de un TDGrid la propiedad .ButtonStyle:=cbsEllipsis e intento hacer lo siguiente:
procedure Tform1.TDGrid1SelectEditor(Sender: TObject; Column: TColumn;
  var Editor: TWinControl);
begin
  if (Editor  nil) then begin
   if (Column.Index = 5) then
    TCustomEdit(Editor).CharCase := ecUppercase;
  end;
end;
En la l�nea:  TCustomEdit(Editor).CharCase := ecUppercase; me salta el error "External SIGSEGV"
Si elimino la propiedad .ButtonStyle:=cbsEllipsis de dicha columna todo funciona normal.

Ahora mi problema es que necesito tener las 2 cosas, �sea necesito ponerle el boton a esa columna y adem�s necesito implementar el procedimiento en el evento SelectEditor del TDGrid.

Ahora mi pregunta:
Como prodr�a resolver este problema para que no me salga dicho error?

Desde ya Gracias
========
| ISMAEL |
========
Website: www.sisconge.byethost15.com
www.sisconge.hol.es

PD: Toda ayuda ser� bien venida.
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20130723/437a76a5/attachment.html>

Reply by email

Jesus Reyes
to Ismael L. Donis Garcia

Hola Ismael,

Primeramente, perd�n por no contestar siguiendo el flujo del mensaje como acostumbro y por el formato, no se si yahoo usa el mismo formato de mensaje al contestar o es alg�n ajuste que a�n no he hallado. Esta nueva interfaz de yahoo mail�lo hace cada vez mas dif�cil, en fin.

En el caso de "cbsEllipsis" el editor esta implementado usando un control llamado TCompositeCellEditor, as� que en el evento OnSelectEditor no estas recibiendo un TCustomEdit sino un TCompositeCellEditor.�

TCompositeCellEditor es solo un contenedor para un par de controles, un TCustomEdit y un Boton, el TCustomEdit esta designado como el "ActiveControl". Desafortunadamente TCompositeCellEditor no tiene ninguna propiedad publica para acceder al "ActiveControl" as� que debemos hacer uso de los llamadas clases de acceso o por otro nombre "crackclasses" de la siguiente forma:

...
type
� TCompositeCellEditorAccess=class(TCompositeCellEditor);

...

var
� ed: TWinControl;
...
� if Editor isTCompositeCellEditorthenbegin
� � ed := TCompositeCellEditorAccess(Editor).GetActiveControl;

� � // ahora si

� � TCustomEdit(Ed).CharCase := ecUpperCase;
� end;

En versiones posteriores agregar� a TCompositeCellEditor una propiedad "ActiveControl" para acceder directamente a ella y evitar el uso de clases de acceso.

Saludos.

Jesus Reyes A.

Reply by email

Ismael L. Donis Garcia
to Jesus Reyes

Jesus 1 mill�n de gracias, funcion� perfecto.

Me ser�a de utilidad que comunicases a la lista cuando agregues dicha propiedad al control para modificar el c�digo y de esta forma no tener que hacer refencia a dicha clase.

Saludos Cordiales
========
| ISMAEL |
========
Only for the small landowners and Cubans companies Website: www.sisconge.byethost15.com
www.sisconge.hol.es

Earlier message 91 lines
----- Original Message ----- From: Jesus Reyes To: Spanish version of Lazarus List Sent: Wednesday, July 24, 2013 1:38 PM Subject: Re: [Lazarus-es] Error SIGSEGV en TDBGrid en columna conpropiedad .ButtonStyle:=cbsEllipsis Hola Ismael, Primeramente, perd�n por no contestar siguiendo el flujo del mensaje como acostumbro y por el formato, no se si yahoo usa el mismo formato de mensaje al contestar o es alg�n ajuste que a�n no he hallado. Esta nueva interfaz de yahoo mail lo hace cada vez mas dif�cil, en fin. En el caso de "cbsEllipsis" el editor esta implementado usando un control llamado TCompositeCellEditor, as� que en el evento OnSelectEditor no estas recibiendo un TCustomEdit sino un TCompositeCellEditor. TCompositeCellEditor es solo un contenedor para un par de controles, un TCustomEdit y un Boton, el TCustomEdit esta designado como el "ActiveControl". Desafortunadamente TCompositeCellEditor no tiene ninguna propiedad publica para acceder al "ActiveControl" as� que debemos hacer uso de los llamadas clases de acceso o por otro nombre "crack classes" de la siguiente forma: ... type TCompositeCellEditorAccess=class(TCompositeCellEditor); ... var ed: TWinControl; ... if Editor is TCompositeCellEditor then begin ed := TCompositeCellEditorAccess(Editor).GetActiveControl; // ahora si TCustomEdit(Ed).CharCase := ecUpperCase; end; En versiones posteriores agregar� a TCompositeCellEditor una propiedad "ActiveControl" para acceder directamente a ella y evitar el uso de clases de acceso. Saludos. Jesus Reyes A. ------------------------------------------------------------------------------ De: Ismael L. Donis Garcia <ismael en citricos.co.cu> Para: Spanish Lazarus <lazarus-es en lists.lazarus.freepascal.org> Enviado: Martes, 23 de julio, 2013 10:35:47 Asunto: [Lazarus-es] Error SIGSEGV en TDBGrid en columna con propiedad .ButtonStyle:=cbsEllipsis Cuando le pongo a una columna de un TDGrid la propiedad .ButtonStyle:=cbsEllipsis e intento hacer lo siguiente: procedure Tform1.TDGrid1SelectEditor(Sender: TObject; Column: TColumn; var Editor: TWinControl); begin if (Editor nil) then begin if (Column.Index = 5) then TCustomEdit(Editor).CharCase := ecUppercase; end; end; En la l�nea: TCustomEdit(Editor).CharCase := ecUppercase; me salta el error "External SIGSEGV" Si elimino la propiedad .ButtonStyle:=cbsEllipsis de dicha columna todo funciona normal. Ahora mi problema es que necesito tener las 2 cosas, �sea necesito ponerle el boton a esa columna y adem�s necesito implementar el procedimiento en el evento SelectEditor del TDGrid. Ahora mi pregunta: Como prodr�a resolver este problema para que no me salga dicho error? Desde ya Gracias ======== | ISMAEL | ======== Website: www.sisconge.byethost15.com www.sisconge.hol.es PD: Toda ayuda ser� bien venida.

Reply by email

Ismael L. Donis Garcia
to Jesus Reyes

Ant todo gracias por el mensaje.

Ahora tengo otro problema.

Necesito pasar el foco al control TCustomEdit cuando doy click en el boton del TCompositeCellEditor.

Como podr�a realizar dicha operaci�n?

Osea que al dar click en el boton del TCompositeCellEditor el focos no se me quede en el bot�n, sino que me pase al TCustomEdir del objeto TCompositeCellEditor

Desde ya gracias reiteradas
========
| ISMAEL |
========
Only for the small landowners and Cubans companies Website: www.sisconge.byethost15.com
www.sisconge.hol.es

Earlier message 39 lines
----- Original Message ----- From: Jesus Reyes To: Spanish version of Lazarus List Sent: Wednesday, July 24, 2013 4:46 PM Subject: Re: [Lazarus-es] Error SIGSEGV en TDBGrid encolumna conpropiedad .ButtonStyle:=cbsEllipsis La propiedad ActiveControl esta ahora disponible a partir de la revisi�n 42198, probablemente ser� incluida en la siguiente version estable. Una precisi�n, es Hack class no Crack class, peque�a confusi�n :). Jesus Reyes A. ------------------------------------------------------------------------------ De: Ismael L. Donis Garcia <ismael en citricos.co.cu> Para: Spanish version of Lazarus List <lazarus-es en lists.lazarus.freepascal.org> Enviado: Mi�rcoles, 24 de julio, 2013 14:55:00 Asunto: Re: [Lazarus-es] Error SIGSEGV en TDBGrid en columna conpropiedad .ButtonStyle:=cbsEllipsis Jesus 1 mill�n de gracias, funcion� perfecto. Me ser�a de utilidad que comunicases a la lista cuando agregues dicha propiedad al control para modificar el c�digo y de esta forma no tener que hacer refencia a dicha clase. Saludos Cordiales ======== | ISMAEL | ======== Only for the small landowners and Cubans companies Website: www.sisconge.byethost15.com www.sisconge.hol.es ------------------------------------------------------------------------------

Reply by email

alfred en arsistemes.com
to Ismael L. Donis Garcia

Saludos,

creo que en el evento OnClick del TCompositeCellEditor...

TCustomEdit.Focused:=True;
Show quoted text 76 lines
Ant todo gracias por el mensaje. Ahora tengo otro problema. Necesito pasar el foco al control TCustomEdit cuando doy click en el boton del TCompositeCellEditor. Como podr�a realizar dicha operaci�n? Osea que al dar click en el boton del TCompositeCellEditor el focos no se me quede en el bot�n, sino que me pase al TCustomEdir del objeto TCompositeCellEditor Desde ya gracias reiteradas ======== | ISMAEL | ======== Only for the small landowners and Cubans companies Website: www.sisconge.byethost15.com www.sisconge.hol.es ----- Original Message ----- From: Jesus Reyes To: Spanish version of Lazarus List Sent: Wednesday, July 24, 2013 4:46 PM Subject: Re: [Lazarus-es] Error SIGSEGV en TDBGrid encolumna conpropiedad .ButtonStyle:=cbsEllipsis La propiedad ActiveControl esta ahora disponible a partir de la revisi�n 42198, probablemente ser� incluida en la siguiente version estable. Una precisi�n, es Hack class no Crack class, peque�a confusi�n :). Jesus Reyes A. ------------------------------------------------------------------------------ De: Ismael L. Donis Garcia <ismael en citricos.co.cu> Para: Spanish version of Lazarus List <lazarus-es en lists.lazarus.freepascal.org> Enviado: Mi�rcoles, 24 de julio, 2013 14:55:00 Asunto: Re: [Lazarus-es] Error SIGSEGV en TDBGrid en columna conpropiedad .ButtonStyle:=cbsEllipsis Jesus 1 mill�n de gracias, funcion� perfecto. Me ser�a de utilidad que comunicases a la lista cuando agregues dicha propiedad al control para modificar el c�digo y de esta forma no tener que hacer refencia a dicha clase. Saludos Cordiales ======== | ISMAEL | ======== Only for the small landowners and Cubans companies Website: www.sisconge.byethost15.com www.sisconge.hol.es ------------------------------------------------------------------------------ _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Reply by email

Ismael L. Donis Garcia
to alfred en arsistemes.com

Me podr�as explicar esto un poquito m�s (yo nunca he trabajado con delphi, es m�s nunca lo he instalado), vengo de Visual Estudio, o mejor dicho quiero venir. Y por tal motivo este entorno y modo de hacer las me resulta bastante estra�o.

Yo en el formulario lo que tengo es el evento:
procedure DBGrid1EditButtonClick(Sender: TObject);
Si en ese evento pongo:
TCustomEdit.Focused := True;

Me da el error:
ufcini.pas(760,23) Error: Only class class methods, class properties and class variables can be accessed in class methods
ufcini.pas(760,23) Error: Only class methods, class properties and class variables can be referred with class references

Saludos Reiterados
========
| ISMAEL |
========
Only for the small landowners and Cubans companies Website: www.sisconge.byethost15.com
www.sisconge.hol.es

Earlier message 97 lines
----- Original Message ----- From: <alfred en arsistemes.com> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Cc: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Tuesday, July 30, 2013 5:37 PM Subject: Re: [Lazarus-es] Error SIGSEGV en TDBGrid encolumna conpropiedad .ButtonStyle:=cbsEllipsis Saludos, creo que en el evento OnClick del TCompositeCellEditor... TCustomEdit.Focused:=True; > Ant todo gracias por el mensaje. > > Ahora tengo otro problema. > > Necesito pasar el foco al control TCustomEdit cuando doy click en el boton > del TCompositeCellEditor. > > Como podr�a realizar dicha operaci�n? > > Osea que al dar click en el boton del TCompositeCellEditor el focos no se > me quede en el bot�n, sino que me pase al TCustomEdir del objeto > TCompositeCellEditor > > Desde ya gracias reiteradas > ======== > | ISMAEL | > ======== > Only for the small landowners and Cubans companies > Website: www.sisconge.byethost15.com > www.sisconge.hol.es > > ----- Original Message ----- > From: Jesus Reyes > To: Spanish version of Lazarus List > Sent: Wednesday, July 24, 2013 4:46 PM > Subject: Re: [Lazarus-es] Error SIGSEGV en TDBGrid encolumna > conpropiedad .ButtonStyle:=cbsEllipsis > > > La propiedad ActiveControl esta ahora disponible a partir de la revisi�n > 42198, probablemente ser� incluida en la siguiente version estable. Una > precisi�n, es Hack class no Crack class, peque�a confusi�n :). > > > Jesus Reyes A. > > > > > ------------------------------------------------------------------------------ > De: Ismael L. Donis Garcia <ismael en citricos.co.cu> > Para: Spanish version of Lazarus List > <lazarus-es en lists.lazarus.freepascal.org> > Enviado: Mi�rcoles, 24 de julio, 2013 14:55:00 > Asunto: Re: [Lazarus-es] Error SIGSEGV en TDBGrid en columna > conpropiedad .ButtonStyle:=cbsEllipsis > > > > Jesus 1 mill�n de gracias, funcion� perfecto. > > Me ser�a de utilidad que comunicases a la lista cuando agregues dicha > propiedad al control para modificar el c�digo y de esta forma no tener > que hacer refencia a dicha clase. > > Saludos Cordiales > ======== > | ISMAEL | > ======== > Only for the small landowners and Cubans companies > Website: www.sisconge.byethost15.com > www.sisconge.hol.es > > > ------------------------------------------------------------------------------ > > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es >

Reply by email

Jesus Reyes
to Ismael L. Donis Garcia

Alfred seguramente se refer�a a usar la misma t�cnica de la "clase de acceso" usada en el evento OnSelectEditor, solo que hay una diferencia, en el evento OnSelectEditor, la instancia del editor viene dada en el par�metro "Editor", pero como el evento OnEditButtonClick es solo una notificaci�n y no proporciona informaci�n a cerca del editor �(el par�metro Sender del OnEditButtonClick es el grid especifico que origin� la notificaci�n) lo que se necesita es un medio alternativo de obtener el editor.� Justo para eso existe la funci�n EditorByStyle, y su uso ser�a algo as� como:

procedure DBGrid1EditButtonClick(Sender: TObject);
var
� Editor:TWinControl;

....

� Editor := DbGrid1.EditorByStyle(cbsAuto);
� if Editor is TCompositeCellEditor then begin
� � ...
� ��TCompositeCellEditor(Editor).GetActiveControl.SetFocus;

� � ...

� end;

Para poder usar cbsAuto el unit Grids debe estar en el uses. cbsAuto en un DbGrid nos regresa el editor seleccionado para el campo (o columna) actualmente seleccionado.

No lo prob� pero deber�a funcionar :)

Saludos.

Jesus Reyes A.

Reply by email

Ismael L. Donis Garcia
to Jesus Reyes

1 Mill�n de Gracias (La verdad que me has ayudado m�s de 1 mill�n)

Funcion� perfecto, solo le tuve que hacer un peque�o cambio al c�digo que me mandaste. Y otro cambio m�s porque yo program� una tecla caliente que simula el click del bot�n sin haber dado click en el, por lo que dicha tecla caliente dispara el bot�n sin estar este visible.

Al final qued� de la siguiente forma:

...
type
  TCompositeCellEditorAccess=class(TCompositeCellEditor);

...

var
  Editor: TWinControl;
...
Editor := DbGrid1.EditorByStyle(cbsAuto);
if Editor is TCompositeCellEditor then begin
  if (TCompositeCellEditorAccess(Editor).Visible) then //esto fue lo que agreg� por la tecla caliente
    TCompositeCellEditorAccess(Editor).GetActiveControl.SetFocus;
end;

Jesus creo que ser�a bueno que le implementaras una propiedad al TCompositeCellEditor para que el bot�n no tomara el focus. �sea una propiedad como: TCustomBoton.TabStop que si pones como valor False siempre deje el foco en el TCustomEdit y si le asignas True que si deje el focu en el boton. Que crees?. Podr�s implementar dicha propiedad?

Perdona que con tu ayuda te asigne trabajo, pero creo que esto lo que trae consigo es un sistema mejor por lo que repercute en el bien de todos.

Saludos Cordiales
========
| ISMAEL |
========
Only for the small landowners and Cubans companies Website: www.sisconge.byethost15.com
www.sisconge.hol.es

Earlier message 74 lines
----- Original Message ----- From: Jesus Reyes To: Spanish version of Lazarus List Sent: Friday, August 02, 2013 4:55 PM Subject: Re: [Lazarus-es] Error SIGSEGV en TDBGridencolumna conpropiedad .ButtonStyle:=cbsEllipsis Alfred seguramente se refer�a a usar la misma t�cnica de la "clase de acceso" usada en el evento OnSelectEditor, solo que hay una diferencia, en el evento OnSelectEditor, la instancia del editor viene dada en el par�metro "Editor", pero como el evento OnEditButtonClick es solo una notificaci�n y no proporciona informaci�n a cerca del editor (el par�metro Sender del OnEditButtonClick es el grid especifico que origin� la notificaci�n) lo que se necesita es un medio alternativo de obtener el editor. Justo para eso existe la funci�n EditorByStyle, y su uso ser�a algo as� como: procedure DBGrid1EditButtonClick(Sender: TObject); var Editor: TWinControl; .... Editor := DbGrid1.EditorByStyle(cbsAuto); if Editor is TCompositeCellEditor then begin ... TCompositeCellEditor(Editor).GetActiveControl.SetFocus; ... end; Para poder usar cbsAuto el unit Grids debe estar en el uses. cbsAuto en un DbGrid nos regresa el editor seleccionado para el campo (o columna) actualmente seleccionado. No lo prob� pero deber�a funcionar :) Saludos. Jesus Reyes A. ------------------------------------------------------------------------------ De: Ismael L. Donis Garcia <ismael en citricos.co.cu> Para: Spanish version of Lazarus List <lazarus-es en lists.lazarus.freepascal.org> Enviado: Jueves, 1 de agosto, 2013 16:01:53 Asunto: Re: [Lazarus-es] Error SIGSEGV en TDBGrid encolumna conpropiedad .ButtonStyle:=cbsEllipsis Me podr�as explicar esto un poquito m�s (yo nunca he trabajado con delphi, es m�s nunca lo he instalado), vengo de Visual Estudio, o mejor dicho quiero venir. Y por tal motivo este entorno y modo de hacer las me resulta bastante estra�o. Yo en el formulario lo que tengo es el evento: procedure DBGrid1EditButtonClick(Sender: TObject); Si en ese evento pongo: TCustomEdit.Focused := True; Me da el error: ufcini.pas(760,23) Error: Only class class methods, class properties and class variables can be accessed in class methods ufcini.pas(760,23) Error: Only class methods, class properties and class variables can be referred with class references ------------------------------------------------------------------------------

Reply by email