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 PageControl, Child-Controls verschwinden ... (https://www.delphipraxis.net/727-pagecontrol-child-controls-verschwinden.html)

MathiasSimmack 29. Aug 2002 06:49


PageControl, Child-Controls verschwinden ...
 
... beim Resizen der Form.

Hallo Leute.

Ich habe zwei PageControls. In einem steckt ein TTreeView, im anderen ein Memo/RichEdit. Wenn ich die Form verschiebe, ist alles okay. Sobald ich sie aber vergrößere, verkleinere oder maximiere, sind die Controls verschwunden, und ich sehe nur noch die scheinbar leeren Tabsheet-Seiten.
Ist aber noch alles da, denn die Knotenpunkt des TTreeView sind noch erkennbar, und beim Aufklappen "restauriert" sich das Control dann auch, und sobald ich einen Eintrag auswähle, erscheint im Memo/RichEdit auch der entsprechende Text.

Ich hab´s versucht mit Application.ProcessMessages, und mit "Update"-Aufrufen der PageControls, der aktiven Seiten und der Child-Controls (nacheinander, nie zusammen!)

Gebracht hat´s nichts.
Weiß jemand, was das für eine Merkwürdigkeit ist und welche Ursache sie hat?

Gruß,
Mathias.

sakura 29. Aug 2002 08:12

Gib doch mal einen Einblick in die Definition der Klasse des Forms. Es hört sich durchaus ein wenig seltsam an. Hast Du irgendwelche Ereignisse oder Nachichten abgefangen und vielleicht "verschluckt"?

...:cat:...

MathiasSimmack 29. Aug 2002 09:22

Nee, da sind keine besonderen Nachrichten, sakura.

Ich habe einfach nur das PageControl auf die Form gepackt, eine Seite angelegt und einen TreeView reingehauen. Das war´s. Nur das andere PageControl legt die Seiten dynamisch an. Eine wird beim Start wie folgt erstellt:
Code:
  // create 1st page
  ntab                     := TTabSheet.Create(PageControl1);
  ntab.Visible             := true;
  ntab.Caption             := 'Testseite';
  ntab.PageControl         := PageControl1;
  PageControl1.ActivePage  := ntab;

  nrich                    := TRichEdit.Create(ntab);
  nrich.Parent             := ntab;
  nrich.Align              := alClient;
  nrich.Visible            := true;
  nrich.PlainText          := true;
  nrich.Font.Name          := 'Courier New';
  nrich.Font.Size          := 10;
  nrich.ScrollBars         := ssBoth;
Ich hätt´s u.U. ja auch auf darauf geschoben, dass ich beim dynamischen Anlegen der Seiten was falsch gemacht habe. Wenn aber nicht mal das oben erwähnte, normal erstellte und immer vorhandene PageControl/TreeView funktioniert ... :?

Ich werde mal schauen, ob das was mit dem XP-Patch der "ComCtrl.pas" zu tun hat. Du weißt schon, da gab´s doch diese Änderungen für die TListView, damit´s unter XP funktioniert. Ich kann mich zwar nicht entsinnen, irgendwas am PageControl geändert zu haben, aber das ist auch schon ´ne Weile her. Möglich, dass ein vermeintlicher XP-Patch dieses Problem verursacht.

<Edit>
Tatsächlich! Da stecken sie:
Code:
procedure TTabSheet.UpdateTabShowing;
begin
  SetTabShowing((FPageControl <> nil) and FTabVisible);

// WinXP patch
  SetWindowLong(handle,GWL_EXSTYLE,WS_EX_TRANSPARENT);
end;

procedure TPageControl.Loaded;
var
  i : integer;
begin
  inherited Loaded;
  UpdateTabHighlights;

// WinXP patch
  for I:=self.PageCount-1 downto 0 do
        self.ActivePage:=self.Pages[I];
end;
Dass ich mich daran nicht mehr erinnern konnte, gibt mir zu denken ... :cry: ... Na egal. Wenn ich diese Patches auskommentiere, tritt das Verschwinden der Child-Controls nicht mehr auf.

Aber irgendeinen Sinn müssen die Änderungen doch gehabt haben, denn grundlos schreibe ich doch nicht Web-Tipps in meine Units rein. Ich hab das Programm gerade mal unter XP mit aktivem LUNA probiert. Probleme gab´s aber nicht. Hm ... :?
</Edit>

sakura 29. Aug 2002 14:07

Hast Du nur mal einen von den beiden "auskommentiert" - welcher verursacht das Problem :?:

...:cat:..

MathiasSimmack 29. Aug 2002 17:08

Allem Anschein nach ist es der erste Patch mit der "SetWindowLong"-Anweisung. In der technischen Beschreibung aus Delphi3000.com heißt es dazu:
Zitat:

You know PageControl is a container for TTabSheet controls: the first one seems to well accept new Windows XP themes, but this remains true until you add a TabSheet. And PageControls are useless without TabSheets...
Ich bin gerade im Win98. Ich werde die Sache nachher noch mal unter XP testen. Ich brauche ja bloß Parameter angeben. Für jeden legt das Programm eine neue Registerseite an und lädt den Parameter (= die Datei). Dann sehe ich ja, ob doch vielleicht irgendwo ein Problem lauert.

Der zweite Patch verursacht auf den ersten Blick erst mal nicht dieses Problem. Ich denke mal, mit Delphi 7 dürften solche User-Fixes ohnehin der Vergangenheit angehören. Immerhin wirbt Borland ja mit der kompletten Unterstützung der XP-Themes.


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