![]() |
AW: Erscheinen
Liste der Anhänge anzeigen (Anzahl: 2)
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 :-D Viel Spaß beim Benutzen. Gruß, Alex |
AW: Erscheinen
Liste der Anhänge anzeigen (Anzahl: 1)
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:
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.
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; 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 :wall: 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. |
AW: Erscheinen
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:
Hier wird jetzt für Form2 OnActivate ausgeführt. Beim Wechsel zwischen den Forms wird für das jeweilige Form OnActivate ausgeführt.
{ Form1 ist MainForm }
Form2.Show;
Delphi-Quellcode:
Hier wird nur für Form2 OnActivate ausgeführt und dann ist Ruhe (auch beim Schließen von Form2)
{ Form1 ist MainForm }
Form2.ShowModal; Diese Vorgehensweise ist für mich auch logisch, denn beim
Delphi-Quellcode:
wird der Kontext von Form1 ja nicht verlassen. Bei
Form2.ShowModal
Delphi-Quellcode:
können aber beide Fenster aktiv sein und bei jedem Wechsel wird eben der Event ausgelöst.
Form2.Show
Auch das Auslösen von OnActivate bei
Delphi-Quellcode:
kann ich hier auch nicht nachvollziehen. Da kommt nur das Event
TForm2.Create( nil )
Delphi-Quellcode:
und mehr würde ich auch nicht erwarten
OnCreate
|
AW: Erscheinen
Zitat:
Zitat:
Delphi-Quellcode:
ein
OnActivate
Delphi-Quellcode:
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.
ShowMessage('SubForm.OnActivate()');
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 |
AW: Erscheinen
Zitat:
![]() Da geht das Darum der Hinweis, schau nach der Rubrik wo dir das aufgefallen ist |
AW: Erscheinen
@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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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 by Thomas Breitkreuz