AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

pbstMarquee richtig verwenden?

Ein Thema von stahli · begonnen am 13. Jun 2011 · letzter Beitrag vom 13. Jun 2011
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

AW: pbstMarquee richtig verwenden?

  Alt 13. Jun 2011, 17:29
Sollte dieses in irgend einer Weise die Regeln verletzen bitte ich um Mitteilung.
Code:
//  TUbuntuProgress
//  Version 1.2
//
//  Copyright 2008 - 2009 bei Jonas Döbertin
//  E-Mail: jonas@doebertin.de
//  Diesen Projekt ist Open-Source und wird es auch immer bleiben.
//  Jeder der möchte kann diesen Code weitergeben und verwenden wie
//  er möchte, Bedingung ist, das dieser Hinweis enthalten bleibt.
//  Wenn dieser Code in einem Projekt verwendung findet, würde ich
//  mich lediglich über eine kleine Nachricht freuen!
Ich denke nicht Aber das eigentliche Problem wird es wohl (leider) nicht lösen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.429 Beiträge
 
Delphi 12 Athens
 
#2

AW: pbstMarquee richtig verwenden?

  Alt 13. Jun 2011, 17:31
Warum nicht ? Die Progressbar läuft und läuft und läuft... egal was die GUI oder der Rest macht.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: pbstMarquee richtig verwenden?

  Alt 13. Jun 2011, 17:41
Wäre zu schön um wahr zu sein, aber wenn der Hauptthread hängt, dann wird nichts neu gezeichnet, zumindest kenne ich es so Zudem habe ich hier sogar noch den Beweis, dass es nicht gehen kann:
Delphi-Quellcode:
procedure TMarqueeThread.Execute;
begin
  inherited;
  repeat
    if WaitForSingleObject(FStop, FInterval) = WAIT_TIMEOUT then
      Synchronize(DoOnTimer);
  until Terminated;
end;
Die Animation selbst wird via Thread berechnet, okay. Aber dann wird hier Synchronize aufgerufen, sodass die ProgressBar neu gezeichnet wird. Hängt der Hauptthread, dann steht somit auch der TMarqueeThread, da das Synchronize erst dann zurückkehrt, wenn der Hauptthread die gegebene Methode abgearbeitet hat, aber der steht ja...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: pbstMarquee richtig verwenden?

  Alt 13. Jun 2011, 17:50
Ok, danke für die Antworten. Ich dachte, die Progressbar startet im Marquee-Mode selbst einen eigenen Thread in dem sie sich neu zeichnet - und ich hätte etwas falsch eingestellt.
Ich rufe jetzt StepIt erst mal in meiner Speicherfunktion auf. Das tut es erst mal notdüftig.

Andere Lösungen teste ich ggf. später mal noch.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.429 Beiträge
 
Delphi 12 Athens
 
#5

AW: pbstMarquee richtig verwenden?

  Alt 13. Jun 2011, 18:06
@s.h.a.r.k

ähmm... ich hatte überlesen, daß die Berechnungen im Hauptthread ausgeführt werden. Die müssen in einen extra Thread. Dann hast du natürlich Recht.
Sorry für Dummschwatz...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: pbstMarquee richtig verwenden?

  Alt 13. Jun 2011, 19:07
So läuft das recht flüssig, ohne einen Thread zu nutzen.
Ich rufe in der Schleife immer diesen Teil auf:
Delphi-Quellcode:
  if Assigned(odProgressBar) then
  begin
    odProgressBar.Tag := odProgressBar.Tag + 1;
    if odProgressBar.Tag > 100 then
    begin
      odProgressBar.Refresh;
      odProgressBar.Tag := 0;
    end;
// Application.ProcessMessages;
  end;
Die Alternative wäre ProcessMessage, aber das ist ja nicht immer sinnvoll.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#7

AW: pbstMarquee richtig verwenden?

  Alt 13. Jun 2011, 20:31
Marqueue-Style und
Delphi-Quellcode:
if Assigned(odProgressBar) then
begin
  odProgressBar.StepIt;
  odProgressBar.Refresh; // .Repaint;
end;
Ein Therapeut entspricht 1024 Gigapeut.
  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 01:06 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