Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Minimieren eines Fensters (bei MDI anwendung) (https://www.delphipraxis.net/7119-minimieren-eines-fensters-bei-mdi-anwendung.html)

DBman 2. Aug 2003 14:51


Minimieren eines Fensters (bei MDI anwendung)
 
Hallo!
Mit welchem Befehl kann ich bei einer MDI Anwendung ein MDI Child minimieren?

Minimize ist ja was anderes , damit kann man nur die Application minimieren habe in der Hilfe aber nichts gefunden wie man ein Child-Fenster minimieren kann..?
? :bounce1: ?

DBman 2. Aug 2003 14:54

Re: Minimieren eines Fensters (bei MDI anwendung)
 
:freak: Ich möchte das aber nich mit WindowState:=wsMinimized machen , sondern einen Befehl wie Tile , der alle geöffneten Fenster minimiert

APP 2. Aug 2003 20:16

Re: Minimieren eines Fensters (bei MDI anwendung)
 
Hallo,
kopiere folgenden Code in einen onClick Event eines Buttons:
Delphi-Quellcode:
type
    { Array of form references }
    A_TForm = Array [0 .. (($fff0 div SizeOf(TForm)) - 1)]
        of TForm;
var
    ChildCount: Integer;
    CurrentMDIChildCount: Integer;
    CurrentMDIChildren: ^A_TForm;
begin
    { For some reason Delphi messes around with the MDIChildren array
      when child forms are repositioned in code, causing the routine to
      suddenly start accessing the wrong form in the middle of an
      iteration! To get around this problem, allocate some memory to
      make copies of the main form's MDIChildren array and use this
      copy throughout the rest of the routine }
    CurrentMDIChildCount := MDIChildCount;
    CurrentMDIChildren := AllocMem(CurrentMDIChildCount
        * SizeOf(CurrentMDIChildren^[0]));

    try
        { Copy all the child form references to the local
          array }
        for ChildCount := 0 to CurrentMDIChildCount - 1 do
            CurrentMDIChildren^[ChildCount] :=
                MDIChildren[ChildCount];

        for ChildCount := CurrentMDIChildCount - 1 downto 0 do
            CurrentMDIChildren^[ChildCount].WindowState := wsMinimized;

    finally
        { Free the memory allocated to the array of form
          references }
        FreeMem(CurrentMDIChildren, CurrentMDIChildCount
            * SizeOf(CurrentMDIChildren^[0]));
    end; { end try }

end;
Autor: Steve Turner, Leeds, England (gefunden in einer NewsGroup)

DBman 3. Aug 2003 10:58

Re: Minimieren eines Fensters (bei MDI anwendung)
 
HÄ WAAS?

Delphi-Quellcode:
Array [0 .. (($fff0 div SizeOf(TForm)) - 1)]
Ich meine ich hab auch schonmal was von Hexadezimalcode gehört
aber welcher Kryptiker hat sich denn bitte das alles ausgedacht?
Dann wäre da vielleicht ein Erklärungskommentar mal angebracht.

Im Übrigen kann ich da bezüglich meines Problems keine Lösung drin finden.

? :bouncing4: :firejump: :bounce1: :bounce2: ?

APP 3. Aug 2003 11:32

Re: Minimieren eines Fensters (bei MDI anwendung)
 
Zitat:

Zitat von DBman
Im Übrigen kann ich da bezüglich meines Problems keine Lösung drin finden.

Hast Du eigentlich ausprobiert was ich Dir gepostet habe, ich poste ausschließlich Sachen die ich selbst getestet habe :evil:

Mit obigem Code wird deine Frage
Zitat:

Mit welchem Befehl kann ich bei einer MDI Anwendung ein MDI Child minimieren
und vor allem
Zitat:

... sondern einen Befehl wie Tile , der alle geöffneten Fenster minimiert
sehr wohl beantwortet, wenn Du einen Erklärungskommentar wünscht, mach Dich selber schlau, ich wollte Dir nur eine Lösung anbieten.

MatthiasO 3. Aug 2003 11:55

Re: Minimieren eines Fensters (bei MDI anwendung)
 
Warum so kompliziert?
Delphi-Quellcode:
procedure MinimizeAll;
var
  i: Integer;
begin
  //Form1 ist das Hauptfenster der Anwendung
  for i := Form1.MDIChildCount - 1 downto 0 do
    Form1.MDIChildren[i].WindowState := wsMinimized;
end;
Einfach diese Prozedur bei dir einfügen und MinimizeAll aufrufen.

APP 3. Aug 2003 12:08

Re: Minimieren eines Fensters (bei MDI anwendung)
 
Hallo MatthiasO,

ich vertraue einfach mal dem Autor Steve Turner, da er auf ein Posting
antwortete, daß so ähnlich war wie Dein Code, allerdings manchmal zu
einem falschen Ergebnis führte.

Du kannst übrigens selbst nachlesen, warum es "so kompliziert" ist: :mrgreen:
Zitat:

{ For some reason Delphi messes around with the MDIChildren array
when child forms are repositioned in code, causing the routine to
suddenly start accessing the wrong form in the middle of an
iteration! To get around this problem, allocate some memory to
make copies of the main form's MDIChildren array and use this
copy throughout the rest of the routine }


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