Pregunta

Tengo una aplicación MDI escrito en Delphi 2006 que corre XP con el tema por defecto.

Es allí una manera de controlar la apariencia de los Niños MDI para evitar las grandes XP-estilo de la barra de título de cada ventana?

He probado la configuración de la BorderStyle de la MDIChildren a bsSizeToolWin pero todavía son prestados de forma normal.

¿Fue útil?

Solución

Toda su necesidad de sobrecarga del procedimiento CreateWindowHandle, como este:

unit CHILDWIN;
interface
uses Windows, Classes, Graphics, Forms, Controls, StdCtrls;

type
  TMDIChild = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure CreateWindowHandle(const Params: TCreateParams); override;
  end;

implementation

{$R *.dfm}
procedure TMDIChild.CreateWindowHandle(const Params: TCreateParams);
begin
  inherited CreateWindowHandle(Params);
  SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;
end.

Otros consejos

El modo MDI obras no gel con lo que estamos tratando de hacer.

Si usted necesita la "MDI" formato, usted debe considerar el uso de la incorporada o una comercial acoplamiento del paquete, y el uso de la base de acoplamiento de instalación para imitar el MDI sentir.

En mi Delphi aplicaciones, frecuentemente uso TFrames padres y ellos a la forma principal, y la maximización de ellos para que ocupen el área de cliente.Esto le da algo similar a la forma en que Outlook se ve.Se va un poco algo como esto:

TMyForm = class(TForm)
private
  FCurrentModule : TFrame;
public
  property CurrentModule : TFrame read FModule write SetCurrentModule;
end;

procedure TMyForm.SetCurrentModule(ACurrentModule : TFrame);
begin
  if assigned(FCurrentModule) then
    FreeAndNil(FCurrentModule);  // You could cache this if you wanted
  FCurrentModule := ACurrentModule;
  if assigned(FCurrentModule) then
  begin
    FCurrentModule.Parent := Self;
    FCurrentModule.Align := alClient;
  end;
end;

Para usarlo, usted puede simplemente hacer esto:

MyForm.CurrentModule := TSomeFrame.Create(nil);

No es un buen argumento de que se deben usar interfaces (creación de un IModule interfaz o algo) que utilice.A menudo lo hago, pero es más complejo de lo necesario para explicar el concepto aquí.

HTH

Yo no creo que hay;en mi experiencia, MDI en Delphi es muy estrictamente limitado y controlado por su aplicación en la CLASIFICACIÓN de viena (y quizás también por la API de Windows?).Por ejemplo, no trate de ocultar un formulario MDI secundario (obtendrás una excepción si se intenta, y usted tendrá que saltar a través de un par de API de aros para evitar que), o cambiar la forma de un formulario MDI secundario del menú principal se combina con el host del formulario.

Teniendo en cuenta estas limitaciones, tal vez debería reconsiderar por qué te gustaría tener especial las barras de título en el primer lugar?Supongo que también hay buenas razones por qué esto MDI cosas está estandarizado --- que sus usuarios pueden apreciar :)

(PS:es agradable ver un Delphi pregunta por aquí!)

Gracias onnodb

Por desgracia, el cliente insiste en MDI y el más pequeño de la barra de título.

He trabajado de una manera de hacer esto que es para ocultar la barra de título reemplazando el windows CreateParams y, a continuación, crear mi propia barra de título (sencillo panel con algunas manejo del Ratón para el movimiento).Funciona bastante bien así que creo que voy a ejecutar por el cliente y ver si se puede hacer...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top