FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como salir del create con modalresult
Hola a todos:
Tengo un gran problema, cuando creo una ficha, quiero o en el create o en el activate poder salir de la ficha pero no tengo forma ocea.. si hago esto no sale With tform1.create( application ) do begin case showmodal of mrok:tal y tal; mryes:tal y tal; end; free; end; ahora en el create de la tform1 esto por ejemplo claro. constructor tform1.create( owner : tcomponent ) Begin inherited create( owner ); // llamo a un procedimiento //ahora me salgo modalresult := mrok; //ó Close { se queda la ventana mostrandose pero no sale como puedo hacer que salga en este punto } end; Muchas gracias de antemano...
__________________
Juan Díaz Domain, S.A. |
#2
|
|||
|
|||
Hola:
Me parece que estás haciendo un uso muy extraño de ModalResult y ShowModal. En principio ShowModal deberías utilizarlo para mostrar otro formulario distinto, no para tí mismo. // Este código está en Form1 retorno := Form2.ShowModal; if retorno = mrOk then begin ... end else begin ... end; Y, cuando quieras salir del formulario Form2 haces // Este código está en Form2 ModalResult := mrOk; Una pregunta: ¿buscáis programadores en Delphi en Domain? Un saludo Nacho |
#3
|
|||
|
|||
Gracias nacho por la respuesta.
Pero, Prueba hacer el modalresult dentro del create a ver que ocurre... Verás que la ventana Form2 sigue viendose. Por cierto con el método que te expongo, 1 te ahoras una variable de retorno 2 el uso de case es mas rápido que el if, almenos eso tengo entendido de los tiempos de turbo-pascal, aunque claro es tan válido como otro cualquiera el uso del if, ya que las máquinas son tanrápidas ahora que..... 3 incluso te ahoras la variable form2 Gracias nacho... prueba eso y me dices... Lo del trabajo aún no necesitamos pero quién sabe...
__________________
Juan Díaz Domain, S.A. |
#4
|
||||
|
||||
El tema es que el create se ha ejecutado antes del ShowModal, si pones un BreakPoint en el evento Create del TForm y otro en donde haces el ShowModal te darás cuenta de lo que sucede, digamos que el formulario no es modal hasta que se ejecute el ShowModal.
Pero igualmente, si ven el código del método ShowModal, se darán cuenta que se ModalResult se evalúa una ves mostrado el Form, o sea que ni en el Activate puedes hacer lo que quieres. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
||||
|
||||
Una forma de hacerlo:
Código:
const CM_CLOSE = WM_USER + 1; type TForm2 = class(TForm) procedure FormCreate(Sender: TObject); private procedure CMClose(var Message: TMessage); message CM_CLOSE; end; implementation procedure TForm2.CMClose(var Message: TMessage); begin ModalResult := mrOk; end; procedure TForm2.FormCreate(Sender: TObject); begin PostMessage(Handle, CM_CLOSE, 0, 0); end; // Saludos |
#6
|
|||
|
|||
Gracias a todos..
Roman tu solución no la he probado aún, ya que al final y dentro de mi desesperación por solucionar mi problema, he capturado el evento OnPaint y parece que funciona, de hecho ya está puesto en el cliente y parece que va bien. De nuevo muchas gracias. Saludos Juan Díaz.
__________________
Juan Díaz Domain, S.A. |
#7
|
||||
|
||||
Cita:
// Saludos |
#8
|
|||
|
|||
Efectivamente Roman,
lo que he hecho es poner esto Begin @onpaint := nil; // Y ademas con una variable de la ficha private ventana_activada if not ventana_activada then begin ventana_activada := true; ejecuta_el_procedimiento; end; end; Gracias roman.
__________________
Juan Díaz Domain, S.A. |
|
|
|