Ir al contenido


Foto

problemas con cabeceras de StringGrid1 Lazarus. Ayuda


  • Por favor identifícate para responder
27 respuestas en este tema

#21 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 17 abril 2015 - 03:52

Pues insisto y nada, no aprecio el error o fallo de programación. A ver si algun experto puede seguir dándome alguna idea al problema. No quisiera dejarlo por no poder encontrar una solución.

 

Un saludo


  • 0

#22 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 17 abril 2015 - 04:45

He visto el hilo y leí de vista rápida el tema. Tendría que sentarme un buen rato a estudiar el caso. No puedo garantizar nada, pero si llegase a disponer de tiempo mañana podría intentar algo. Por ahora estoy enfrascado en 3 proyectos en simultáneo y no me da resto.

Seguramente debe haber una forma de encararlo. No te rindas, el resto de los compañeros que tengan Lazarus tal vez pueda ir viendo otras alternativas.

Armate de paciencia. La programación requiere de eso, y mucha. No desesperes.

 

Saludos,


  • 0

#23 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 18 abril 2015 - 03:37

He visto el hilo y leí de vista rápida el tema. Tendría que sentarme un buen rato a estudiar el caso. No puedo garantizar nada, pero si llegase a disponer de tiempo mañana podría intentar algo. Por ahora estoy enfrascado en 3 proyectos en simultáneo y no me da resto.

Seguramente debe haber una forma de encararlo. No te rindas, el resto de los compañeros que tengan Lazarus tal vez pueda ir viendo otras alternativas.

Armate de paciencia. La programación requiere de eso, y mucha. No desesperes.

 

Saludos,

 

Por su puesto que tomo sus consejos Delphius, pero cuando eres principiante y los conocimientos están aún limitados, un error de este tipo requiere aparte de paciencia, alternativas que uno no tiene de momento, sino cuando ya va tomando contacto de verdad con la programacion en este entorno. Hace un mes que
empezé y uno con este poco tiempo va adquiriendo ideas y leyendo sin cansancio por este y otros foro, pero en algunos casos sin posibles soluciones.
 
Te agradezco tu inestimable ayuda amigo,  seguiré en el intento, pero no desestimo vuestra ayuda con este "pequeño" problema.
 
Un saludo

Editado por egostar, 18 abril 2015 - 07:43 .
Separar Cita de la Respuesta...

  • 0

#24 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 21 abril 2015 - 03:25

Nada sigo sin comprender mi problema y menos aún sin solución alguna, desistiré de hacer lo que buscaba con ello, y era que al pulsar dobleclick sobre una fila del stringGrid, me saltara una ventana adicional nueva. Lo tendré que hacer con un botón.

 

Un saludo


  • 0

#25 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 21 abril 2015 - 10:58

Si te he entendido bien entonces podrías logralo de la siguiente forma:

 

1- Crea un campo privado de tipo booleano FClickOnHeader : Boolean.

 

2- Intercepta el evento OnMouseUp para obtener la columna y la fila en donde se hace click y actualiza el valor del campo FClickOnHeader, este será True si haces click en una columna o fila fija.

 

 

Luego al interceptar el evento OnDblClick es muy fácil comprobar el valor del campo FClickOnHeader para ejecutar el procedimiento que desees, en el ejemplo que te pongo muestro un mensaje con el valor del índice de la fila.


php
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids;
  9.  
  10. type
  11.  
  12. { TForm1 }
  13.  
  14. TForm1 = class(TForm)
  15. StringGrid1: TStringGrid;
  16. procedure FormCreate(Sender: TObject);
  17. procedure StringGrid1DblClick(Sender: TObject);
  18.  
  19. procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  20. Shift: TShiftState; X, Y: Integer);
  21. private
  22. FClickOnHeader : boolean;
  23. { private declarations }
  24. public
  25. { public declarations }
  26. end;
  27.  
  28. var
  29. Form1: TForm1;
  30.  
  31.  
  32. implementation
  33.  
  34. {$R *.lfm}
  35.  
  36. { TForm1 }
  37.  
  38. procedure TForm1.StringGrid1DblClick(Sender: TObject);
  39.  
  40. begin
  41. if not FClickOnHeader then
  42. showmessage(IntToStr(StringGrid1.row));
  43.  
  44. procedure TForm1.FormCreate(Sender: TObject);
  45. begin
  46. FClickOnHeader := false;
  47.  
  48.  
  49. procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  50. Shift: TShiftState; X, Y: Integer);
  51. var
  52. ACol, ARow: Integer;
  53. begin
  54. StringGrid1.MouseToCell(x, y, ACol, ARow);
  55. FClickOnHeader := (ACol <= StringGrid1.FixedCols-1) or
  56. ( ARow <= StringGrid1.FixedRows-1 );
  57.  


  • 0

#26 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 22 abril 2015 - 12:01

Vere si funciona tu recomendación Wilson. Pero dándole vueltas y vueltas, el problema debe venir por el procedimiento SelectCell, ya que en cuanto pulso un click sobre una celda se activa el evento SelectCell (que luego identifica la fila que está activa y he pulsado quedando en color azul) supongamos que es la celda (2,3), pues la fila=2. Ahora al dar dobleclick a las cabeceras estás tiene el valor memorizado fila=2 (no sacando ningun valor de fila=0).

 

Ahora si antes de hacer ningun click sobre ninguna fila, sino sobre la cabecera directamente nada más arrancar la aplicación, esta si me saca el valor fila=0, pero si repito lo indicado arriba vuelve a salir mal.

 

Un saludo


  • 0

#27 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 22 abril 2015 - 06:34

Vere si funciona tu recomendación Wilson. Pero dándole vueltas y vueltas, el problema debe venir por el procedimiento SelectCell, ya que en cuanto pulso un click sobre una celda se activa el evento SelectCell (que luego identifica la fila que está activa y he pulsado quedando en color azul) supongamos que es la celda (2,3), pues la fila=2. Ahora al dar dobleclick a las cabeceras estás tiene el valor memorizado fila=2 (no sacando ningun valor de fila=0).

 

Ahora si antes de hacer ningun click sobre ninguna fila, sino sobre la cabecera directamente nada más arrancar la aplicación, esta si me saca el valor fila=0, pero si repito lo indicado arriba vuelve a salir mal.

 

Un saludo

 

Si el código que pusiste en el evento OnSelectCell es el que pasa el contenido de las celdas de la fila seleccionada a unos TEdits, entonces no debería afectar en nada y por lo tanto el código que te pasé funciona correctamente.

 

Saludos.


  • 0

#28 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 24 abril 2015 - 01:32

Gracias a todos, y en particular a Wilson que ha dado en el clavo con el problema. Ahora parece que sí funciona, al dar a la cabecera no me muestra nada y si le doy a cualquier fila me la enumera correctamente. El pequeño error que me ocasiona es que al tener un StringGrid maximizado para que vaya entrando datos segun se vayan agregando, la zona del stringGrid que no tiene datos aparece en blanco sin lineas y al pulsar dobleclick en esa zona el stringGrid interpreta que he pulsado sobre dobleclick sobre la fila que está seleccionada en ese momento en azul. Ya que no consigo que funcione a la hora de presentarlo en pantalla como un DBgrid.

 

Via libre para seguir aprendiendo despues de este bloqueo momentaneo...

 

Un saludo


  • 0




IP.Board spam blocked by CleanTalk.