Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 26.05.12 13:42 
Hallo!

In meiner MDI-Anwendung erzeuge ich die MDIChildren wie folgt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
//...
var
  Form1: TForm1;
  aMDIChild: TForm;

//...

{Neues, leeres MDIChild erzeugen}
procedure TForm1.CreateMDIChild(const sHint: String; iTag: Integer);
begin
  {Form2 als solches wird nicht benötigt, enthält aber alle nötige Komponenten für die MDIChildren}
  aMDIChild := TForm2.Create(Self);

  if not bMaximized then
    aMDIChild.WindowState := wsNormal
  else
    aMDIChild.WindowState := wsMaximized;
//...

Das Problem ist optischer Natur: Bei Cascade sieht ja alles noch gut aus, aber bei Tile "blitzt" das neue MDIChild zuerst als Cascade an der entsprechenden Position auf, um danach per Tile entsprechend angeordnet zu werden. Das sieht man leider! Dieser Efefkt tritt auch bei jenen MDIChildren auf, die nicht aktiv sind und zB. per Next oder Previous zum ActiveMDIChild werden: Man sieht alle MDIChildren ganz kurz als Cascade, dann erst wie gewünscht, also Tile oder fsMaximized.

Egal, was ich mache, zB. FormStyle := fsMDIChild erst später, nach dem Create, zuweisen oder zuerst Visible := False, dann Visible := True - es nützt nichts. Man sieht immer zuerst Cascade.

Ich möchte eigentlich Folgendes:
1. Erzeuge ein neues (noch unsichtbares!) MDIChild.
2. Setze alle nötigen Einstellungen wie Tile oder wsMaximized.
3. Setze das neue MDIChild an die richtige Position und mache es dann erst sichtbar.

Zur Zeit ist es so, das es schon während des Creates sichtbar wird, was oben genannten Effekt hat.

:nixweiss:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 26.05.12 14:27 
Die alte MDI-Funktionalität wird eben schon ewig nicht mehr weiterentwickelt. Da gibt es einiges, das sich nicht sinnvoll machen lässt oder wo man tricksen muss.

Der von dir beschriebene Effekt lässt sich nicht gänzlich verhindern. Vor ein paar Jahren habe ich mit MDI-Fenstern mal experimentiert und habe es dann aufgrund vieler solcher Probleme ohne MDI gelöst. Das sah besser aus und ich hatte die ganzen Probleme nicht.

Am wenigsten sichtbar ist es, wenn du Visible beim Child im Objektinspektor auf False stellst (durch das Umstellen von FormStyle ist es automatisch auf True). Bei mir ist das Aufblitzen allerdings generell so gut wie gar nicht zu sehen. Ich habe gerade keinen alten PC hier um es mal da zu testen.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 26.05.12 14:50 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Die alte MDI-Funktionalität wird eben schon ewig nicht mehr weiterentwickelt.
Dachte ich mir, denn bei DelphiXE2 ist es immer noch genau so wie bei Delphi6.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Bei mir ist das Aufblitzen allerdings generell so gut wie gar nicht zu sehen. Ich habe gerade keinen alten PC hier um es mal da zu testen.
Na, so alt ist mein PC nun auch wieder nicht, höchstens so ca. 15 Jahre. :? Nein, ernsthaft, knapp 2 Jahre! Aber ich verstehe, was du meinst: Je schneller der PC (die Grafikkarte etc.), desto weniger der Effekt.

Danke! Ja, dein Tipp mit Visible bringt tatsächlich etwas.

Trotzdem - man sieht es.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!