AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erscheinen

Ein Thema von Jan.R · begonnen am 25. Aug 2008 · letzter Beitrag vom 8. Nov 2010
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

AW: Erscheinen

  Alt 21. Okt 2010, 13:27
Irgendwie stehe ich im Moment auf dem Schlauch! Kann mir bitte mal jemand sagen, warum mein Fenster beim Aufruf von Fadeout() bei diesem Code nicht verschwindet, sich zwar verschieben aber nicht mehr beenden lässt:
Delphi-Quellcode:
Unit Fading2;

Interface

Uses Forms;

Procedure FadeOut(FadeForm: TForm; Const dwTime: Integer = 200;
  Const Close: Boolean = True);

Implementation

Uses Windows;

Const
  Interval = 5;

Procedure FadeOut(FadeForm: TForm; Const dwTime: Integer = 200;
  Const Close: Boolean = True);
Var
  Done : Boolean;
  Alpha : Double;
  Step : Double;

  Procedure TimerProc(Wnd:HWnd; Msg, TimerID, dwTime: DWORD); Stdcall;
  Begin
    If Done Then Exit;
    Alpha:=Alpha - Step;
    If (Alpha < 0) Then Done:=True
    Else FadeForm.AlphaBlendValue:=Round(Alpha);
  End;

Var
  oldAlpha : Integer;
  hTimer : Cardinal;
Begin
  Done:= False;
  oldAlpha:=FadeForm.AlphaBlendValue;
  Alpha:= oldAlpha;
  Step:= Alpha / (dwTime / Interval);
  SetTimer(0, hTimer, Interval, @TimerProc);
  Repeat
    Application.ProcessMessages;
  Until Done;
  KillTimer(0, hTimer);
  If Close Then FadeForm.Close
  Else FadeForm.Visible:=False;
  FadeForm.AlphaBlendValue:=oldAlpha;
End;

End.
Idee := Brain.Activate(self); bringt bei mir im Moment eine Exception erster Güte

Guß und Dank, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: Erscheinen

  Alt 21. Okt 2010, 13:39
Ich habe gerade mal etwas ausprobiert (dieses Timer-Gedöns stört mich irgendwie):
Delphi-Quellcode:
procedure TFormBla.btnWuppdiClick(Sender: TObject);
begin
  if AnimateWindow(Handle,2000,AW_BLEND or AW_HIDE) then
    begin
      sleep(500);
      AnimateWindow(Handle,2000,AW_BLEND or AW_ACTIVATE);
    end;
end;
Während der Animation ist zwar auch der Button nicht zu sehen, dafür aber danach, und das ganz ohne Refresh.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Erscheinen

  Alt 21. Okt 2010, 15:10
Hallo DeddyH,

der Code funktioniert bei mir nicht. Ich habe es mit Deinem Code wieder probiert. Abgesehen davon, dass die Controls beim Einblenden nicht sichtbar sind, sind sie es auch danach nicht.

Ich habe es aber nun mit TTimer hinbekommen und die Datei angehängt; für Leidensgenossen. Diesmal ohne exe nur mit Quellcode zum Selbercompilieren.

Gruß, Alex
Angehängte Dateien
Dateityp: zip TimerFade_p.zip (2,9 KB, 2x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Erscheinen

  Alt 21. Okt 2010, 15:35
Delphi-Quellcode:
Procedure TForm1.BtnAnimateClick(Sender: TObject);
Begin
   self.AlphaBlend:=False;
   AnimateWindow(self.Handle, 1000, AW_BLEND Or AW_HIDE);
   AnimateWindow(self.Handle, 1000, AW_BLEND Or SW_SHOW);;
  invalidate;
End;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Erscheinen

  Alt 25. Okt 2010, 22:12
Hallo,

wie gesagt: AnimateWindow() klappt bei meinem TurboDelphi nicht. Aber ich habe 2 Lösungen gefunden. Eine als Object, dass man einfach auf die Form zieht und dann konfigurieren kann. Und eine Lösung als Procedure() mit "Timer-Gedöns". Letzteres könnte man wohl auch durch Sleep() ersetzen. Dazu habe ich aber nun keine Lust mehr

Viel Spaß beim Benutzen.

Gruß, Alex
Angehängte Dateien
Dateityp: zip Procedure_p.zip (3,1 KB, 4x aufgerufen)
Dateityp: zip Object_p.zip (2,8 KB, 3x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Erscheinen

  Alt 26. Okt 2010, 12:46
Hallo,

falls es nicht schon bemerkt wurde. Es gibt noch ein paar kleinere Fehler in der Komponente. Bis auf einen habe ich diese ausgemerzt. Es bleibt aber ein Problem bestehen:

Ich habe einiges aus einer Komponente übernommen, die ursprünglich für Delphi 6 entwickelt wurde. Da ich TurboDelphi benutze, musste ich eine ganze Menge abändern. Am meisten Probleme bereitet mir das Ereignis OnActivate() der MainForm. Dieses wird - wie bei den anderen Forms übrigens auch - bereits beim Anlegen der Forms im Speicher zum Programmstart ausgelöst. Das war bei Delphi 6 noch nicht der Fall und bedurfte damit auch keiner besonderen Behandlung. Das Problem habe ich behoben, indem ich ein Boolean FCanFade definiert habe, dass bei OnCreate() auf False und bei OnShow() auf True gesetzt wird.

Es bleibt aber ein Problem, dass OnActivate() ab (oder nur bei?) TurboDelphi auch dann ausgelöst wird, wenn das MainForm (bei den anderen Forms besteht das Problem eigenartiger Weise nicht) den Focus von einem anderen modal angezeigten Form zurück erhält.
Delphi-Quellcode:
Procedure TTest.ButtonClick(Sender: TObject;
Begin
  SubForm.ShowModal;
  // <- hier kommt jetzt OnActivate() von TTest,
  // wenn TTest das MainForm ist.
End;

...

Procedure TSubForm.ButtonClick(Sender: TObecjt);
Begin
  SubsubForm.ShowModal;
  // <- hier wird KEIN Ereignis ausgelöst
End;
Wie bekomme ich das Activate in diesem Fall weg? Es geht nicht um OnActivat()! Das muss ich entweder nicht zuweisen oder kann das Problem selbst regeln.

Ich habe bereits in der Unit Forms von Delphi 6 und TurboDelphi nachgesehen. Da FOnActivate ausnahmslos an denselben Stellen ausgelöst wird, vertehe ich noch nicht einmal, wo das Problem liegt. Man eh! Ich bin so kurz vor dem Ziel

Kann mir da bitte jemand helfen?

Neueste Version anbei. Bei der Gelegenheit: Wie machen es die anderen, dass Sie immer gleich auf der ersten Seite die aktuellste Version ihres Codes einstellen? Dann könnte ich nämlich auch den alten raus- und den neuen reinstellen.
Angehängte Dateien
Dateityp: zip FormFading2_p.zip (2,2 KB, 3x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Erscheinen

  Alt 26. Okt 2010, 13:04
Schau doch einfach mal in welcher Rubrik die ihren Thread gestartet haben

Unter D2010 habe ich ein anderes Verhalten, als du beschrieben hast

Delphi-Quellcode:
{ Form1 ist MainForm }
Form2.Show;
Hier wird jetzt für Form2 OnActivate ausgeführt. Beim Wechsel zwischen den Forms wird für das jeweilige Form OnActivate ausgeführt.

Delphi-Quellcode:
{ Form1 ist MainForm }
Form2.ShowModal;
Hier wird nur für Form2 OnActivate ausgeführt und dann ist Ruhe (auch beim Schließen von Form2)

Diese Vorgehensweise ist für mich auch logisch, denn beim Form2.ShowModal wird der Kontext von Form1 ja nicht verlassen. Bei Form2.Show können aber beide Fenster aktiv sein und bei jedem Wechsel wird eben der Event ausgelöst.

Auch das Auslösen von OnActivate bei TForm2.Create( nil ) kann ich hier auch nicht nachvollziehen. Da kommt nur das Event OnCreate und mehr würde ich auch nicht erwarten
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (26. Okt 2010 um 13:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Erscheinen

  Alt 26. Okt 2010, 19:01
Zitat von Schwedenbitter;:
Neueste Version anbei. Bei der Gelegenheit: Wie machen es die anderen, dass Sie immer gleich auf der ersten Seite die aktuellste Version ihres Codes einstellen? Dann könnte ich nämlich auch den alten raus- und den neuen reinstellen.
Die erstellen ihren Thread in der Rubrik Software-Projekte der Mitglieder

Da geht das

Darum der Hinweis, schau nach der Rubrik wo dir das aufgefallen ist
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 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