Entwickler-Ecke

Sonstiges (Delphi) - MDI-Fenster mit Maximaldarstellung und Registerlasche


Anateus - Do 07.10.10 09:00
Titel: MDI-Fenster mit Maximaldarstellung und Registerlasche
Hallo,
man findet ja in vielen Anwendungen nicht mehr die klassische MDI-Darstellung von Child-Fenstern, die wie Windows im MDI-Parent gestabelt werden, sondern die MDI-Child werden in Maximalgröße im MDI-Parent dargestellt und erhalten so eine Registerlasche. Diese Registerlasche hat man rechten Rand ein X-Symbol, mit dem man das Fenster wieder schließen kann.
Wenn mehrere MDI-Childs geöffnet sind, dann werden diese Registerlaschen nebeneinander gereiht (ähnlich wie beim Excel).
Zu guter Letzt suche ich nun eine Komponente für Delphi7, damit ich diesen viuellen Effekt so hinbekomme.
Kann mir da jemand von Euch weiterhelfen?
Gruß
Fred


bummi - Do 07.10.10 09:27

Vorschlag:

Delphi-Quelltext
1:
2:
3:
NeuesFenster := TNeuesFenster.Create;
NeuesFenster.Show;
NeuesFenster.ManualDock(PageControlAufparent,nil,alNone);

Auf dem PageControl Tabvisible für alle Tabs auf False schalten und ein egens Control für die Tabs drüberlegen (z.B.) abgeleitet von TGraphicontrol, hier kannst Du Caption und Schließenbuttons darstellen und abarbeiten


Anateus - Do 07.10.10 10:38

Den Vorschlag finde ich gut, komme aber noch nicht ganz damit klar.
Kannste das noch ein wenig ausführlicher darstellen?
Danke.
Fred


bummi - Do 07.10.10 11:16

aber nur anreissen ok ;-)


FFromlist ist eine Stringlist erzeugt im Contructor und Freigegeben in destructor


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.NeuesFeneter;
var
  i:Integer;
  f:TForm;
begin
  f := TForm2.Create(self);
  FFromlist.AddObject(f.Caption,f);
  With f do
    begin
      show;
      manualdock(PC,nil,alNone);
    end;
 for I := 0 to PC.PageCount -1  do PC.Pages[i].tabvisible := false;
 PC.ActivePageIndex := pc.PageCount - 1;
 UpdateMyTabControl;
end;


UpdateMyTabControl würde jetzt in Deiner komponente die Strings aus FFromlist als tabs anzeigen, den letzten selektieren.

Bei Klick auf eine im tab gemaltes schließen :

Delphi-Quelltext
1:
2:
3:
4:
  FFromlist.Objects[index].Free
  FFromlist.Delete(index);
  PC.ActivePageIndex := pc.PageCount - 1;
  UpdateMyTabControl;


Anateus - Do 07.10.10 16:26

Ich bedanke mich recht herzlich für Deine Hilfe.
Gruß
Fred