Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2007
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 21
David Va por buen camino
Smile Controlar cuando se ha pulsado un botón en otra unidad (propiedades)

Hola

Tengo un DataModule con una función que me crea un formulario Modal , luego
en ese formulario cuando puso el botón aceptar tiene que realizar una función del datamodule, esto lo estaba haciendo con ModalResult = mrOk, pero esta forma ya no vale pues me desaparece la ventana, y queria algo parecido pero que la ventana no desapareciera.

Pongo como estaba antes más o menos.

Código Delphi [-]

// En el DataModule

procedure TDataModule.EjemploA;
begin
  Form1 := TForm1.Create(self);
  with Form1 do
  begin
     // Algunas cosas
    ShowModal;
    if ModalResult = mrOk then // si pulsa el botón correspondiente

       ProcedureEjemploB;
  end;

end;

procedure TDataModule.ProcedureEjemploB;
begin
  // código para mostrar un informe
end;

el caso es que quiero cambier el ModalResult = mrOk por otra cosa, quizás una propiedad o algo que me diga lo mismo, pero de tal manera que la ventana no desaparezca y se quede ahí, de tal manera que pueda pulsar al botón una y otra vez para sacar informes según criterio del usuario.

Si la mejor forma de hacerlo es con propiedades, como no las he usado, me gustaria saber de que forma lo tengo que hacer, si hay otra forma mejor, pues con hacer esa también esta bien.

Saludos
Responder Con Cita
  #2  
Antiguo 16-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Suponiendo que el procedimiento ProcedureEjemploB; esta en una unidad distinta a la del datamodulo y a la del form modal podrias llamar el ProcedureEjemploB; desde el form modal y listo, quedando el datamododule asi:
Código Delphi [-]
procedure TDataModule.EjemploA;
begin
  Form1 := TForm1.Create(self);
  with Form1 do
  begin
     // Algunas cosas
    ShowModal;
    Release;
  end;
end;

Y en el OnClik del boton que Aceptar que esta en el Form modal asi:

Código Delphi [-]
  ProcedureEjemploB;

Eso si, dicho boton ya no debe tener el ModalResult := mrOk para que no se cierre, pero a cambio de eso tendras que idear un mecanismo para que el usuario cierre el formulario cuando no lo necesite mas (Podria ser un nuevo boton para cerrar) .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 16-11-2007 a las 18:26:01.
Responder Con Cita
  #3  
Antiguo 16-11-2007
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 21
David Va por buen camino
El procedimiento B, esta en el mismo DataModule que el procedimientoA.

Y no se debe de llamar directamente desde el botón, por que igual hay que pasarle unos parametros del formulario o igual no hay que pasarselos.

Es decir :

En el botón del formulario no se debe de poner : ModuloDatos.ProcedureEjemploB;

sino que

Código Delphi [-]

procedure TDataModule.EjemploA;
begin
 //Código
 if ModalResult = mrOk then
 miArray[0] := edit1.Text;
 miArray[1] := edit2.Text;

 procedureEjemploB(MiArray:Variant);
//etc,etc.....

end

procedure TDataModule.EjemploB(MiArray:Variant);
begin
 // mostrar informe
end;

Así es más o menos el código, lo que pasa es que con el ModalResult desaparece y no es lo que quiero. Igual alguno podría pensar, pues que ponga lo de MiArray[0] := edit1.Text , en el B , pero No puede ser, por que igual se puede llamar al B, desde el formulario o desde fuera directamente, pasandole el array directo.

Saludos
Responder Con Cita
  #4  
Antiguo 16-11-2007
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 21
David Va por buen camino
¿Nadie sabe la respuesta ?
Responder Con Cita
  #5  
Antiguo 16-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por David Ver Mensaje
¿Nadie sabe la respuesta ?
Sinceramente me haz enredado con la segunda intervención, si tal vez la explicaras un poco mejor podria colaborarte.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 16-11-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Simplemente quitale la propiedad ModalResult al botón, con esto devería de resolverse tu problema.

PD: ponlo a mrNone.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web

Última edición por Chris fecha: 16-11-2007 a las 23:57:55.
Responder Con Cita
  #7  
Antiguo 17-11-2007
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 21
David Va por buen camino
pero si el botón no tiene la propiedad modalresult puesta.

Si ese no es el tema, el tema es que hago un ShowModal en el Datamodule, después espero a que pulse el botón y entonces tiene que hacer un código después del ShowModal y es llamar al otro procedure.

Código Delphi [-]
// Código del Datamodule

Form1 := TForm1.Create(Self);
With Form 1 do
begin
// código
ShowModal;

if (pulsa el botón) then

procedure B;
end;

El tema es que ahora donde pone (pulsa el botón) , tengo puesto if ModalResult = mrOk then

Y en el botón del formulario , hace comprobaciones , y si todo va bien , en código hago un ModalResult = mrOk.

Pero si no hago el ModalResult = mrOK dentro del código del botón, no ejecuta el procedure B.

Bueno lo que he hecho finalmente es hacer un pequeño ejemplo, en Delphi 6 , algo sencillo, esquematico, para explicarme mejor, voy a subir el código, lo añado. Lo llamo EjemploSimple.

A ver si alguien puede mirarlo.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip ejemploSimple.zip (10,3 KB, 2 visitas)
Responder Con Cita
  #8  
Antiguo 17-11-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Comenta la línea
ModalResult := mrOk;
y veras que ya no se te cierra el form.

Mejor utiliza otro metodo, emplea una variable, como por ejemplo
Aceptado : Boolean; .... if aceptado then ....

Estos son problemas, pequeños que se resuelven de una manera muy fácil. Si la montaña no va a Mahoma, Mahoma va a la montaña, es algo simple.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #9  
Antiguo 17-11-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Problema resuleto.

Mira, aca te devuelvo tu ejemplo, con el inconveniente resuelto.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip ejemploSimple.zip (5,3 KB, 3 visitas)
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #10  
Antiguo 17-11-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

David:

Considera que una llamada al método ShowModal espera hasta que la forma se cierra.

Sinceramente no veo cuál sea el problema de que la forma se cierre y el proceso continúe. La forma puede quedar invisible (sin destruirse) para que las sentencias siguientes accedan sin problemas a los datos que se capturaron en ella. Y cuando ya no la necesites le haces un Form1.Free;.

Claro, lo ideal es que existiera una segunda versión de ShowModal que se pudiera llamar así:

Código Delphi [-]
Var
  V :Variant;
Begin
  If Form1.ShowModal (V) = mrOK Then

Siendo V un parámetro por variable para traerse valores de resultado. Esto me ha dado una idea de biblioteca...

Otra solución sería colocar en alguna variable o campo del módulo de datos, los valores capturados en la ventana de diálogo. Haciendo eso en el evento OnClick del botón de cierre.

No dejes de comentarnos.

Al González.

Última edición por Al González fecha: 17-11-2007 a las 21:13:22.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como se si he pulsado un boton ercrizeporta Varios 11 03-04-2007 13:56:56
Cambiar propiedades cuando quito el mouse dany2006 C++ Builder 4 14-11-2006 16:21:39
Controlar cancelación en ventana de propiedades la impresora Movi Impresión 1 30-11-2004 18:58:39
he pulsado el botón enviar?? valentine API de Windows 7 02-06-2004 17:21:54
Quiero Saber como hacer que un boton se vea que esta siendo pulsado Julio César Varios 2 27-11-2003 18:34:11


La franja horaria es GMT +2. Ahora son las 03:27:45.


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