Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Bug en TStringGrid (goAlwaysShowEditor) o es correcto? (https://www.clubdelphi.com/foros/showthread.php?t=77807)

elcigarra 27-02-2012 16:12:02

Bug en TStringGrid (goAlwaysShowEditor) o es correcto?
 
Buenos días. Estaba mirando mi última entrada en este foro fue el diciembre 2012. Como pasa el tiempo...

Estimados una consulta sobre Delphi7 (tal vez los otros también) sobre un funcionamiento extraño de TStringGrid

.- Puse en un Formulario un TStringGrid con 3 columnas y 10 filas
.- lo hice más corto para que para bajar a las últimas lineas haya que usar la barra de desplazamiento
.- para ponerle unos datos le puse:
Código:

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
for i:=1 to StringGrid1.RowCount-1 do begin
  StringGrid1.Cells[1,i]:='A';
  StringGrid1.Cells[2,i]:='B';
end;
end;

.- Quiero que la columna 2 no sea editable entonces
Código:

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
if (ACol = 2) then
    StringGrid1.Options :=StringGrid1.Options-[goediting]
  else
    StringGrid1.Options :=StringGrid1.Options+[goediting];
end;

.- Por para que se edite sin doble click seteo el StringGrid como
[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goAlwaysShowEditor]

Ahora... hago click en cualquier celda de la columna 1 (queda marcado para editar) y luego hago click en la columna 2 (la que no es editable)
.- Si ahora bajo el cursor por la columna 3 hasta que necesite desplazar hacia arriba, al hacerlo el valor que queda en la columna 2 es el de la columna 1. (En realidad si le ponen valores distintos es el último editable que seleccioné).

El problema es que hice una aplicación enorme y esta tontería me la achacan a un bug mío (durante un tiempo yo pensé lo mismo). Alguien sabe como corregirlo?

Caro 27-02-2012 17:21:53

Hola elcigarra, puedes solucionarlo añadiendo o quitando el goAlwaysShowEditor en el evento OnSelectCell.

Código Delphi [-]

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
 if (ACol = 2) then
   StringGrid1.Options :=StringGrid1.Options-[goediting, goAlwaysShowEditor]
 else
   StringGrid1.Options :=StringGrid1.Options+[goediting, goAlwaysShowEditor];
end;

Saluditos

Casimiro Notevi 27-02-2012 17:40:23

Cita:

Empezado por elcigarra (Mensaje 426249)
Buenos días. Estaba mirando mi última entrada en este foro fue el diciembre 2012. Como pasa el tiempo...

Regreso al futuro :)

elcigarra 27-02-2012 17:55:47

Cita:

Empezado por Casimiro Notevi (Mensaje 426257)
Regreso al futuro :)

JAJAJAJA!!!! Es cierto... Era 2010... cuando yo además era más atento jaja

Espectacular Caro !!!, gracias


La franja horaria es GMT +2. Ahora son las 14:33:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi