Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   String Grid (https://www.clubdelphi.com/foros/showthread.php?t=60770)

Elite237 13-10-2008 23:18:51

String Grid
 
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í:

Código Delphi [-]
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.

Código Delphi [-]
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:
Código Delphi [-]
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

Cita:

Empezado por Elite237 (Mensaje 320031)
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.

Código Delphi [-]
 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
Código Delphi [-]
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:

Código Delphi [-]
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;


La franja horaria es GMT +2. Ahora son las 03:30:52.

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