Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

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/)
-   -   Panel geschmeidig ein- und ausblenden? (https://www.delphipraxis.net/193860-panel-geschmeidig-ein-und-ausblenden.html)

Headbucket 21. Sep 2017 09:50

AW: Panel geschmeidig ein- und ausblenden?
 
Hey
Zitat:

Zitat von Glados (Beitrag 1381708)
Zitat:

dass hier noch niemand TSplitView genannt hat. Dieser ist ja genau für deinen Zweck gemacht und es wurde bereits eine Animation für das Ein- und Ausblenden implementiert.
Das kann man nicht vergleichen. Versuche mal mit TSplitView einen Button von oben nach unten "easen" zu lassen.

Ich hatte mich an den Eingangspost gehalten. Dort war lediglich gefragt ein Panel von links reinzufahren. Und genau dafür ist TSplitView gemacht. Oder willst du das Panel nur partiell von links einblenden?

Grüße
Headbucket

Glados 21. Sep 2017 09:54

AW: Panel geschmeidig ein- und ausblenden?
 
Nein mir geht es darum eine rund-um-Lösung zu haben für alles mögliche. Größe ändern, Position ändern, horizontal, vertikal. Und genau das klappt jetzt alles.

stahli 21. Sep 2017 11:20

AW: Panel geschmeidig ein- und ausblenden?
 
Wenn Du mal Zeit und Lust hast, kannst Du ja mal ein kurzes Video veröffentlichen. Würde mich mal interessieren, wie das bei einer realen Anwendung rüber kommt.

Kann cool sein, kann aber auch nerven...

Glados 21. Sep 2017 11:56

AW: Panel geschmeidig ein- und ausblenden?
 
Würde ich sofort machen aber ich bin nur ein Hobby-Tipper ohne ernsthafte Projekte.

Uwe Raabe 21. Sep 2017 12:31

AW: Panel geschmeidig ein- und ausblenden?
 
Mich stört ja gewaltig das
Delphi-Quellcode:
Application.ProcessMessages
, weil dabei ja erst die gesamte Message-Queue abgearbeitet wird. Das kann sowohl zu einem Stocken der Animation führen, als auch unerwünschte Nebeneffekte oder Reentrance-Probleme verursachen. Bei simplen Testanwendungen kommt das zwar sicher kaum vor, aber in komplexen Anwendungen ist sowas durchaus denkbar.

Eine mögliche Alternative wäre, das Neuzeichnen während der Animation selbst anzustoßen. Dazu müsste in der Uses-Anweisung noch ein Winapi.Messages aufgenommen, in der AnimateControl-Methode eine neue Variable deklariert und die Animationsschleife wie folgt abgeändert werden:

Delphi-Quellcode:
uses
  Utils.Easing.Core, Winapi.Messages;
...
var
  dc: HDC;
...
 dc := GetDC(Control.Handle);
 try
   while (D <= TUtilsEasingAnimations.AnimateDuration) do
    begin
     setControlDimension(TUtilsEasingCore.EaseOutQuint(D, iStart, iEnd - iStart, TUtilsEasingAnimations.AnimateDuration));

     Control.Perform(WM_PRINTCLIENT, dc, PRF_CLIENT);
     D := GetTickCount - C;
    end;
 finally
   ReleaseDC(Control.Handle, dc);
 end;
Ist jetzt natürlich nicht in allen Lebenslagen getestet, aber für die genannten Button-Beispiele funktioniert es.

Als angenehmer Nebeneffekt kann die Referenz auf Vcl.Forms in der Uses-Anweisung nun getrost entfernt werden.

Glados 21. Sep 2017 12:41

AW: Panel geschmeidig ein- und ausblenden?
 
Habe es gerade mal mit dem Ändern einer TForm getestet.

Angenommen das Formular hat zwei Labels
[-Form1----------------]
| Label1----------------|
|-------------------------|
|-------------------------|
|-------------------------|
|-------------------------|
| Label2----------------|
[-------------------------]

Wenn ich nun mit der Animation und den Änderungen das Formular in der Höhe verkleinern möchte, dann sieht man wie Label2 zwar neu gezeichnet wird, aber die Stellen wo Label2 vorher zu sehen war,
haben noch eine Art "Label2-Caption"-Leiche, die erst entfernt wird, wenn das Formular seine Zielhöhe erreicht hat.

Aviator 21. Sep 2017 12:52

AW: Panel geschmeidig ein- und ausblenden?
 
Hast du es mal mit
Delphi-Quellcode:
DoubleBuffered := True
aller Parents der Labels probiert? Inklusive der Form?

stahli 21. Sep 2017 12:54

AW: Panel geschmeidig ein- und ausblenden?
 
Offenbar spielst Du ja "nur" herum und hast kein dringendes Projekt...
Falls Du Dich mal mit dem Thema GUI ein wenig befassen willst, kannst Du mal hier schauen: http://www.delphipraxis.net/175033-f...-schlecht.html

Die VCL ist für solche grafischen Spielereien nicht direkt ausgelegt.

Von der Idee her sollte eigentlich FMX besser dafür geeignet sein, in der Praxis aber auch nicht unbedingt.

Glados 21. Sep 2017 12:56

AW: Panel geschmeidig ein- und ausblenden?
 
Steht alles schon auf DoubleBuffered. Das von mir genutzte Label ist ein JvHTLabel. Aber auch ein Panel zeigt diese Artefakte ohne ProcessMessages.

Uwe Raabe 21. Sep 2017 12:58

AW: Panel geschmeidig ein- und ausblenden?
 
Zitat:

Zitat von Glados (Beitrag 1381764)
Wenn ich nun mit der Animation und den Änderungen das Formular in der Höhe verkleinern möchte, dann sieht man wie Label2 zwar neu gezeichnet wird, aber die Stellen wo Label2 vorher zu sehen war,
haben noch eine Art "Label2-Caption"-Leiche, die erst entfernt wird, wenn das Formular seine Zielhöhe erreicht hat.

Wieso ändert Label2 überhaupt seine Position, wenn das Form in der Höhe verkleinert wird?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 Uhr.
Seite 4 von 6   « Erste     234 56      

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