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
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
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,
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,
Editado por egostar, 18 abril 2015 - 07:43 .
Separar Cita de la Respuesta...
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
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.
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids; type { TForm1 } TForm1 = class(TForm) StringGrid1: TStringGrid; procedure FormCreate(Sender: TObject); procedure StringGrid1DblClick(Sender: TObject); procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private FClickOnHeader : boolean; { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.StringGrid1DblClick(Sender: TObject); begin if not FClickOnHeader then showmessage(IntToStr(StringGrid1.row)); end; procedure TForm1.FormCreate(Sender: TObject); begin FClickOnHeader := false; end; procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin StringGrid1.MouseToCell(x, y, ACol, ARow); FClickOnHeader := (ACol <= StringGrid1.FixedCols-1) or ( ARow <= StringGrid1.FixedRows-1 ); end; end.
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
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.
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