PDA

Ver la Versión Completa : String Grid


Elite237
13-10-2008, 23:18:51
Hola, que tal ,tengo una duda acerca de los string grid. Resulta que quiero que al momento de hacer doble clic en una celda me arroje un panel con un radiogroup. Se que lo tengo que hacer en el evento ondblclic del stringgrid. Pero como me aseguro que esa celda fue la que le hizo doble clic el usuario?esto es para que muestre las opciones a esa pregunta.

roman
13-10-2008, 23:35:07
Intenta algo así:


var
GridCoord: TGridCoord;

begin
GridCoord := StringGrid1.MouseCoord(Mouse.CursorPos.X, Mouse.CursorPos.Y)
end;


GridCoord es un record con las coordenadas de la celda.

// Saludos

Caro
14-10-2008, 04:42:02
Hola, las propiedades Col y Row del StringGrid te indican la fila y columna de la celda seleccionada.


procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
With StringGrid1 do
showmessage(Cells[Col,Row]);
end;


Saluditos

roman
14-10-2008, 04:47:31
¡Ah mira! No había pensado en eso. Así está mucho mejor Caro :)

// Saludos

Elite237
14-10-2008, 19:01:54
Este es mi codigo...asi lo deje pero me manda un error de consulta:

procedure TForm1.sgEvaluacionDblClick(Sender: TObject);
var
evalua:string;
GridCoord:TGridCoord;
begin
GridCoord:=sgEvaluacion.MouseCoord(Mouse.CursorPos.x, Mouse.CursorPos.y);
panel1.visible:=true;
query1.close;
query1.sql.clear;
query1.sql.Add('select opci_evaluacion,opci_secc,opci_pregunta,opci_clave,opci_descripcion,opci_valor from topciones');
query1.sql.add('where opci_pregunta = '''+evalua+'''');
query1.sql.add('order by opci_descripcion');
abre(query1);
while not query1.Eof do
Begin
rgRespuestas.Items.Add(query1.fieldbyname('opci_descripcion').asstring);
End;
end;


Caro, como uso esa propiedad...con que la comparo???tengo que contar las celdas o algo asi?

Caro
14-10-2008, 19:10:03
Caro, como uso esa propiedad...con que la comparo???tengo que contar las celdas o algo asi?

Hola, no tienes que contar las celdas, lo que yo he supuesto es que tu quieres obtener el contenido de la celda donde se esta haciendo doble click, según lo ultimo que pones tu quieres que ese valor se cargue en evalua y hacer la consulta, si es así solo tienes que asignar el contenido de la celda a tu variable evalua.


With StringGrid1 do
evalua := Cells[Col,Row];


Saluditos

Elite237
14-10-2008, 19:43:34
Hola caro, fijate que cuando mando a hacer una consulta en el grid no me aparece nada, por que sera??este es mi codigo de mi boton

procedure TForm1.btnGeneraClick(Sender: TObject);
var
x:integer;
evalua:string;
begin
//Obtiene la clave del combo evaluacion
evalua:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1);
//OBTIENE LA SECCION
query1.close;
query1.sql.clear;
query1.sql.add('select secc_eval,secc_nombre,secc_clave from tsecciones');
query1.sql.add('where secc_eval = '''+evalua+'''');
query1.sql.add('order by secc_nombre');
abre(query1);
//Obtiene la clave del combo evaluacion
evalua:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1);
//OBTIENE LA PREGUNTA
query1.Close;
query1.sql.clear;
query1.sql.add('select preg_evaluacion,preg_secc,preg_clave,preg_descripcion,secc_clave from tpreguntas,tsecciones');
query1.sql.add('where preg_evaluacion = '''+evalua+'''');
query1.sql.add('and preg_secc = secc_clave');
query1.sql.add('order by preg_descripcion');
abre(query1);
//'+query1.fieldbyname('secc_clave').asstring);
//Obtiene la clave del combo evaluacion
evalua:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1);
//OBTIENE LA OPCION
query1.close;
query1.sql.clear;
query1.sql.Add('select * from topciones');
query1.sql.add('where opci_evaluacion = '''+evalua+'''');
query1.sql.add('order by opci_descripcion');
abre(query1);
x:=1;
sgEvaluacion.Cells[0,0]:='Número';
sgEvaluacion.Cells[1,0]:='Pregunta';
sgEvaluacion.Cells[2,0]:='Opcion 1';
sgEvaluacion.Cells[3,0]:='Opcion 2';
sgEvaluacion.Cells[4,0]:='Opcion 3';
sgEvaluacion.Cells[5,0]:='Opcion 4';
sgEvaluacion.Cells[6,0]:='Resultado';
while not query1.eof do
Begin
sgEvaluacion.Cells[0,x]:=query1.fieldbyname('preg_clave').AsString;
sgEvaluacion.Cells[1,x]:=query1.fieldbyname('preg_descripcion').AsString;
sgEvaluacion.Cells[2,x]:='1';
//query1.fieldbyname('preg_descripcion').AsString;
sgEvaluacion.Cells[3,x]:='3';
//query1.fieldbyname('opci_descripcion').AsString;
sgEvaluacion.Cells[4,0]:='4';
sgEvaluacion.Cells[5,0]:='5';
inc(x);
query1.next;
if x=1 then
sgEvaluacion.RowCount:=2
else
sgEvaluacion.RowCount:=x
End;

end;



lo que hago es que si la seccion donde estan las preguntas son iguales, entonces que me arroje las preguntas que tiene esa seccion, y que al dar doble clic me muestra las opciones que le corresponden a esa pregunta.

Elite237
14-10-2008, 22:36:33
Ya encontre el problema, lo que pasa es que estaba usando el mismo query, y pues lo abria y lo cerraba, claro que no me devolvia nada..ahora si..el problema es de que al dar doble clic,no me muestra las opciones en mi panel...no aparece ninguna..me puedes auxiliar carito??:)

Elite237
15-10-2008, 18:31:59
Hola, caro, una preguntota por que no me visualiza el panel con las respuestas a las preguntas??Utilice lo que me comentaste, para saber en donde hace doble clic el usuario, que es la columna 2(donde tengo mis preguntas)Mi codigo es el siguiente:


procedure TForm1.sgEvaluacionDblClick(Sender: TObject);
var
evalua:string;
begin
if sgEvaluacion.col=2 then
begin
evalua:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1);
query3.close;
query3.sql.clear;
query3.sql.Add('select opci_evaluacion,opci_secc,opci_pregunta,opci_descripcion,opci_valor,preg_clave,preg_secc from topciones,tpreguntas');
query3.sql.add('where opci_evaluacion = '''+evalua+'''');
query3.sql.add('order by opci_descripcion');
abre(query3);
while not query3.Eof do
Begin
rgRespuestas.Items.Add(query3.FieldByName('opci_descripcion').asstring);
query3.Next;
End;
panel1.visible:=true
End;
showmessage('No hay opciones para esta pregunta');
end;