Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Controlar evento dobleclik de listview (https://www.clubdelphi.com/foros/showthread.php?t=70990)

Choclito 23-11-2010 14:40:32

Controlar evento dobleclik de listview
 
Buenos dias amigos del foro, decirles que como siempre con los post del foro uno aprende mas sobre programación.
Antes comentarles el motivo de este post, tengo un listview q me muestra iconos de camas dependiendo el campo de una de mi tabla en firebird ahora lo que hice con la ayuda de los post del foro, es que al hacer dobre click sobre un icono valido me muestra un form de registro de datos de los pacientes a esa cama, el codigo en el evento doble click es el siguiente:
Código Delphi [-]
procedure TF_Registro_Internacion.ListView1DblClick(Sender: TObject);
var seleccionado:string;
begin
 seleccionado:='';
seleccionado:=listview1.Selected.Caption;

 if seleccionado<>'' then
 begin
  if listview1.Selected.ImageIndex=1 then
  begin
          modulo_dir_medica.MDOQ_Nro.Close;
     modulo_dir_medica.MDOQ_Nro.ParamByName('tipo').AsInteger:=tipo.KeyValue;
     modulo_dir_medica.MDOQ_Nro.ParamByName('sala_cama').AsString:=listview1.Selected.Caption;
     modulo_dir_medica.MDOQ_Nro.Open;

        f_internaciones:=tf_internaciones.Create(Self);
    try
     f_internaciones.nro:=modulo_dir_medica.MDOQ_Nro.FieldByName('nro').AsInteger;
     f_internaciones.Edit1.Text:=seleccionado;
     f_internaciones.Edit2.Text:=tipo.Text;
     f_internaciones.ShowModal;
    finally
    f_internaciones.Release;
    end;

    end
 end
 else
//mensaje a mostrar 
end;
El problema es que cuando hago doble click en un espacio en blanco del listview me sale un error :access violation at adress 0065FAA3 in module SIHCA:exe
y en el codigo me marca la siguiente linea :
Código Delphi [-]
seleccionado:=listview1.Selected.Caption;
entiendo que cuando hago doble click en un espacio en blanco la linea anterior no tendria q mostrar texto pero no se controlar este error q se genera, les estare muy agradecido por la ayuda que me brinden amigos del foro

ecfisa 23-11-2010 17:41:26

Hola.

Creo que te podes valer de la propiedad ItemFocused del ListView:
Código Delphi [-]
 if ListView1.ItemFocused = nil then
   Exit;
 ...

Saludos. :)

cloayza 24-11-2010 01:27:38

Podria validar si existe un item seleccionado...

Código Delphi [-]

if Not Assigned(Listview1.Selected) Then
   Exit;

seleccionado:='';
seleccionado:=listview1.Selected.Caption;

Saludos...

ecfisa 24-11-2010 03:51:30

Y como no hay dos sin tres... otra forma más:

Código Delphi [-]
  ...
  if ListView1.ItemIndex = -1 then
    Exit;
  ...

Un saludo. :)

Choclito 24-11-2010 17:28:14

Gracias por los mensajes
 
Amigos del foro muchas gracias, probare el codigo y les comento como me fue

Choclito 24-11-2010 17:35:05

Error solucionado
 
Con buenas noticias ya puedo controlar el error que daba y lo solucione con el codigo propuesto por el amigo cloayza el cual es el siguiente
Código Delphi [-]
procedure TF_Registro_Internacion.ListView1DblClick(Sender: TObject);
var seleccionado:string;
begin
 seleccionado:='';
//if ListView1.ItemFocused = nil then
if Not Assigned(Listview1.Selected) Then
  exit;
              MB_OK + MB_ICONINFORMATION)
else
begin
seleccionado:=listview1.Selected.Caption;
 if seleccionado<>'' then
 begin
  if listview1.Selected.ImageIndex=1 then
  begin
          modulo_dir_medica.MDOQ_Nro.Close;
     modulo_dir_medica.MDOQ_Nro.ParamByName('tipo').AsInteger:=tipo.KeyValue;
     modulo_dir_medica.MDOQ_Nro.ParamByName('sala_cama').AsString:=listview1.Selected.Caption;
     modulo_dir_medica.MDOQ_Nro.Open;

        f_internaciones:=tf_internaciones.Create(Self);
    try
     f_internaciones.nro:=modulo_dir_medica.MDOQ_Nro.FieldByName('nro').AsInteger;
     f_internaciones.Edit1.Text:=seleccionado;
     f_internaciones.Edit2.Text:=tipo.Text;
     f_internaciones.ShowModal;
    finally
    f_internaciones.Release;
    end;

    end
 end
 else
  MsgBox ('Hospital Cristo de las Americas','Debe seleccionar Sala y Cama Habil para registrar...',
              MB_OK + MB_ICONINFORMATION)

  end;
end;
Muchas gracias amigos del foro


La franja horaria es GMT +2. Ahora son las 05:31:34.

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