Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Laufschrift hängt (https://www.delphipraxis.net/99485-laufschrift-haengt.html)

SaFu 12. Sep 2007 22:09


Laufschrift hängt
 
Hi

Hab mal ne Frage zu meiner laufschrift.

Und zwar lade ich auf einer Form Bilder nacheinander in ein Image und zwar so

Delphi-Quellcode:
procedure TForm4.Timer2Timer(Sender: TObject);
begin
  if FileListBox1.Items.Count > 0 then
   begin
     if index > FileListBox1.Items.Count -1 then
      index:= 0; //index auf "O" setzen
        FileListbox1.Selected[index]:= true; //Aktuellen index makieren
          bild:= Lowercase(ExtractFileExt(Bilddat + FileListBox1.Items[index]));

      if (bild = '.jpg') then //Pfad + .jpg
        begin
          // Laden der Bilder
          Image1.Picture.LoadFromFile(Bilddat + FileListBox1.Items[index]);
          Form3.Image1.Picture:= Image1.Picture;// Kopieren der Bilder auf Form3
        end;

     inc(index); //Index +1
      Label6.Caption:= 'Bild '+ IntToStr(index)+' von '+ IntToStr(FileListBox1.Items.Count);
      Form3.Label2.Caption:= 'Bild '+ IntToStr(index)+' von '+ IntToStr(FileListBox1.Items.Count);
   end

   else
    begin
     if MessageDlgPos('Es sind keine Bilder vorhanden '
     +'',mtInformation,[mbok],0,260,200) = mrok then
     Timer2.Enabled:= false;
    end;
 end;
dabei läuft unter dem Bild eine Laufschrift mit der Komponente vom Jens Schumann hier im Forum.

jetzt habe ich das Problem immer wenn ein neues Bild geladen wird bleibt die Laufschrift kurz stehen und läuft dann wieder weiter

wie kann ich das verhindern??

Danke schonmal

Gruss Sascha

Cyberbob 12. Sep 2007 22:15

Re: Laufschrift hängt
 
Verhindern kannst du das, in dem du Threads verwendest.
Wenn der rechner mit dem abarbeiten einer aufgabe beschäftigt ist müssen alle anderen aufgaben im selben thread warten.

SaFu 12. Sep 2007 22:19

Re: Laufschrift hängt
 
Funktioniert das auch mit dem Timer habe mal gehört das der Timer nicht Thread fähig ist kenn mich nicht so aus

Cyberbob 12. Sep 2007 22:24

Re: Laufschrift hängt
 
Lass den Timer weg. Erstell im Thread nen Delay: siehe Codelib

SaFu 12. Sep 2007 22:30

Re: Laufschrift hängt
 
Ooops

Den Thread bekomm ich bestimmt hin aber was ist das wie arbeitet das ding den

Cyberbob 12. Sep 2007 22:56

Re: Laufschrift hängt
 
Wer? Der Thread?
Schau dir mal das Tutorial von Luckie an: http://www.michael-puff.de/Developer...mit_Delphi.zip

SaFu 13. Sep 2007 12:44

Re: Laufschrift hängt
 
Naja aber meine frage ist immer noch nicht beantwortet ghet das mit dem teimer oder nicht

Kann ich es so machen das ich meinen obigen code in eine Funktion setze diese in einen Thread reinpacke und das ganze in einem timer laufen lasse oder wie könnte ich mir das vorstellen

Reinhardtinho 13. Sep 2007 13:12

Re: Laufschrift hängt
 
Mein Vorschlag ohne Thread. Hast du dies schon versucht?

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.DoubleBuffered := True;
end;
Bei mir hing auch schon mal eine Laufschrift, hiermit wurde der Fehler behoben.

MFG
Lorenz

SaFu 13. Sep 2007 13:35

Re: Laufschrift hängt
 
Ja hab ich auch schon wie gesagt benutze jetzt die komponente vom jens ist sehr gut hat auch viele möglichkeiten

Ich denke es liegt halt am Laden der Bilder das die Laufschrift immer für den moment des lade vorgangs hängen bleibt.

Ich weis jetzt halt nur nicht wegen den Timer ob ich es in einen Thread reinsetzen kann oder nicht

OregonGhost 13. Sep 2007 13:42

Re: Laufschrift hängt
 
Musst du die Bilder denn unbedingt während der Animation laden? Kannst du sie nicht im Voraus laden?

SaFu 13. Sep 2007 13:50

Re: Laufschrift hängt
 
Die sollen einfach nacheinander geladen werden so wie bei einer dia show

Cyberbob 13. Sep 2007 14:25

Re: Laufschrift hängt
 
Wenn du einen Timer verwendest, bleibt er für die Zeit des Ladens mal kurz stehen. Slebst wenn dein Code innderhalb des timer in einm anderen Thread läuft, der Timer tut dies nicht!

SaFu 13. Sep 2007 14:27

Re: Laufschrift hängt
 
??? hä verstehe ich jetzt nicht ganz also bleibt es beim timer stehen hat noch nie einer dieses Problem gehabt

SaFu 16. Sep 2007 19:54

Re: Laufschrift hängt
 
ah jetzt hab ichs gerafft war anscheiend den einen tag zu müde.

also wie könnte ich es lösen das es beim laden nicht mehr hängt wenn es mit dem timer nicht geht

SirThornberry 16. Sep 2007 20:14

Re: Laufschrift hängt
 
Die Festplatte ist eine der langsamsten Komponenten eines PC. Wenn du die Bilder immer wieder von der Festplatte lädst dauert das ewig. Lade die Bilder bei Programmstart in den Arbeitsspeicher und lade die Bilder dann von dort. Oder lade das Bild innerhalb eines Threads von der Festplatte und packe es dann syncronisiert in die Darstellungskomponente.

SaFu 16. Sep 2007 20:16

Re: Laufschrift hängt
 
Das mit dem Thread wollte ich ja versuchen aber wie du ja oben im code siehst müsste ich dan den Thread auch wieder im timer reinsetzen und das geht doch nicht oder?

SirThornberry 16. Sep 2007 20:29

Re: Laufschrift hängt
 
doch, wer sollte dich davon abhalten im OnTimer einen Thread zu erzeugen? Allerdings ist es quatsch.
Du kannst auch einfach im Thread ständig prüfen ob es wieder zeit ist:
Delphi-Quellcode:
llastRun := GetTickCount;
repeat
  lTime := GetTickCount();
  if (llastRun + 5000 < lTime) then
  begin
    //DoWhatYouWant (load picture and syncronize to show it)
    llastRun := lTime;
  end;
  sleep(50); //um die CPU-Last gering zu halten, wir müssen ja die Schelife nicht übermäßig oft durchlaufen
until Self.Terminated;

SaFu 16. Sep 2007 20:32

Re: Laufschrift hängt
 
könnte ich das ungefähr so machen habe keine anhnung von thread

den code hatte wir mal in der schule angeschnitten

Delphi-Quellcode:
function lauf() :integer;
var x :integer;
begin
 müsste hir das laden der fils rein????
end;

procedure TForm1.Button2Click(Sender: TObject);
Var ThreadID :Dword;
begin
  CreateThread(nil, 0, addr(lauf), nil, 0, ThreadID); // win Api Funktion
end;

SaFu 16. Sep 2007 21:10

Re: Laufschrift hängt
 
Zitat:

Zitat von SirThornberry
doch, wer sollte dich davon abhalten im OnTimer einen Thread zu erzeugen? Allerdings ist es quatsch.
Du kannst auch einfach im Thread ständig prüfen ob es wieder zeit ist:
Delphi-Quellcode:
llastRun := GetTickCount;
repeat
  lTime := GetTickCount();
  if (llastRun + 5000 < lTime) then
  begin
    //DoWhatYouWant (load picture and syncronize to show it)
    llastRun := lTime;
  end;
  sleep(50); //um die CPU-Last gering zu halten, wir müssen ja die Schelife nicht übermäßig oft durchlaufen
until Self.Terminated;

wie könnte ich denn deine code in meinen einbauen von welchem typ ist den llastRun

turboPASCAL 16. Sep 2007 21:46

Re: Laufschrift hängt
 
Zitat:

Zitat von fuknersascha
wie könnte ich denn deine code in meinen einbauen

Dazu musstt du in Delphi, wenn ich das Gummibärchen richtig verstanden habe einen Thread erzeugen.
Dadurch sparst du dir einen Timer. Siehe dazu Hier im Forum suchenTThread

Zitat:

Zitat von fuknersascha
... von welchem typ ist den llastRun

Setz deinen Cursor in Delphi auf GetTickCount und drück F1.
Im Falle das dort DWort steht kannst du Cardinal verwenden ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 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