Delphi Application MDI et la barre de titre de la MDI Enfants
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.
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...