Question

J'ai une application MDI écrit en Delphi 2006 qui fonctionne XP avec le thème par défaut.

Est-il un moyen de contrôler l'apparence de la MDI Enfants pour éviter le grand style XP barre de titre de chaque fenêtre?

J'ai essayé de réglage de la BorderStyle de la MDIChildren pour bsSizeToolWin mais ils sont tout de même rendus comme des Formes normales.

Était-ce utile?

La solution

Tous vos besoin de surcharge procédure CreateWindowHandle, comme ceci:

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.

Autres conseils

La façon MDI travaille n'a pas de gel avec ce que vous essayez de faire.

Si vous avez besoin de la "MDI" format, vous devriez envisager d'utiliser soit intégré ou un commercial accueil package, et d'utiliser la station d'accueil de l'installation d'imiter le MDI sentir.

Dans mon Delphi applications, j'utilise fréquemment TFrames et parent au formulaire principal, et de maximiser eux de sorte qu'ils occupent l'espace client.Cela vous donne quelque chose de similaire à la façon dont Outlook semble.Il va quelque chose comme ceci:

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;

Pour l'utiliser, vous pouvez simplement faire ceci:

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

Il y a un bon argument que vous devriez utiliser des interfaces (création d'une interface IModule ou quelque chose) que vous utilisez.Je fais souvent ça, mais c'est plus complexe que nécessaire pour expliquer le concept ici.

HTH

Je ne pense pas qu'il y est;dans mon expérience, MDI en Delphi est très strictement limitées et contrôlées par sa mise en œuvre dans la VCL (et peut-être aussi par l'API Windows?).Par exemple, ne pas essayer de cacher un enfant MDI (vous obtiendrez une exception si vous essayez, et vous serez d'avoir à sauter à travers un couple de API cerceaux de travailler autour de cela), ou de changer la façon dont un enfant MDI du menu principal est fusionné avec l'hôte du formulaire.

Compte tenu de ces limitations, peut-être vous devriez reconsidérer pourquoi vous souhaitez spéciaux, des barres de titre en premier lieu?Je pense qu'il y a aussi de bonnes raisons pourquoi cette MDI truc est normalisée --- vos utilisateurs peuvent l'apprécier :)

(PS:agréable de voir un Delphi question ici!)

Grâce onnodb

Malheureusement, le client insiste sur le MDI et le plus petit de la barre de titre.

J'ai travaillé une seule façon de faire qui est pour masquer la barre de titre en remplaçant les fenêtres CreateParams et ensuite créer mon propre barre de titre (simple panneau avec quelques la manipulation de la Souris pour le déplacement).Fonctionne assez bien donc je pense que je pourrais le lancer par le client et de voir si il va faire...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top