"Sleep"-t das programm wenn man...
meine frage ist, ob das programm freezed, schläft oder was auch immer, wenn man
.res dateien extrahiert? denn ich habe ein programm gemacht, dass die res datei zb als exe extrahiert und habe auch ein ladebalken / progressbar gemacht. das problem ist, dass die progressbar nicht lädt, sondern nur am ende angezeigt wird, da offensichtlich das programm solange schläft ... meine frage ist, ob es wirklich "sleep"-t
Delphi-Quellcode:
(spaß bei seite^^)
if (Antwort = 'Ja') then
begin Label1.Caption := 'Need Help!'; Label2.Caption := 'Nächste Frage wäre dann:'; Label2.Caption := 'Könntet ihr mir helfen?'; end; |
Re: "Sleep"-t das programm wenn man...
Wenn du dem Programm (z.B. durch Application.ProgressMessages) nicht die Möglichkeit gibst sich zu aktualisieren, kann sich an der Oberfläche auch nichts tun.
Aber was machst du nochmal? Du holst eine EXE aus den Ressourcen oder wie? Aber das kann doch nicht sooo lange dauern, das man dafür 'nen Ladebalken braucht :gruebel: |
Re: "Sleep"-t das programm wenn man...
Nein, das Programm schläft nicht, sondern arbeitet hart. Nämlich an dem extrahieren der Ressourcen.
Das Programm ist dabei so beschäftigt, dass es die Windows-Messages zum zeichnen der Oberfläche nicht abarbeiten kann. Also öfter mal ein ProcessMessages rein, und *wuppdi* klappts auch mit dem Zeichnen des Fortschrittbalkens. Roter Kasten: Da war jemand schneller :mrgreen: |
Re: "Sleep"-t das programm wenn man...
Zitat:
(die exe ist ungefähr 100mb - das ist eig. noch ziemlich klein in meinem projekt) und ja, ich habe Application.ProcessMessage eingebaut ... ich gebe euch mal den quellcode^^
Delphi-Quellcode:
if (Gewicht = Gewicht div 100 * 100) then
begin Application.ProcessMessages; sProgressBar1.Position := 100; sButton1.Visible := False; sButton2.Visible := True; sButton3.Visible := False; end; usw. ... edit: ich versuchs mal mit 1gb^^ bis gleich^^ |
Re: "Sleep"-t das programm wenn man...
Dein Quellcode sieht seltsam aus... erst Nachrichten abarbeiten, dann Komponenten aktualisieren ist falsch herum... und wieso gleich auf 100... eine Schrittweite ist nicht erkennbar.
Die Progressbar ist aber auch meines Wissens nicht von Application.ProgressMessages abhängig (sollte also immer, auch unter Last die Anzeige aktualisieren) |
Re: "Sleep"-t das programm wenn man...
Zitat:
das gehört auch zu den letzten zeilen^^ klar ist es "gleich" auf 100 ist ja auch die letzte aktualisierung... für 1:
Delphi-Quellcode:
oder muss ich das umdrehen:
if (Gewicht = Gewicht div 100 * 1)then
begin Application.ProcessMessages; sProgressBar1.Position := 1; end;
Delphi-Quellcode:
???
if (Gewicht = Gewicht div 100 * 1)then
begin sProgressBar1.Position := 1; Application.ProcessMessages; end; |
Re: "Sleep"-t das programm wenn man...
Häh? Für einen Fortschrittsbalken reicht es nicht, den anfangs auf 0/1 und am Ende auf 100 zu setzen.
Du musst ihn in jedem Schritt auf den entsprechenden Wert setzen und nach dem Wert setzt auch neu Zeichnen lassen. Also im Stil von: Fortschittsbalken = atuellerWert/maximalWert *100; Neuzeichnen; |
Re: "Sleep"-t das programm wenn man...
Zitat:
hab ich doch, dass ist nicht der ganze quellcode -_- |
Re: "Sleep"-t das programm wenn man...
ok, bei 100 MB / 1 GB könnte es schon dauern (ist ja recht selten, daß eine EXE mal so groß ist)
Zitat:
denn sonst hättest du ja mehr gepostet :zwinker:
Delphi-Quellcode:
=
if (Gewicht = Gewicht div 100 * 100) then
Delphi-Quellcode:
if Gewicht mod 100 = 0 then
|
Re: "Sleep"-t das programm wenn man...
Zitat:
ich meints auch nicht böse^^ habe eine rar und eine exe datei ... die sind ungefähr 600 mb groß, und noch weitere 4 dateien, sprich 6 * 600mb^^ dann braucht man schon einen ladebalken^^ thx für alle tipps und für das vebresserte if :thumb: habe es gerade nochmal versucht^^ iwie schuftet er "nur" und zeigt die progressbar net an^^ ich versuchs gleich mit 1gb^^ |
Re: "Sleep"-t das programm wenn man...
Du könntest ja ach mal zeigen wie deine Entpackgeschichte ausschaut.
Möglicher weise hat dein Ladebalken ein "was soll ich machen" Problem. |
Re: "Sleep"-t das programm wenn man...
nene passt schon^^
extrahiere ganz normal die res als ursprüngliches format ... bei dem ladebalken habe ich mir was schönes ausgedacht ... erst wird überprüft ob die datei existiert, wenn ja, so zähle man die NUN messbare größe ... timer interval auf 1 ... der balken richtet sich nach der größe ... sprich 1/100 sind 1% des balkens usw.^^ |
Re: "Sleep"-t das programm wenn man...
Zitat:
Delphi-Quellcode:
Einfachste Prozentrechnung. Sollte man auch mit 15 schonmal gesehen haben ;)
sProgressBar1.Position := Round((Gewicht/MaxGewicht)*100);
Edit: Application.ProcessMessages(); ist meist auch ein Indiz dafür, dass man hier mit einem Thread wohl besser bedient wäre. ProcessMessages ist bei solchen Vorgängen eher ne Quick'n'Dirty-Krücke als denn eine angemessene Lösung. Geht, ist aber nicht wirklich elegant, und je nach dem in welchen Intervallen man es aufruft führt es dennoch zu Stocken bei der Anzeige/Bedienung. |
Re: "Sleep"-t das programm wenn man...
Zitat:
Solltest du einen Steam benutzen, dann guck dir mal meine Klasse TStreamProgressAdapter an: http://www.michael-puff.de/Developer/Delphi/Demos |
Re: "Sleep"-t das programm wenn man...
thx @ Medium^^
hier ... habe ich hier aus dem forum gestänzt^^
Delphi-Quellcode:
sieht bissle durcheinander und "angfängerhaft" aus, saß aber kaum dran ... zock lieber -_-
procedure TForm3.sButton3Click(Sender: TObject);
var tr : TResourcestream; // Einen Ressource Stream angeben! begin if Form1.sRadioButton1.Checked then begin if not FileExists('C:\Programme\xyz\xyz.xyz') then begin tr := TResourcestream.Create(hinstance,'xyz','xyz'); //wird erstellt Form3.JvTimer1.Enabled := True; forcedirectories('C:\Programme\xyz\'); tr.SaveToFile('C:\Programme\xyz\xyz.xyz'); end else ShowMessage('Die Datei existiert bereits!'); //wird extrahiert und gespeichert tr.Free; //Stream wird freigegeben end; hoffe ihr könnt damit was anfangen^^ |
Re: "Sleep"-t das programm wenn man...
keine antwort?
oder sollte das eigentlich funzen? |
Re: "Sleep"-t das programm wenn man...
Wo liegt dein Problem? Und wenn du selber schon sagst, dass dein Code unordnetlich ist, solltest du vielleicht liebr aufräumen.
|
Re: "Sleep"-t das programm wenn man...
oha ... schreibste immer so oder ... ??
naja egal 1. das problem: die progressbar macht nix 2. keine zeit?! 3. wieso liest du net die anderen beiträge? |
Re: "Sleep"-t das programm wenn man...
Also bei dir freezed nichts und es arbeitet auch nichts auf hochtrieben:
Folgende Gleichung (mathematisch gesehen jetzt) wird nie erfüllt sein: n = n / x * y (delphi): if (Gewicht = Gewicht div 100 * 1) then Dh dein Progressbar wird sich nur einmal - und zwar genau dann, wenn x und y identisch sind - aktualisieren ;) ( .. div 100 * 100 ) MfG |
Re: "Sleep"-t das programm wenn man...
Zitat:
Zitat:
Und wenn du lieber zockst, anstatt zu programmieren, dann tu das eben, aber erwarte nicht, dass jemand anderes dir deinen Code schreibst, nur weil du zu faul bist. |
Re: "Sleep"-t das programm wenn man...
[quote="NamenLozer"]
Zitat:
genau du sagst, dass es mir erklärt wurde, aber wenn ich es nicht verstehe, dann kann ich es auch nicht richtig machen und ich zocke gerade deshalb viel, weil ich bald 4wochen in ungarn bin und kein inet habe und weil ich seit knapp 3 wochen wieder angefangen habe! okay, ich editier einfach mein beitrag hier wenn ich noch ne frage habe, versuche es, wie es die anderen mir geschrieben haben und hoffe auf tolle funktionsfähigkeit^^ (was schreibe ich da eig. ?? xD) naja, thx an die, die mir geholfen haben, mir helfen wollten oder sonst was ... schönes wochenende! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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