![]() |
AW: Callbacks: Interface und/oder Methode? (DEC 6.0)
Ich finde das Thema gerade schwierig.
Wenn ein Stream verarbeitet wird, steht die Länge nicht fest. Ich meine man kann auch nicht berechnen, wieviel arbeit zu tun ist. von, bis und pos zu haben wäre nett, ist das dann aber nicht eher das Problem von dem Streamersteller? Ist dort nicht der Callback festgelegt und müsste dann nicht im Callback ggf. das ausgerechnet werden, wo der Prozentbalken steht oder ggf. ein Animation gespielt wird? Kann also die DEC nur ein "STEP" signalisieren und kein genaue Position der Verarbeitung? Wenn die DEC die Gesamtmenge, welche die DEC verarbeitet ausrechnen kann, dann müsste an den Callback [min,] max und pos übergeben werden, dass hat aber dann nichts mit der Streamsize und POS zu tun. Versteht mich jemand, was ich meine? PS:
Code:
alt
procedure TFormMain.OnProgress(const Min, Max, Pos: Int64); neu procedure TFormMain.OnProgress(const Progress: TDECProgressParams); alt ProgressBar1.Min := Min; ProgressBar1.Max := Max; ProgressBar1.Position := Pos; neu ProgressBar1.Min := 0; ProgressBar1.Max := Progress.Max; ProgressBar1.Position := Progress.Pos; alt habe ich besser gefunden, weil die Implementierung vom Progress nicht vom Typ TDECProgressParams abhängt und somit bei anderen Programmteilen wiederverwendet werden könnte. Ich persönlich bevorzuge auch immer weniger Punkte zu nutzen als mehr. Also
Code:
vor
ProgressBar1.Min := Min;
Code:
Spätenstens bei dem zweiten Punkt würde es hässlich werden, weil man dann abhängig von der internen Umsetzung wird.
ProgressBar1.Max := Progress.Max;
Also
Code:
- nicht relevant hier . nur Beispiel.
Progress.Max.irgendwas
|
AW: Callbacks: Interface und/oder Methode? (DEC 6.0)
Hallo,
danke für deinen Input. Auch ich würde das Progress Event eher ohne Struktur gestalten wollen. Aber eben als annonyme Methode. Grüße TurboMagic |
AW: Callbacks: Interface und/oder Methode? (DEC 6.0)
Du konntest und kannst hier
* entweder sagen, wieviel gemacht werden kann * oder es wird über Stream.Size das Ende bestimmt (und über Stream.Size-Stream.Position die Anzahl) * ein Stream mit unbestimmter Länge (lese so lange bis Stream.Read=0 sagt) wird selten von "allgemeinen" Funktionen unterstützt. * * entweder wir bauen dafür eine neue Funktion ein, oder sagen z.B. DataSize = -2 wird dieser Modus (und = -1 der mir Stream.Size) Die meisten Parameter änder sich niemals. Min, Max und Pos sind Int64 und das kann keine ProgressBar anzeigen. Original kann/konnte sie sogar nur 16 15 Bit varabeiten (PBM_SETRANGE) und inzwischen geht auch 32 32 Bit (PBM_SETRANGE32). Ein Bit weniger, wegen dem Signed (Vorzeichen). ![]() Ja, es gibt genügend Leute, die sind zu doof ähh vergessen den Wertebereich notfals umzurechnen, daher hatte ich gleich auch direkt noch den Prozenz-Wert mit reingepackt. Gut, man kann sich streiten wann "zuviel" ist, aber wenn es zuviele Parameter werden (wovon hier ursprünglich 33% immer wieder sinnlos übergeben werden), dann wird von Vielen empfohlen das in ein Datenobjekt zu packen, also nur noch einen Parameter. Vorteil ist auch, dass wenn man später noch etwas hinzufügt, dass man nirgendwo was umbauen muß. (die Signatur ändert sich nicht) Andere dürfen gern diesen Typen verwenden, oder sie definieren ihren eigenen Record oder Objekt, der gleich heißt. (man könnte sich hier vielleich überlegen dem Record einen "neutralen" Namen zu geben) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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-2025 by Thomas Breitkreuz