AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Form verhält sich mit ABS() anders als ohne
Thema durchsuchen
Ansicht
Themen-Optionen

Form verhält sich mit ABS() anders als ohne

Ein Thema von kalmi01 · begonnen am 30. Aug 2006 · letzter Beitrag vom 30. Aug 2006
Antwort Antwort
kalmi01
(Gast)

n/a Beiträge
 
#1

Form verhält sich mit ABS() anders als ohne

  Alt 30. Aug 2006, 08:18
In einem Prog befindet sich diese Funktion:
Delphi-Quellcode:
    procedure Progress(Size, CurrentPos: Int64);
      var
        OPos, NPos : integer;
      begin
        OPos := MainForm.StatusMeter.Percent;
        NPos := Round(CurrentPos * 100 / Size);
        if (NPos <> OPos)
        then begin
               MainForm.StatusMeter.Percent := NPos - 1;
               Application.ProcessMessages;
             end;
      end;
Damit funktioniert auch alles.
Wenn ich die Funktion aber so abändere:
Delphi-Quellcode:
    procedure Progress(Size, CurrentPos: Int64);
      var
        OPos, NPos : integer;
      begin
        OPos := MainForm.StatusMeter.Percent;
        NPos := Round(Abs(CurrentPos * 100 / Size) - 1); << hier
        if (NPos <> OPos)
        then begin
               MainForm.StatusMeter.Percent := NPos; << und hier
               Application.ProcessMessages;
             end;
      end;
wird zwar die Progressbar weiterhin aktualisiert, wie im ersten Beisspiel.
Im Edit-Fenster wird aber nach der ersten Zeile nichts mehr angezeigt, bis alles geladen ist.

Nicht, das mich das stört, solange es eine Ausweichmöglichkeit gibt.
Aber es würde mich schon mal interessieren, warum das Verhalten so ist ?
Hab ich einen Denkfehler ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Form verhält sich mit ABS() anders als ohne

  Alt 30. Aug 2006, 08:31
NPos := Round(CurrentPos * 100 / Size)-1 ; ist was anderes als
Zitat:
NPos := Round((CurrentPos * 100 / Size) -1);
Markus Kinzler
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.893 Beiträge
 
Delphi 12 Athens
 
#3

Re: Form verhält sich mit ABS() anders als ohne

  Alt 30. Aug 2006, 08:41
Zitat von kalmi01:
Im Edit-Fenster wird aber nach der ersten Zeile nichts mehr angezeigt, bis alles geladen ist.
Welches Editfenster?

Gruß

onlinekater
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#4

Re: Form verhält sich mit ABS() anders als ohne

  Alt 30. Aug 2006, 12:54
Zitat von mkinzler:
NPos := Round(CurrentPos * 100 / Size)-1 ; ist was anderes als
Zitat:
NPos := Round((CurrentPos * 100 / Size) -1);
wenn man die beieden Zeilen herausgelöst aus der Funktion betrachtet, ja.
Nebenbei stand im Code-AusschnittNPos := Round(Abs(CurrentPos * 100 / Size) - 1); nichtNPos := Round(CurrentPos * 100 / Size)-1 ;
Zitat von onlinekater:
Welches Editfenster?
OK, ich hätte natürlich den gesamten Source posten können.
Nein, also ich hätte wohl noch dazuschreiben sollen, was das Prog macht:
Es füllt die Stringlist eines Edit-Fensters.
Das tut es in beiden Fällen korrekt, nur in dem Beispiel mit dem Abs() sieht man es nach dem die erste Zeile erzeugt wurde nicht mehr.
Wenn ich im Debugger das Füllen der Stringlist überwache, passiert bei beiden Beispielen das Gleiche.
In beiden Fällen läuft die Progressbar sauber hoch, d.h. Application.ProcessMessages funktioniert.
Nur beim 2.ten Beispiel wird das Edit-Fenster des Prog's nicht mehr ge-refresht.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Form verhält sich mit ABS() anders als ohne

  Alt 30. Aug 2006, 12:58
Zitat:
Nebenbei stand im Code-Ausschnitt ...
ABS liefert ja nur den Betrag des Ausdrucks, deshalb bin o.B.d.A davon ausgegangen, daß CurrentPos positiv ist.
Markus Kinzler
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#6

Re: Form verhält sich mit ABS() anders als ohne

  Alt 30. Aug 2006, 13:16
Zitat von mkinzler:
ABS liefert ja nur den Betrag des Ausdrucks, deshalb bin o.B.d.A davon ausgegangen, daß CurrentPos positiv ist.
ist es ja auch (0 bis 100).
Aber 0 - 1 ist halt negativ, deshalb ABS.

jetzt hab ich mal:
Delphi-Quellcode:
        NPos := Round(CurrentPos * 100 / Size) - 1;
        if (NPos > OPos)
so abgeändert und siehe da, es funktioniert ebenfalls korrekt.
  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 18:23 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