Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MDI: Child erstellen (https://www.delphipraxis.net/20035-mdi-child-erstellen.html)

rebugger 12. Apr 2004 20:50


MDI: Child erstellen
 
Habe irgendwie einen Denkfehler:
Delphi-Quellcode:
var
  iNew_num  : Integer;
  iNew_child : TfrmChild;
begin
  if MDIChildCount > 0 then
    iNew_num := (MDIChildren[MDIChildCount - 1].Tag + 1)
  else
    iNew_num := 1;

  iNew_child := TfrmChild.Create(nil);
  with iNew_child do
  begin
    Tag    := iNew_num;
    Name   := 'CodePage' + IntToStr(iNew_num);
    Caption := 'unbenannt' + IntToStr(iNew_num);
  end;
end;
Beim ersten Aufruf hat iNew_num den Wert 1, beim 2. Aufruf den Wert 2, aber dem dritten Aufruf gibts Probleme, da schon wieder 2 rauskommt.

Mein Fehler muss hier irgendwodrin liegen:
Delphi-Quellcode:
  if MDIChildCount > 0 then
    iNew_num := (MDIChildren[MDIChildCount - 1].Tag + 1)
  else
    iNew_num := 1;

Markus K. 12. Apr 2004 21:03

Re: MDI: Child erstellen
 
Hallo rebugger,
ich habe den Fehler zwar noch nicht gefunden aber du könntest es ja auch so schreiben.
Delphi-Quellcode:
if MDIChildCount > 0 then
    iNew_num := MDIChildCount+1
else
    iNew_num := 1;
Tschüß Markus

rebugger 12. Apr 2004 21:07

Re: MDI: Child erstellen
 
Das kann aber Probleme geben:
Ich erstelle 3 Fenster (1,2,3) und Lösche das 1. (also nur noch 2,3) und will dann ein neues erstellen würde er es als 2+1 (also 3) nehmen.

Also muss er immer die Zahl des letzten + 1 nehmen.

rebugger 12. Apr 2004 21:12

Re: MDI: Child erstellen
 
Fehler gefunden: er setzt das aktive Fenster immer als MDIChildren[0]

Lösung:
Delphi-Quellcode:
  if MDIChildCount = 1 then
    iNew_num := ActiveMDIChild.Tag + 1
  else if MDIChildCount > 0 then
  begin
    if ActiveMDIChild.Tag = MDIChildCount then
      iNew_num := MDIChildCount + 1
    else
      iNew_num := (MDIChildren[MDIChildCount - 1].Tag + 1);
  end
  else
    iNew_num := 1;

Markus K. 12. Apr 2004 21:33

Re: MDI: Child erstellen
 
Hallo rebugger,
der folgende Code funktioniert bei mir...frage mich aber nicht warum :gruebel:
Delphi-Quellcode:
  if MDIChildCount > 0 then
    iNew_num := (MDIChildren[1-MDIChildCount].Tag + 1)
  else
    iNew_num := 1;
Tschüß Markus


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