AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem mit Liste der geöffneten MDI-Child-Fenster
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Liste der geöffneten MDI-Child-Fenster

Ein Thema von hincapie · begonnen am 1. Mär 2006 · letzter Beitrag vom 6. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von hincapie
hincapie

Registriert seit: 24. Mär 2005
200 Beiträge
 
Delphi 5 Professional
 
#1

Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 1. Mär 2006, 14:18
Hallo,
bei mir raucht's mal wieder!
Also, ich habe da einen Editor als MDI-Anwendung und möchte mir die göffneten Child-Fenster als TabSheets in einem PageControl anzeigen lassen.
Dazu nutze ich folgende Prozedur:
Delphi-Quellcode:
    
procedure TFrameForm.MakeChilds;
var
  i, c: integer;
begin
  i := 0;
  c := 0;
  for i := 0 to PageControl1.PageCount -1 do
     PageControl1.Pages[i].Free;
  for c:=0 to MDIChildCount -1 do
    with tTabSheet.Create(Self) do
    begin
      PageControl := PageControl1;
      caption := MDIChildren[c].caption;
    end;
  if MDIChildCount = 0 then CoolBar1.Height := Toolbar2.Height +4
    else CoolBar1.Height := Toolbar2.Height + PageControl1.Height +8;
end;
Diese Prozedur rufe ich nun beim OnCreate des ChildFensters auf. Soweit so gut.
Bei zwei Childs funzt das auch, siehe Bild 'korrekt.jpg';
beim Öffnen des dritten Childs kommt's dann, siehe 'unkorrekt.jpg';
beim vierten ist dann wieder alles in Butter -> 'geht_wieder.jpg'.
Hat jemand eine halbwegs logische Erklärung dafür?

Ach ja, irgendwie muss ich noch auf das Beenden eines Childs reagieren, aber wie?
Beim OnDestroy mit o.g. Prozedur zählt immer noch das gerade geschlossene Fenster mit.
Miniaturansicht angehängter Grafiken
korrekt_611.jpg   unkorrekt_965.jpg   geht_wieder_265.jpg  
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 1. Mär 2006, 15:32
Hallo,

das ist völlig klar, beim freigeben der PageControls gehst Du falsch herum vor.

Ändere Deine Schleife von

for i := 0 to PageControl1.PageCount -1 do in

for i := PageControl1.PageCount -1 downto 0 do und alles ist wunderbar.

Uwe
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von hincapie
hincapie

Registriert seit: 24. Mär 2005
200 Beiträge
 
Delphi 5 Professional
 
#3

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 2. Mär 2006, 07:11
@ uwewo:
Es scheint wohl so, habe den Code umgestellt auf:
Delphi-Quellcode:
   for i := PageControl1.PageCount -1 downto 0 do
     PageControl1.Pages[i].Free;
Jetzt funktioniert es richtig! Danke für den Tipp!!

Hhm, nun brauche ich nur noch ne vernünftige Lösung für das Schliessen der Childs.
Mit dieser Schleife im OnDestroy oder OnClose des ChildFensters wird immer noch das eigentlich gerade geschlossene Fenster mit angezeigt.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 2. Mär 2006, 10:16
Zitat von hincapie:
Hhm, nun brauche ich nur noch ne vernünftige Lösung für das Schliessen der Childs.
Mit dieser Schleife im OnDestroy oder OnClose des ChildFensters wird immer noch das eigentlich gerade geschlossene Fenster mit angezeigt.
Wie wäre es, wenn Du den Pointer des gerade zu schliessenden Fensters mit an die Routine übergibst...

Dann kannst Du den abtesten und das Fenster ignorieren..

Frank
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 2. Mär 2006, 12:29
Hi hincapie,

eigentlich finde ich es eh nicht so toll, daß Du jedesmal alle
PageControls entfernst und dann alle wieder erstellst.

Du kannst doch auch über den Index, einzelne bei Gelegenheit freigeben
und neue einfach hinzufügen.

Oder verstehe ich es nicht richtig.

Uwe
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 2. Mär 2006, 12:59
Zitat von uwewo:
Hi Frank,
Ich? War nicht meine Idee!
  Mit Zitat antworten Zitat
Benutzerbild von hincapie
hincapie

Registriert seit: 24. Mär 2005
200 Beiträge
 
Delphi 5 Professional
 
#7

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 2. Mär 2006, 14:03
Zitat von Mavarik:
Zitat von hincapie:
Hhm, nun brauche ich nur noch ne vernünftige Lösung für das Schliessen der Childs.
Mit dieser Schleife im OnDestroy oder OnClose des ChildFensters wird immer noch das eigentlich gerade geschlossene Fenster mit angezeigt.
Wie wäre es, wenn Du den Pointer des gerade zu schliessenden Fensters mit an die Routine übergibst...

Dann kannst Du den abtesten und das Fenster ignorieren..

Frank
Hab noch nicht viel mit Pointern zu tun gehabt.
Wie sollte das denn Deiner Meinung nach aussehen?
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 2. Mär 2006, 15:05
Du kannst alternativ auch testen, ob das Fenster bald zerstört werden wird:
Delphi-Quellcode:
for c:=0 to MDIChildCount -1 do
  if not (csDestroying in MDIChildren[c].ComponentState) then
    with tTabSheet.Create(Self) do
    begin
      PageControl := PageControl1;
      caption := MDIChildren[c].caption;
    end;
Dann kannst du die Routine auch im OnDestroy der MDI-Fenster benutzen (wenn das Ereignis ausgelöst wird ist das Flag csDestroying schon gesetzt).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von hincapie
hincapie

Registriert seit: 24. Mär 2005
200 Beiträge
 
Delphi 5 Professional
 
#9

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 2. Mär 2006, 15:21
Zitat von Flocke:
Du kannst alternativ auch testen, ob das Fenster bald zerstört werden wird:
Delphi-Quellcode:
for c:=0 to MDIChildCount -1 do
  if not (csDestroying in MDIChildren[c].ComponentState) then
    with tTabSheet.Create(Self) do
    begin
      PageControl := PageControl1;
      caption := MDIChildren[c].caption;
    end;
Dann kannst du die Routine auch im OnDestroy der MDI-Fenster benutzen (wenn das Ereignis ausgelöst wird ist das Flag csDestroying schon gesetzt).
Danke! Funzt!!
  Mit Zitat antworten Zitat
Benutzerbild von hincapie
hincapie

Registriert seit: 24. Mär 2005
200 Beiträge
 
Delphi 5 Professional
 
#10

Re: Problem mit Liste der geöffneten MDI-Child-Fenster

  Alt 3. Mär 2006, 08:44
So, gleicher Kontext, neues Problem:

Ich möchte nun mit einem Klick auf das TabSheet das dazugehörige Child-Fenster in den Vordergrund bringen.
Diese Anweisung funktioniert nur bedingt:
Delphi-Quellcode:
procedure TFrameForm.PageControl1Change(Sender: TObject);
begin
  MdiChildren[PageControl1.ActivePageIndex].BringToFront;
end;
Beim ersten Klick wechselt nur die Reihenfolge der Tabsheets im PageControl, beim nächsten Klick wird erst das richtige Childfenster in den Vordergrund gebracht.
Hat jemand eine Erklärung dafür?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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