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
Seite 3 von 3     123   
Schwedenbitter

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

AW: Erscheinen

  Alt 25. Okt 2010, 23: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 Object_p.zip (2,8 KB, 2x aufgerufen)
Dateityp: zip Procedure_p.zip (3,1 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
 
#22

AW: Erscheinen

  Alt 26. Okt 2010, 13: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, 2x 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
 
#23

AW: Erscheinen

  Alt 26. Okt 2010, 14: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 14:29 Uhr)
  Mit Zitat antworten Zitat
Schwedenbitter

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

AW: Erscheinen

  Alt 26. Okt 2010, 17:32
Schau doch einfach mal in welcher Rubrik die ihren Thread gestartet haben
Ich habe keine Ahnung, was Du mir damit sagen willst.

Unter D2010 habe ich ein anderes Verhalten, als du beschrieben hast
...
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.
Genau das ist ja mein Problem bzw. ein Bestandteil des Problems. Komischer Weise kann ich dass nicht mehr rekonstruieren. Wenn ich mal eben kurz 2 Forms erstelle und auf der 2. Form bei OnActivate ein ShowMessage('SubForm.OnActivate()'); eintrage, kommt das nicht mehr beim Programmstart. Ich habe beim Erstellen meiner Komponente aber zur Kontrolle für alle 5 Events jeweils Messages kommen lassen; und zwar sowohl in der Komponente als auch in den betreffenden Forms. Die Events reiche ich einfach nur durch.
Aber egal...

Da ich das Problem aber mittlerweile habe lösen können, habe ich auch keine Lust, mein Programm wieder zurück zu bauen.
Die Lösung war übrigens so einfach: Am Ende des Einblendens wird das FCanFade aus meinem letzten Beitrag einfach auch auf False und erst beim nächsten OnShow wieder auf True gesetzt. Damit gibt es kein Einblenden mehr, wenn ein nicht-modales Fenster geschlossen wird.

Danke, Alex
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
 
#25

AW: Erscheinen

  Alt 26. Okt 2010, 20: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
Schwedenbitter

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

AW: Erscheinen

  Alt 8. Nov 2010, 11:44
@Sir Rufo

Danke für die doch recht ausführliche Antwort. Endlich habe ich das mit der Aktualisierung der Uploads verstanden. Das Problem ist nur, dass ich ja nicht immer ein Softwareprojekt aus einer Sache machen will.

Ich hoffe insoweit auch, dass meine weitere Frage aber schon zu der aktuellen Rubrik passt:
Ich habe in meinem Code eingebaut, dass das Faden sowohl beim Ein- als auch beim Ausblenden mit dem Alpha-Wert endet bzw. beginnt, den der Entwickler zur Laufzeit oder bereits beim Entwurf festgelegt hat. Der Code soll ja individuell einsetzbar sein. Beim Einblenden gibt es da kein Problem. Ich selbst setze Visible erst auf True. Aus diesem Grunde merke ich mir AlphaBlendValue und ändere diesen von 0 an schrittweise bis zum alten Wert.

Beim Ausblenden flackert es aber. Dies ist bedingt dadurch, dass ich sofort nachdem AlphaBlendValue den Wert 0 erreicht hat, Visible:=False; setze und dann AlphaBlendValue wieder auf den alten Wert. Komischer Weise bewirkt das setzen von Visible aber nur etwas auf langsamen Rechnern. Bei schnellen kommt der alte Alpha-Wert eher an als Visible:=False; Auch ein Application.ProcessMessages; sofort nach dem Setzen von Visible bringt nichts.

Ich habe daher die Idee, den alten Wert nicht in AlphaBlendValue, sondern in TForm.Tag zu speicher. Die Idee für so etwas ist sicher nicht neu.

Meine Frage ist nur, ist das üblich, kann man das bedenkenlos machen oder handelt man sich dann andere Probleme ein?

Ich hoffe, mich verständlich ausgedrückt zu haben. Ansonsten bitte nachfragen.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 04:17 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