[Lazarus-es] Error SIGSEGV en TDBGrid en columna con propiedad .ButtonStyle:=cbsEllipsis
Jesus Reyes
jesusrmx en yahoo.com.mx
Mie Jul 24 19:38:14 CEST 2013
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.
________________________________
De: Ismael L. DonisGarcia <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:
procedureTform1.TDGrid1SelectEditor(Sender: TObject; Column: TColumn;
var
Editor: TWinControl);
begin
if (Editor <> nil) thenbegin
if (Column.Index = 5) then
TCustomEdit(Editor).CharCase := ecUppercase;
end;
end;
En la línea: TCustomEdit(Editor).CharCase := ecUppercase; me salta el error
"ExternalSIGSEGV"
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.
_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130724/34aaa1a3/attachment-0002.html>
More information about the Lazarus-es
mailing list