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 30-06-2003
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
Dos ventanas activas

¿Cómo puede hacerse para abrir una segunda ventana y que la primera siga estando activa, o por lo menos que lo parezca?

Me explico. En varias aplicaciones, por ejemplo MS Word, cuando colocamos una barra de herramientas como una ventana independiente, tanto la barra como la ventana principal tienen su barra de título en azul.

Pienso que esto podría servirme pero concretamente lo que quiero hacer es simular una lista desplegable creando yo mi propia ventana en donde desplegar sus elementos. Esto puedo hacerlo con una ventana sin borde que coloco en la posición deseada pero al mostrar la lista se desactiva la ventana desde la que la abrí, detalle que quisiera evitar. Por ejemplo, en el IDE de Delphi, cuando se muestra la lista de métodos y propiedades de un objeto no se desactiva la ventana del editor.

¿Alguien sabe como puedo lograr esto?

// Gracias
Responder Con Cita
  #2  
Antiguo 30-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Si quieres puedes ver ese código de las RX, en los componentes TDateEdit, TRxCalc.
Igualmente te cuento que yo tengo hecho algo así, de cero, de no servirte, te puedo pasar un resumen de como lo hago.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 30-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Me faltó un detalle: creo que los popups nunca reciben el foco realmente

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 30-06-2003 a las 19:05:16.
Responder Con Cita
  #4  
Antiguo 30-06-2003
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
Cita:
Posteado originalmente por delphi.com.ar
Si quieres puedes ver ese código de las RX, en los componentes TDateEdit, TRxCalc.
Igualmente te cuento que yo tengo hecho algo así, de cero, de no servirte, te puedo pasar un resumen de como lo hago.

Saludos!
Por ahora preferiría no meterme con las RX. Normalmente siempre hay algo por lo cual no puedo instalarlas y aunque le d un vistazo al código que me indicas no parece funcionarme.

Si puedes resumirme lo que me cuentas estaría perfecto.

Gracias!
Responder Con Cita
  #5  
Antiguo 30-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Este es un combo mío que despega un CheckListBox:
Código:
  TPopupCheckList = class(TCheckListBox)
  private
  protected
    procedure KeyPress(var Key: Char); override;
    procedure CreateWnd; override;
    procedure CreateParams(var Params: TCreateParams); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
  end;

inplementation

{ TPopupCheckList }

constructor TPopupCheckList.Create(AOwner: TComponent);
begin
  inherited;
  Visible := False;
end;

procedure TPopupCheckList.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do begin
    Style := Style or WS_BORDER;
    ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
    AddBiDiModeExStyle(ExStyle);
    WindowClass.Style := CS_SAVEBITS;
  end;
end;

procedure TPopupCheckList.CreateWnd;
begin
  inherited CreateWnd;
  if not (csDesigning in ComponentState) then begin
    Windows.SetParent(Handle, 0);
    CallWindowProc(DefWndProc, Handle, WM_SETFOCUS, 0, 0);
  end;
end;

procedure TPopupCheckList.KeyPress(var Key: Char);
begin
  if (Key = #27)  or (Key = #13) Then
    TCustomCheckCombo(Owner).CloseUp
  else 
    ...
  end;
end;
Código del Combo:

Código:
constructor TCustomCheckCombo.Create(AOwner: TComponent);
begin
  inherited;
  PopupWindow := TPopupCheckList.Create( Self );
  PopupWindow.Parent  := Self;
  PopupWindow.Visible := False;
  ...
end;


procedure TCustomCheckCombo.DropDown;
begin
  { Calcula la posicion y tamaño del Popup .... }
  ...
    Windows.SetParent(PopupWindow.Handle, 0);
    PopupWindow.Visible := True;
    SetWindowPos(PopupWindow.Handle, HWND_TOP, P.X, vPos, 0, 0, SWP_NOSIZE or SWP_NOACTIVATE or SWP_SHOWWINDOW);
    SetActiveWindow(PopupWindow.Handle);
end;

procedure TCustomComboEditor.CloseUp;
begin
  SetWindowPos(PopupWindow.Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);
  PopupWindow.Visible := False;
end;
Y utiliza los mensajes WM_KILLFOCUS y CM_CANCELMODE para hacer un CloseUp por clickear fuera de la lista o perder el foco.

Espero que te sirva, creo no haber olvidado nada, si notas los nombres de las clases te darás cuenta que tengo todo un árbol de jerarquías con esto, así que no fue fácil "resumirlo", Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 01-07-2003
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
Muchas gracias por tu resumen y por el tiempo dedicado a ello. Voy a revisarlo y estudiarlo con cuidado.

// Saludos
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


La franja horaria es GMT +2. Ahora son las 22:11:01.


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