Frage

Ich habe eine MDI-Anwendung, geschrieben in Delphi 2006 läuft XP mit der Standard-theme.

Gibt es eine Möglichkeit zum Steuern der Darstellung des MDI Kinder, um die große XP-Stil Titelleiste der einzelnen Fenster?

Ich habe versucht, die Einstellung der BorderStyle der MDIChildren zu bsSizeToolWin aber Sie werden immer noch gerendert als normale Formen.

War es hilfreich?

Lösung

Alle Ihre Notwendigkeit - überlast procedure CreateWindowHandle, wie diese:

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.

Andere Tipps

Die Art und Weise MDI funktioniert nicht gel mit dem, was Sie zu tun versuchen.

Wenn Sie benötigen die "MDI" - format, sollten Sie erwägen, entweder mit dem gebaut-in-oder kommerziellen docking Paket, und verwenden Sie die docking-setup-zu imitieren, die MDI fühlen.

In meinem Delphi-apps, die ich Häufig verwenden Sie TFrames und Eltern Sie zu die wichtigsten form, und maximieren Sie Sie, so dass Sie den client-Bereich.Dies gibt Ihnen etwas ähnlich wie in Outlook sieht.Es geht ein wenig so etwas wie dieses:

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;

Um es zu benutzen, Sie können einfach tun diese:

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

Es gibt ein gutes argument, dass, sollten Sie die Verwendung von Schnittstellen (Erstellung einer Schnittstelle IModule oder etwas), die Sie verwenden.Ich oft tun, aber es ist komplexer als nötig zu erklären, das Konzept hier.

HTH

Ich glaube nicht, dass es ist;in meiner Erfahrung, MDI in Delphi ist sehr streng begrenzt und kontrolliert deren Umsetzung in der VCL (und vielleicht auch von der Windows-API?).Zum Beispiel, versuchen Sie nicht, versteckt sich ein MDI-Kind (Sie erhalten eine Ausnahme, wenn Sie versuchen, und Sie haben zu springen durch ein paar API-Reifen um, dass die Arbeit), oder ändern die Art und Weise ein untergeordnetes MDI-Haupt-Menü ist verschmolzen mit die host form ist.

Angesichts dieser Einschränkungen, sollten Sie vielleicht überdenken, warum Sie möchten, um spezielle Titel-bars in den ersten Platz?Ich denke, es gibt auch gute Gründe, warum dies MDI Sachen ist genormt --- Ihre Benutzer könnten es schätzen :)

(PS:schön zu sehen, Delphi Frage rund um hier!)

Dank onnodb

Leider ist der AUFTRAGGEBER besteht auf MDI und die kleinere Titelleiste.

Ich habe einen Weg, es zu tun ist, um die Titelleiste auszublenden durch überschreiben der windows CreateParams und erstellen meine eigene Titelleiste (einfaches Bedienfeld mit einigen Maus-handling für den Umzug).Funktioniert gut genug also, ich denke, ich könnte es starten, indem Sie den client und sehen, ob Sie tun...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top