Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MDI Child Name in TPageControl verwalten (https://www.delphipraxis.net/6112-mdi-child-name-tpagecontrol-verwalten.html)

flow 30. Jun 2003 07:55


MDI Child Name in TPageControl verwalten
 
Hallo,

hab ein kleines Problem mit meiner Anwendung.

Ich hab einen Text Editor der bei jeder geöffneten Datei eine MDI CHild erzeugt und nebenbei noch in einer TPageControl einen Button für dieses MDI CHild reinsetzt. Das soll so wie eine Taskleiste wirken, um deine geöffnete Datei in den Vordergrund zu holen braucht man einfach nur auf die Pagecontrol zu klicken.

Ich habs soweit das ich für jedes neue MDI CHild einen neuen Button erzeuge und soweit das wenn ich ein Child schließe der Button auch weg kommt. Jedoch möcht ich den Befehl abfangen wenn der User unter dem Menü Window eines der geöffneten Fenster anklickt. Dann soll der Button in der PageControl der zum dementsprechenden Child gehört auch aktiv werden. Kann ich es irgendwie abfangen wenn ein bestimmtes MDI Child aktiv wird?

Ich hoff ich hab das einigermaßen verständlich erklärt! Außerdem ists ja Montag morgen, da geht sowieso noch nicht viel :drunken: !

FLOW

Garby 30. Jun 2003 10:42

Hi Flow,

genau die gleiche Vorgehensweise habe ich in meinen Programmen auch realisiert.

Ich habe erstmal für alle Clientformulare eine Basisklasse TfrmClient.
Dort eine Public-Variable gTabSheet, der das Zugehörige Tabsheet zugewiesen wird.

Für das von dir beschriebene Problem habe ich das OnActivate-Ereignis von TfrmClient verwendet.

Das schaut so aus:
Delphi-Quellcode:
procedure TfrmClient.FormActivate(Sender: TObject);
begin
  if Assigned(gTabSheet) then
    GTabSheet.PageControl.ActivePageIndex := GTabSheet.PageIndex;
end;
Zusätzlich habe ich noch die Möglichkeit geschaffen mit Ctrl+Bild auf das nächste bzw. vorige Client-Formular zu springen:
Delphi-Quellcode:
procedure TfrmClient.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_NEXT) and (Shift = [ssCtrl]) then
    GTabSheet.PageControl.SelectNextPage(True);
  if (Key = VK_PRIOR) and (Shift = [ssCtrl]) then
    GTabSheet.PageControl.SelectNextPage(False);
end;
Ich hoffe es hilft dir.

flow 30. Jun 2003 13:34

Ist TfrmClient bei dir das Child Window?

FLOW

Garby 30. Jun 2003 14:17

Im Prinzip schon, aber weil ich mehrere verschiedene Formulare in diesem Programm habe, die die gleiche Grundfunktionalität haben sollen, habe ich dieses Formular TfrmClient erstellt.
Alle Child-Formulare sind von dieser Klasse abgeleitet.

Da du wahrscheinlich sowieso nur eine Formularklasse brauchst(die du dann öfters erzeugst), kannst du den Code auch direkt ins Formular schreiben.

OK?

flow 30. Jun 2003 14:22

OK, dacht ich mir. Hat mich nur etwas verwirrt!

Zum Short Cut, eigentlich ist ja Strg+F6 ein standart Befehl um das nächste Window zu erreichen. Aber isteh besser sich nicht immer an den Windows Standart zu halten :mrgreen: !

Ich werds mal ausprobieren, danke vielmals!!!

FLOW

flow 30. Jun 2003 14:37

Danke, haut hin :wink: !

Hätt ich eigentlich auch selbst drauf kommen können aber was solls :| !

FLOW


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz