Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
Thumbs up

Bueno por ahora lo que voy a hacer es dejar los frames estaticos, es decir con la propiedad DragKind a dkDrag, de esa forma no aparece el bendito botoncito de cerrar...

eventualmente voy a colocar los frames en forms de la forma que indicas amigo Dec, es que todavia no le veo la gracia de hacerlo de esa forma contra usar directamente forms

me queda la inquietud de como capturar el evento 'al cerrar frame', ya que el evento 'onExit' se dispara solo cuando sucede 'OnHide' y no cuando el usuario apreta el botoncito cerrar....

Gracias y saludos
Responder Con Cita
  #2  
Antiguo 05-06-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
No me refería al ejemplo, sino al botón de cerrar q tienen los frames en la esquina superior derecha...
Cita:
(...) con la propiedad DragKind a dkDrag, de esa forma no aparece el bendito botoncito de cerrar..
Creo que me he perdido algo, porque, los "Frames" no tiene ningún botón "cerrar", si tú no se lo añades... me parece que estás hablando de formularios y no de "Frames"... como digo, los "Frames" son componentes que no incorporan botón alguno, son una especie de "lienzo" sobre el que situar los componentes que queramos, para reutilizarlos en otros lugares, algo así como "super paneles" (en el sentido de superhéroe), pero, no incorporan "nada" por sí mismos...

A ver qué está pasando aquí.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 05-06-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
Cool

aquí está dentro de un circulo rojo el botoncito al que hago referencia :

http://img387.imageshack.us/my.php?i...toncitooz0.jpg


seteando la propiedad dragMode a DMAautomatic y la otra que hago referencia arriba a dkDrag el frame en cuestion se puede mover fuera del form... y es cuando aparece... y no puedo capturar el evento cuando el usuario apreta allí... ahora se entiende un poco mas?
Responder Con Cita
  #4  
Antiguo 05-06-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por peccatum
aquí está dentro de un circulo rojo el botoncito al que hago referencia :

http://img387.imageshack.us/my.php?i...toncitooz0.jpg


seteando la propiedad dragMode a DMAautomatic y la otra que hago referencia arriba a dkDrag el frame en cuestion se puede mover fuera del form... y es cuando aparece... y no puedo capturar el evento cuando el usuario apreta allí... ahora se entiende un poco mas?
Sí; desde luego. Y me disculpo, pues desconocía esa cualidad de los "Frames".

Estoy tratando de hacer alguna prueba, pero, no consigo que el "Frame" se me muestre fuera del formulario (con el botón), ni aun usando las propiedades y valores que has mencionado, ¿tal vez el formulario también está implicado y necesito establecer alguna de sus propiedades de alguna manera?

Tal como imagino, tal vez podría capturarse el mensaje que Windows envíe a la ventana del "Frame" cuando se pulsa en el botón cerrar: el "Frame" no implementa un evento "OnClose", pero, podríamos mirar de capturar el mensaje de Windows susomentado. Pero como veo que el "Frame" tiene más eventos relacionados con el "Drag"... y yo en esto estoy pez... igual alguno de estos eventos sería el indicado...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 05-06-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
Cita:
Empezado por peccatum Ver Mensaje
y la otra que hago referencia arriba a dkDrag
perdon, la propiedad DragKind la pongo a dkDock, entonces se puede mover el frame a cualquier lugar, incluso se puede resizear en tiempo de ejecución...

sacar el botón de algúna forma también me serviría...

Saludos!
Responder Con Cita
  #6  
Antiguo 05-06-2008
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
Interesante cuestión

El problema aquí es que ese botón realmente no pertenece al Frame. Cualquier derivado de TWinControl tiene la capacidad de arrastrarse fuera de su contenedor; lo mismo que haces con el Frame, puedes hacerlo con un Panel, por ejemplo, o ¡incluso con un Button! Al hacerlo con este último queda más clara la situación: al arrastar el control fuera del formulario, lo que sucede es que la VCL crea un formulario en caliente, de tipo TCustomDockForm e inserta en él el control.

Así pues, es con este último formulario con quien tenemos que lidiar.

Para ello, hay que capturar el mensaje CM_FLOAT del control (el Frame) que se le manda cuando -justamente- se pone a flotar y se crea el CutomDockForm.

El mensaje manda como parámetro dicho formulario y lo que podemos hacer es reemplazar su WindowProc por uno nuestro para interceptar el mensaje WM_CLOSE.

Aquí más o menos la idea:

Código Delphi [-]
type
  TFrame2 = class(TFrame)
  private
    OldHostWndProc: TWndMethod;

    procedure CMFloat(var Msg: TCMFloat); message CM_FLOAT;
    procedure HostWndProc(var Message: TMessage);
  end;

implementation

{ TFrame2 }

procedure TFrame2.CMFloat(var Msg: TCMFloat);
begin
  inherited;
  if (TObject(Msg.DockSource.DragTarget) is TCustomDockForm) then
  begin
    OldHostWndProc := TCustomDockForm(Msg.DockSource.DragTarget).WindowProc;
    TCustomDockForm(Msg.DockSource.DragTarget).WindowProc := HostWndProc;
  end;
end;

procedure TFrame2.HostWndProc(var Message: TMessage);
begin
  if Message.Msg = WM_CLOSE then
    ShowMessage('Frame Closed!');

  OldHostWndProc(Message);
end;

// Saludos
Responder Con Cita
  #7  
Antiguo 05-06-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ahí es nada Román. Yo me ví ayer tratando de sustituir el "WindowProc" (siguiendo código tuyo, por cierto) del "Frame" y... nada de nada. Y ahora se comprende perfectamente porqué no era posible hacerlo de ese modo, por lo menos hasta donde yo llegué. Nada, nada, que el que sabe, sabe, y el que no que aprenda.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 05-06-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Hola,

Ahí es nada Román. Yo me ví ayer tratando de sustituir el "WindowProc" (siguiendo código tuyo, por cierto) del "Frame" y... nada de nada. Y ahora se comprende perfectamente porqué no era posible hacerlo de ese modo, por lo menos hasta donde yo llegué. Nada, nada, que el que sabe, sabe, y el que no que aprenda.
Hola, he estado siguendo este hilo porque nunca he usado frames, no se que beneficios aporte pero veo que tiene sus detalles, bien dices amigo dec el que sabe sabe y yo pues........ me pongo a estudiar

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
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 mostrar Resultados de una consulta en componentes como los Edit,Label y DbGrids! danny Conexión con bases de datos 2 08-05-2008 23:35:46
Como mostrar con DevExpress la grilla como quedo en la última consulta? Alexander Conexión con bases de datos 3 27-03-2007 22:37:03
Como saber si me frame esta creado en cierto evento? Albano OOP 2 15-03-2007 23:13:44
mantaner una aplicación como modal Novás Varios 3 19-02-2004 16:33:44
Como acceder a los componentes de un frame? CORBATIN OOP 7 25-07-2003 20:24:23


La franja horaria es GMT +2. Ahora son las 19:27:12.


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