Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi AnimateWindow und Komponetenverlust (https://www.delphipraxis.net/34368-animatewindow-und-komponetenverlust.html)

Shadow 21. Nov 2004 23:24


AnimateWindow und Komponetenverlust
 
Hi. Vieleicht hat jemand von euch ne Idee und kann mir hier
weiter helfen.

Ich Lade wie folgt ein Formular :
(Fomx = TForm)

FormX.BringToFront;
AnimateWindow(FormX.Handle, 1000, AW_BLEND);
FormX.Show;

das klappt auch super... dennoch sind einige Komponenten auf dem Formular wie z.B.
eine Radiobox oder auch der Inhalt einer Listbox nach dem SHOW auf dem Formular nicht sichtbar.
Wenn man die bereiche durch anklicken markiert (z.B. in der Listbox) kommen die Komponenten bzw.
deren inhalte zum vorschein.

Ich kann den fehler beheben in dem ich in der OnShow Procedure des jeweiligen Formulars die Komponenten refreshe (z.B. ListBox1.refresh). Allerdings will ich diesen Weg vermeiden, da ich wenig lust habe alle kommponten eines Formulares jedes mal zu refreshen.

hat jemand von euch ne idee woher der "fehler" kommt und wie ich das elegant lösen könnte


p.s. das bringt auch nix :

FormX.BringToFront;
AnimateWindow(FormX.Handle, 1000, AW_BLEND);
FormX.Show;
FormX.refresh; <--------- :(

Mfg Andy

Duffy 22. Nov 2004 06:16

Re: AnimateWindow und Komponetenverlust
 
Hallo Shadow,
vielleicht bringt ja
Delphi-Quellcode:
FormX.Invalidate
was ...
In der Delphi Hilfe steht:
Delphi-Syntax:

procedure Invalidate; virtual;

Beschreibung

Verwenden Sie Invalidate, wenn das gesamte Steuerelement neu gezeichnet werden muss. Wenn mehrere Bereiche innerhalb des Steuerelements neu aufgebaut werden müssen, zeichnet Invalidate das gesamte Fenster ohne Bildschirmflackern neu. Die Leistung wird durch mehrfache Aufrufe der Methode Invalidate vor dem Neuzeichnen des Steuerelements nicht beeinträchtigt.

bye
Claus

Shadow 22. Nov 2004 13:34

Re: AnimateWindow und Komponetenverlust
 
Hi Duffy,

habe es mit Invalidate an vielen Stellen probiert. Die Komponenten werden neu gezeichnet. Dennoch
ist der Inhalt einiger Komponenten nicht sichtbar, wieder erst beim selektieren mit der Maus. Bringt
also leider nix :( . Würde gerne wissen wieso das nicht klappt :wink: :)

Habe schon daran gedacht ne procedure zu schreiben die alle Komponenten refresht

for i:=0 to FormX.componentcount-1 do
if FormX.component.classtype = TEdit then (Formx.component as TEdit).refresh;
....

aber das find ich nicht so elegant ;-)

Mfg Andy

jim_raynor 22. Nov 2004 13:37

Re: AnimateWindow und Komponetenverlust
 
Zitat:

Zitat von Shadow
for i:=0 to FormX.componentcount-1 do
if FormX.component.classtype = TEdit then (Formx.component as TEdit).refresh;
....

Das geht auch einfacher:

Delphi-Quellcode:
for i:=0 to FormX.componentcount-1 do
  if FormX.component is TControl then TControl(Formx.component).refresh;

Neutral General 22. Nov 2004 13:39

Re: AnimateWindow und Komponetenverlust
 
Funktioniert es denn mit dem Refreshen von Komponenten ?
Wenn ja, dann würde ich die Procedure die du eben angedeutet hast benutzen ...
Was anderes bleibt dir ja wohl dann nicht übrig und soo unschön find ich das auch nicht... :wink:

Shadow 22. Nov 2004 13:46

Re: AnimateWindow und Komponetenverlust
 
@jim_raynor : Hast recht ist in dem Fall besser.. spart man sich nen bischen tipparbeit da ich ja
leier nicht nur Edits refreshen muß :-D

@Neutral General: Also wenn ich die Komponenten eizelnt (wie im letzten Beitrag) refresh funktioniert das.
Also so lange niemand anderes ne Idee hat woran das liegt, werde ich diesen Weg auch gehen müssen :)

mfg Andy

DevilsCamp 29. Nov 2005 08:32

Re: AnimateWindow und Komponetenverlust
 
Ich habe z.Z. das selbe Problem.

Mit folgendem Code werden mir zwar die Komponenten alle angezeigt, allerdings verlieren einige Komponenten dann ihren 3D-Look (bisher beobachtet bei: TRichEdit, TEdit, TMemo, TTreeView, TListBox und TProgressBar):
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  i : Integer;
begin
  AnimateWindow(Handle, 250, AW_BLEND or AW_ACTIVATE);

  for i := 0 to ComponentCount-1 do
    if (Components[i] is TControl) then
      (Components[i] as TControl).Repaint;

end;

So soll's aussehen:
http://www.myrasmussen.de/bilder/richtig.png

Und so sieht es aus:
http://www.myrasmussen.de/bilder/falsch.png


Den 3D-Look bekommen die Komponenten dann erst, wenn sie vom System her aufgefordert werden sich neu zu zeichnen (weil sie z.B. verdeckt waren)
Hat jemand eine Idee?

Luckie 29. Nov 2005 08:45

Re: AnimateWindow und Komponetenverlust
 
Die Probleme hatte ich ohne die VCL bei meinem PasswordRecover auch. Ist zwar ein nettes Gimmick, macht im Endeffekt aber eigentlich nur mehr Probleme. Ich habe diesen Effekt dann auch nur beim Minimieren in die TNA genutzt.


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