Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ProgressBar bei Verbinden durchlaufen lassen (https://www.delphipraxis.net/95817-progressbar-bei-verbinden-durchlaufen-lassen.html)

wfs12 13. Jul 2007 15:31


ProgressBar bei Verbinden durchlaufen lassen
 
Guten Tag ich benutze eine JvspecialProgress Bar um während des Vebindens zu einem Mysql Server anzuzeigen, dass momentan gearbeitet wird. Um die Bar durchlaufen zu lassen benutze ich diesen Code:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if startbar=true then begin
    if JvSpecialprogress1.Position=JvSpecialprogress1.Maximum then JvSpecialprogress1.Position:=0 else
      JvspecialProgress1.StepIt;
  end else JvSpecialprogress1.Position:=0;
end;
Die Startvariable wird am anfang des Verbindens auf true gesetzt:
Delphi-Quellcode:
procedure TForm1.connectbtnClick(Sender: TObject);
begin
  startbar:=true;
  if connectbtn.Caption='Verbinden' then
    startconnection(db,host,benutzer,pass)
  else begin
    mysql_close(_myCon);
    MessageDlg('Die Verbindung wurde erfolgreich getrennt',mtinformation,[mbOK],0);
    connectbtn.Caption:='Verbinden';
  end;
  startbar:=false;
end;
Wenn ich jetzt auf den Button klicke wird die ProgressBar aber erst gestartet, nachdem der MessageDlg angezeigt wurde, und wird nach dessen Schließen auch gleich wieder beendet. Liegt das an dem Timer? Oder wie kann man das anders lösen?

SirThornberry 13. Jul 2007 15:42

Re: ProgressBar bei Verbinden durchlaufen lassen
 
während dein Programm verbindet willst du gleichzeitig animiert etwas anzeigen? Arbeitest aber nur mit einem Thread?

wfs12 13. Jul 2007 15:52

Re: ProgressBar bei Verbinden durchlaufen lassen
 
also das sollte sowas wie ne warteanzeige sein: auf der form läuft die Progressbar durch und das Programm verbindet mich. Ist das nicht einfach so möglich ohne einen weiteren Thread zu öffnen? Aber während er verbindet ist doch nicht alles andere blockiert oder?

oki 13. Jul 2007 16:04

Re: ProgressBar bei Verbinden durchlaufen lassen
 
Hi,

das geht so nicht! Ich denke mal, dass die Verbindungs-Methoden blockierend sind. Diese solltest du dann in einen eigenen Thread auslagern. Ein Ereignis nach erfolgter Verbindung aus dem Thread heraus kann dann deine Anzeige löschen.

Gruß oki

wfs12 13. Jul 2007 17:20

Re: ProgressBar bei Verbinden durchlaufen lassen
 
und wie lagert man einen thread aus?

wicht 13. Jul 2007 17:30

Re: ProgressBar bei Verbinden durchlaufen lassen
 
Das ist ein etwas komplexeres Thema was ohne konkrete Fragestellungen wohl den Rahmen hier sprengen würde.
Ich würde dir empfehlen ersteinmal ein Tutorial zu lesen, z.B. das hier (erster Google Treffer für "delphi threads"). Extrem kompliziert ist die Sache nicht, aber es gibt einige Probleme die auftreten könnten, und das Tutorial wird dir diese nahebringen (so wie ich das in der Kapitelübersicht erkennen kann).
Also ich sprach hier nur für mich, aber wenn du eine genauere Fragestellung hast, bin ich eher bereit, Sachen zu erklären :wink:

Edit: Das Tutorial ist vielleicht doch nicht so passend. Man lernt zwar mehr als in anderen, aber mit den API-Funktionen zu Threads musst du dich eigentlich nicht herumschlagen. Such lieber nochmal selber, die Klasse heißt eben TThread (ist ein Kapitel im Tutorial da), eine wichtige Methode wäre vielleicht noch Synchronize()...

wfs12 13. Jul 2007 18:31

Re: ProgressBar bei Verbinden durchlaufen lassen
 
vielen dank erstmal ich glaube wenn das so aufwendig ist lass ich das erstmal lieber sollte ja nur darstellen, das man warten soll ich schreib das jetzt in ein label oder eine statusleiste oder sowas.


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