Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Fé de erratas

En lo que comento respecto a lo de Neftali, estoy equivocado. Ciertamente hay diferencia entre mostrar modal o no al formulario principal. Pero es que esa no fue la pregunta original. La pregunta fue: ¿qué diferencia hay entre Form1.ShowModal y Application.Run?

// Saludos
Responder Con Cita
  #2  
Antiguo 08-08-2006
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 23
Enan0 Va por buen camino
mi respuesta queda totalmente invalidada, ya que no interprete correctamente lo que pedia mmusashi.
Responder Con Cita
  #3  
Antiguo 08-08-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman
¿qué diferencia hay entre Form1.ShowModal y Application.Run?
Creo que lo mejor es un ejemplo.

Con este código resula este ejemplo:
Código Delphi [-]
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Form1.ShowModal;
//  Application.Run;

Y con este otro código resulta este otro:
Código Delphi [-]
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
//  Form1.ShowModal;
  Application.Run;

Ambos resultados son bastante diferentes, sobre todo si se intenta acceder al segundo formulario.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 08-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Les gusta rizar el rizo ¿verdad? Ok. Entonces repregunto:

Entre esto:

Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  //Application.CreateForm(TForm1, Form1);
  Form1 := TForm1.Create(Application);
  Form1.ShowModal;
  //Application.Run;
end.

y un dpr normal:

Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  //Form1 := TForm1.Create(Application);
  //Form1.ShowModal;
  Application.Run;
end.

¿cuál es la diferencia a efectos prácticos? Sigo sin ver ninguna.

// Saludos
Responder Con Cita
  #5  
Antiguo 08-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Voy a ver si puedo aclarar un poco.

Normalmente, una aplicación en Windows consiste de un ciclo que procesa los mensajes y que no termina sino hasta que se recibe el mensaje de finalización. Esto es básicamente lo que hace Application.Run.

Por otra parte, una ventana modal es muy similar: entra a su propio ciclo de mensajes hasta que recibe el que la obliga a cerrarse.

En resumen, en ambos casos se tiene algo similar a:

Código:
REPEAT
  ObtenMensaje(Mensaje);
  ProcesaMensaje(Mensaje);
UNTIL Mensaje = TERMINAR;
En estos términos, podemos valernos del ciclo de mensajes del formulario principal para sustituir al de la aplicación. Claro que eso implica algunos cambios. En el ejemplo de Neftali, el segundo formulario debe tener su propiedad Visible en true de manera que se muestra aun antes de que decidamos si el principal se muestra normal o modalmente.

Pero si dejamos que únicamente el formulario principal se cree de entrada (cosa que normalmente hacemos de cualquier forma), y creamos los demás conforme los requerimos, entonces todo ello se puede hacer desde el ciclo de mensajes del formulario principal mostrado modalmente.

La pregunta es entonces, si el usar este ciclo de mensajes, el de un formulario en lugar del de la aplicación, tendrá algún efecto colateral.

// Saludos
Responder Con Cita
  #6  
Antiguo 09-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
Poner el código de uno u otro caso, no nos dice nada a efectos prácticos.
Vaya, y yo que pensaba que el código fuente tenía ciertos efectos prácticos... qué le voy a hacer, estaba equivocado.

Resulta que este código fuente:

Código Delphi [-]
function TCustomForm.ShowModal: Integer;
var
  WindowList: Pointer;
  SaveFocusCount: Integer;
  SaveCursor: TCursor;
  SaveCount: Integer;
  ActiveWindow: HWnd;
begin
  CancelDrag;
  if Visible or not Enabled or (fsModal in FFormState) or
    (FormStyle = fsMDIChild) then
    raise EInvalidOperation.Create(SCannotShowModal);
  if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
  ReleaseCapture;
  Application.ModalStarted;
  try
  Include(FFormState, fsModal);
  ActiveWindow := GetActiveWindow;
  SaveFocusCount := FocusCount;
  Screen.FSaveFocusedList.Insert(0, Screen.FFocusedForm);
  Screen.FFocusedForm := Self;
  SaveCursor := Screen.Cursor;
  Screen.Cursor := crDefault;
  SaveCount := Screen.FCursorCount;
  WindowList := DisableTaskWindows(0);
  try
    Show;
    try
      SendMessage(Handle, CM_ACTIVATE, 0, 0);
      ModalResult := 0;
      repeat
        Application.HandleMessage;
        if Application.FTerminate then ModalResult := mrCancel else
          if ModalResult <> 0 then CloseModal;
      until ModalResult <> 0;
      Result := ModalResult;
      SendMessage(Handle, CM_DEACTIVATE, 0, 0);
      if GetActiveWindow <> Handle then ActiveWindow := 0;
    finally
      Hide;
    end;
  finally
    if Screen.FCursorCount = SaveCount then
      Screen.Cursor := SaveCursor
    else Screen.Cursor := crDefault;
    EnableTaskWindows(WindowList);
    if Screen.FSaveFocusedList.Count > 0 then
    begin
      Screen.FFocusedForm := Screen.FSaveFocusedList.First;
      Screen.FSaveFocusedList.Remove(Screen.FFocusedForm);
    end else Screen.FFocusedForm := nil;
    if ActiveWindow <> 0 then SetActiveWindow(ActiveWindow);
    FocusCount := SaveFocusCount;
    Exclude(FFormState, fsModal);
  end;
  finally
    Application.ModalFinished;
  end;
end;

Es prácticamente igual que este otro:

Código Delphi [-]
procedure TApplication.Run;
begin
  FRunning := True;
  try
    AddExitProc(DoneApplication);
    if FMainForm <> nil then
    begin
      case CmdShow of
        SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
        SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
      end;
      if FShowMainForm then
        if FMainForm.FWindowState = wsMinimized then
          Minimize else
          FMainForm.Visible := True;
      repeat
        try
          HandleMessage;
        except
          HandleException(Self);
        end;
      until Terminated;
    end;
  finally
    FRunning := False;
  end;
end;

Estos chicos de Borland... hay que ver lo que les gusta duplicar las cosas...
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 09-08-2006 a las 08:06:00.
Responder Con Cita
  #7  
Antiguo 09-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Has leido lo escrito?

Esa diferencia en el código es precisamente lo que lleva a uno a preguntarse qué pasa puesto que el efecto práctico parece ser el mismo según lo describí en el último mensaje.

// Saludos

Última edición por roman fecha: 09-08-2006 a las 08:10:06.
Responder Con Cita
  #8  
Antiguo 09-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
¿Has leido lo escrito?
Sí.

Cita:
Esa diferencia en el código es precisamente lo que lleva a uno a preguntarse qué pasa puesto que el efecto práctico parece ser el mismo según lo describí en el último mensaje.
"Parece ser el mismo" no es una respuesta correcta. Yo no comprendo los dos métodos, es decir, qué se lleva a cabo exactamente en uno y en otro, pero, me parece a simple vista que no son iguales, que no hacen lo mismo, y que en la práctica se utiliza uno en lugar de otro, y que por algo será, aunque yo no sepa exactamente porqué. Si ambos fueran iguales,... ¿para qué entonces duplicar el asunto? Es evidente que hay diferencias y que estas tienen que tener "efectos prácticos" distintos.

Ahora bien, estúdiese el código fuente de ambos métodos y sus correspondientes implicaciones y, apuesto a que tienen que verse diferencias prácticas en caso de utilizar uno u otro método. A bote pronto diría lo más evidente: parece que en un caso ponemos en marcha la aplicación, y en otro ponemos en marcha un formulario de la aplicación. Estas cosas no parecen ser iguales grosso modo.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 09-08-2006 a las 08:44:16.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Cierro el form1 y se finaliza la aplicación :( natalia OOP 6 17-07-2006 17:07:59
Cargar Form1->Width desde el Registro de Windows JuanErasmo C++ Builder 3 20-09-2005 11:07:55
Poner una foto background en Form1 garth C++ Builder 2 09-03-2005 20:14:05
Mantener Form1 siempre detrás de Form2 Gorka Varios 1 13-10-2004 13:13:48
Form1 calambito Windows 4 23-04-2004 06:36:01


La franja horaria es GMT +2. Ahora son las 02:20:47.


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
Copyright 1996-2007 Club Delphi