| Autor |
Beitrag |
LonghornUser
      
Beiträge: 796
|
Verfasst: Do 22.01.04 19:02
Hallo.
Ich habe mal eine Frage, die ich selber mir net beantworten kann:
Mein Programm ist in der Lage, mehrere Styles anzuwenden. Dazu weren in ziemlich viele Images externe Bilder geladen und Labels gefärbt, etc. Das dauert natürlich einen moment. Und es sieht unschön aus, wenn erst der standard-style da ist und dann nach etwa 0,5 sek. erst der neue angewandt wird. Deswegen wollte ich fragen:
1.) Welche Lösung würdet ihr (nicht ich) am besten empfinden, wenn ihr der enduser sein würdet ? (einen screen, wo steht, dass geladen wird , etc. bin für vorschläge offen)
2.) Es gibts aber auch ein Problem: Wenn die mainform, auf welcher Änderungen vorgenommen werden, nicht angezeigt werden soll, heißt das, dass sie visible:=false sein muss. Was auch geht, aber da können keine Änderungen vorgenommen werden. Da kommt immer der Fehler, dass in diesem Zustand der Zustand des Images nicht geändert werden kann. Was kann man da tun ?
Ich hoffe auf viele Antworten.
Ciao LonghornUser
Zuletzt bearbeitet von LonghornUser am Do 22.01.04 19:48, insgesamt 1-mal bearbeitet
|
|
Simon Joker
      
Beiträge: 236
Erhaltene Danke: 1
|
Verfasst: Fr 23.01.04 09:19
Hi LonghornUser
Ich finde ein Splashscreen ist ne feine Sache, besonders wenn das Laden etwas länger dauert und gerade kein Snikers da ist  . Er zeigt, das Programm arbeitet noch.
Aber wenn dann bitte ordentlich! Vier Bedingungen sollten erfüllt sein:
1. Abschaltbarkeit - eine Option zum killen wenn er mich nervt.
2. Abbrechen - ist er im Weg, ein Click darauf und weg ist er
3. Neuzeichnen - Falls ein anderes Fenster darüber war muß er neu gezeichnet werden. Nichts nervt mehr als ein Fragment auf dem Monitor und verleitet zum Verdacht des Absturzes.
4. Eine Vortschrittsanzeige - Habe ich noch ZEit für einen Kaffe oder gehts jetzt los.
Das zweite Problem kann ich nicht ganz nach vollziehen. Wann versucht du die Bilder zu ändern? Welche Events werden dabei ausgelöst? Ohen mehr Infos kann ich nur den Kaffeesatz interpretieren.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Fr 23.01.04 10:38
@LonghornUser: Hier geht es doch nicht um ein SplashScreen, oder?
|
|
Simon Joker
      
Beiträge: 236
Erhaltene Danke: 1
|
Verfasst: Fr 23.01.04 10:47
Falls er das nicht beim staren meint, habe ich ihn falsch verstanden. Sorry! Aber der Titel hat mich halt darauf gebracht! 
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Fr 23.01.04 15:17
@Simon: Jo, das kommt schon sehr nahe an das ran, was ich meinte. Zu deiner Frage, welche Events ausgelöst werden. Es existieren 2 Probleme
Die Hauptform (genannt form1) soll so lange "unsichtbar" sein, bis alles geladen ist:
1.) Die form1 kann nicht visible:=false gemacht werden (bzw. es wird dann beim ausführen ignoriert)
2.) woher weiß ich, wann alle Arbeiten abgeschlossen wurden ? Also das Ende weiß ich, da kann ich ja nen befehl ans ende der arbeitsliste setzen (fertig:=true). aber wie kann ich es realisieren, eine progressbar zu machen ? (Die Arbeiten, die verrichtet werden müssen, sind nur aktionen, wie label1.font.color:=clblack; oder image1.picture.loadfromfile('C:\Moin.bmp'); )
Verstehst du jetztt, wo das Problem liegt ?
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Fr 23.01.04 15:22
Setz doch nach jedem Arbeitsschritt die ProgressBar-Position um eins hoch...
Das Form muss doch nicht unsichtbar sein... ist doch wurst ob man sieht wie der style geladen wird...
Vielleicht sogar ein nettes feature... *gg*
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Fr 23.01.04 19:02
Naja. Aber das ist doch der Sinn der Sache, dass man nicht sieht, wie alles geladen wird, weils unschön aussieht.
Wie könnte man denn díe form 1 irgendwie unsichtbar kriegen (schon seit beginn und OHNE verzögerung) ?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.01.04 20:07
Ich persönlich schreibe, wenn ich einen Splashscreen nutze, den Code in den Projektquelltext (*.dpr). Dazu wird das Splashscreen-Formular zuerst erzeugt, danach die einzelnen Formulare. Mit jedem Schritt geht der Progressbar eins hoch. Am Ende wird das Splash-Formular freigegeben und die Anwendung gestartet.
Das ist IMHO die Ideallösung. Ursprünglich stammt sie aus Delphi-Groups.de bzw. aus dem EDH, da habe ich das mal gesehen. Aber ich bin sicher, hier müsste man das auch finden. Da ich auf die Schnelle aber nichts gefunden habe, hier ein Beispiel
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Application.Initialize;
with TWaitForm.Create(nil) do try ActionLabel.Caption := 'initialisiere'; pb1.Position := 0; Show; Update;
Application.CreateForm(TForm1, Form1); pb1.Position := MulDiv( 1,100,10); Application.CreateForm(TForm2, Form2); pb1.Position := MulDiv( 2,100,10);
finally Free; end;
Application.Run; |
Wie gesagt, du musst den vorhandenen Code der DPR-Datei anpassen, und das Splash-Formular (bei mir "TWaitForm" mit einem Label und einem Progressbar) darf nicht durch
Delphi-Quelltext 1:
| Application.CreateForm |
erzeugt werden, denn das geschieht ja bereits durch
Delphi-Quelltext 1:
| with TWaitForm.Create(nil) do |
und nach dem Erzeugen aller Forms brauchst du den Splash-Screen ja erst mal nicht mehr.
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Fr 23.01.04 23:21
Danke erstmal. Habe es jetzt nach den grundsätzen dieses Threads gemacht: www.delphi-forum.de/viewtopic.php?t=6291 . Also fast genauso, wie dus gesagt hast nur einfacher
Aber da is schon das nächste Problem:
Das Setzen des Styles kommt ja erst NACH dem createn der form, d.h., wenn der splash schon nach dem createn der form1 geHIDEt wird, bringts ja nix. Einen Timer kann ich ja schlecht vor form1.create setzen, da er da gar net existieren würde. Könntest du mir da nochmal helfen ?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 24.01.04 08:36
Der von dir genannte Link ist genau der gleiche Code. Nur habe ich eben noch ein Label und eine Fortschrittsanzeige auf meinem Splash-Screen.
Zu deinem Problem: Ich habe jetzt möglicherweise nicht alles zu dem Thema verfolgt, aber bringt es dir was, wenn du den Stil (Style) im "OnCreate" der Form änderst?
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Sa 24.01.04 09:12
| MathiasSimmack hat folgendes geschrieben: | | Zu deinem Problem: Ich habe jetzt möglicherweise nicht alles zu dem Thema verfolgt, aber bringt es dir was, wenn du den Stil (Style) im "OnCreate" der Form änderst? |
Was meinst du damit ? Der Style wird nicht im OnCreate geändert, sondern in einem timer, dessen interval auf 1 steht und der sich disabled, wenn alles getan ist.
Abewr wie kann ich das Problem nun lösen?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 24.01.04 09:37
Ganz folgen kann ich dir nicht. Du änderst den Style von ... was auch immer ... mit einem Timer, der sich dann deaktiviert. Wozu? Dann kannst du die notwendige Prozedur auch direkt und einmal aufrufen. Und das könntest du bspw. im "OnCreate"-Ereignis der Form versuchen. Evtl. klappt es ja.
Und wenn du dir jetzt den o.g. Code für den Splash-Screen noch mal anschaust, dann wirst du möglicherweise wissen, warum ich speziell dieses Ereignis anspreche. Der Splash-Screen ist nämlich nur solange zu sehen, bis alle Forms erzeugt (engl. create) wurden.
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Sa 24.01.04 09:49
Ja. Und genau da liegt das Problem. Der Style von nivht nur form1 wird geändert von dem timer, sondern auch von form2, form3, form4 und form5 (=>> Welche NICHT createt wurden, was dann natürlich zu einem fehler führt). Kannst du mir jetz folgen ? 
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 24.01.04 11:26
Und das machst du mit einem Timer? Warum rufst du die Prozedur/Funktion zum Ändern des Styles nicht einfach im "OnCreate" jeder Form auf?
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Sa 24.01.04 13:50
Ja. Das ging. Hattest Recht. Aber seitdem geht irgendwie etwas net mehr. Ich habe einen Actionmanager, welcher eine Action, welche Datei1 heißt, beinhaltet und eine ActionMenuBar. Wenn ich nun auf Englisch umstelle, also den caption wert von Datei1 der Actionmenubar auf "File" setze, geht das nicht. Es bleibt Datei stehen. Kann man Captions von laufenden TActions ändern ?
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 25.01.04 16:24
Hat sich erledigt. Danke an alle.
|
|