[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