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 aktives MDIChild (https://www.delphipraxis.net/2731-aktives-mdichild.html)

[TP]Hawk274 4. Feb 2003 17:20


aktives MDIChild
 
Eigentlich hatte ich folgendes vor:
Habe in meinem MDIForm ein MainMenu eingefügt. Über dieses werden dann die einzelne Module, als MDIChild, meines Programmes gestartet. Nun wollte ich aber einigen MDIChilds auch ein eigenes MainMenu geben. Dadurch wurde aber das MainMenu meines MDIForm's mit dem MainMenu des aktuellen MDIChild's überschrieben. Somit konnte ich kein anderes MDIChild mehr öffnen. Das war Käse.
Also dachte ich mir packst du alle Menu Items in das MainMenu vom MDIForm und aktiviert's bzw. deaktiviert's dann die gewünschten Menu Items. Nun stehe ich aber vor dem Problem wie ich ermitteln kann welches MDIChild gerade aktiv ist. Dazu wollte ich die Eigenschaft ActiveMDIChild benutzen doch mit der klappt das irgendwie nicht. Muss auch sagen das ich die Eigenschaft nicht ganz verstanden haben.
Wie weiß ich nun welches MDIChild gerade den Focus hat?

Alexander 4. Feb 2003 17:23

also das aktive MDIChildwindow bekommt man so heraus:
Code:
   if ActiveMDIChild is TEditForm then
    TEditForm(ActiveMDIChild)......;

sakura 4. Feb 2003 17:25

Vorher sollte man noch überprüfen, ob überhaupt ein aktives MDI Child existiert ;)
Code:
  if ActiveMDIChild <> nil then
   if ActiveMDIChild is TEditForm then
    TEditForm(ActiveMDIChild)......;
...:cat:...

Christian Seehase 4. Feb 2003 17:26

Moin Hawk,

angenommen, Du hast zwei verschiedene MDIChild Formulare, TForm2 und TForm3, dann müsste das so gehen:

Delphi-Quellcode:
procedure TForm1.IrgendEineMethodeVonTForm1(ggf. Mit Irgendwelchen Parametern);

var
  MDI1 : TForm2;
  MDI2 : TForm3;

begin
  if (ActiveMDIChild is TForm2) then
  begin
    MDI1 := TForm2(ActiveMDIChild);
    // Mach was mit dem MDI1
    exit;
  end;
  // Mit MDI2 dann analog zu MDI1 usw.
end;

proas 4. Feb 2003 17:29

Hallo,
wenn ich Dich richtig verstanden habe möchtest Du doch nur das Menü des Aktiven MDI-Child Fensters anzeigen.

Wenn dem So ist :

Verteile in Deinem MDI-Form den Groupindex der Menüpunkte so, das der Groupindex des MDI-Child-Fenster-Menü-Eintrags einen Groupindex Wert bekommt der sich entweder zwischen den Werten des Hauptformulars oder größer als dessen Werte bewegen.

Beispiel

Menüpunkt Groupindex
Datei 0
Bearbeiten 1
Hilfe 3

Dein 1. Childfenster
Fenster1 2

Dein 2. Childfenster
Fenster2 2

Resultat bei aktivem Childfenster 1
Datei Bearbeiten Fenster1 Hilfe

Resultat bei aktivem Childfenster 2
Datei Bearbeiten Fenster2 Hilfe

Ich hoffe das war das was Du wolltest.

darkstone 4. Feb 2003 17:31

Am leichtesten gehst aber mit dem GroupIndex

Im MainMenu des MDIForms die jeweiligen "GroupIndex" der MenuItems setzen (z. B. das erste hat 0, das zweite hat 5)
Im MDIChild ein MainMenu erstellen und GroupIndex z. B. auf 2 sezten.
Beim aktivieren des jeweiligen MDIChilds sollte dann das MainMenu des MDIForms automatisch gemerged werden.

proas 4. Feb 2003 17:35

... es sollte gemerged werden.

Ich habe da noch das Problem wenn das Menü im Abgeleiteten Formular erweitert wird funktioniert das mit dem mergen nicht mehr richtig.
Auch wird dann der Menü-Eintrag 2pixel höher gezeichnet als die anderen.

Kennt jemand eine Menü-Komponente die mit MDI-Fenstern richtig funktioniert ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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