![]() |
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 |
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:
Zusätzlich habe ich noch die Möglichkeit geschaffen mit Ctrl+Bild auf das nächste bzw. vorige Client-Formular zu springen:
procedure TfrmClient.FormActivate(Sender: TObject);
begin if Assigned(gTabSheet) then GTabSheet.PageControl.ActivePageIndex := GTabSheet.PageIndex; end;
Delphi-Quellcode:
Ich hoffe es hilft dir.
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; |
Ist TfrmClient bei dir das Child Window?
FLOW |
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? |
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 |
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 16:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz