Verschiedene ProgressBar's über eine Funktion ansteuern



  • Hallo zusammen,

    ich habe 2 Formulare mit jeweils einem ProgressBar. Von jedem Formular/Unit rufe ich ein und dieselbe Berechnungsfunktion auf. Jetzt möchte ich von dieser Berechnungsfunktion je nach aufrufender Unit/Formular den entsprechenden ProgressBar in der Verarbeitung aktualisieren. Geht das, und wenn ja, wie macht man das ?

    P.S. Wie kann ich eine mehrfarbige Anzeige eines Fortschrittsbalkens erzeugen, so wie in Vista z.B. Anzeige der Festplattenkapazität (Cyan, Rot) wenn ich gleichzeitig XPManifest verwende ?

    Vielen Dank im voraus



  • Trial schrieb:

    ich habe 2 Formulare mit jeweils einem ProgressBar. Von jedem Formular/Unit rufe ich ein und dieselbe Berechnungsfunktion auf. Jetzt möchte ich von dieser Berechnungsfunktion je nach aufrufender Unit/Formular den entsprechenden ProgressBar in der Verarbeitung aktualisieren. Geht das, und wenn ja, wie macht man das ?

    übergib doch einfach den gewünschten ProgressBar mit an die Funktion, z.B.

    void BerecheneX(TProgressBar *PB)
    {
    //tu etwas
    PB->Position = 10;
    }
    
    //Aufruf irgendwo anders:
    BerecheneX(ProgressBar1);
    


  • Hi Linnea,

    danke für Deine Hilfe, aber ich blick da nicht ganz durch, habe folgendes probiert:

    Unit1.cpp

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit3.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     Test_PB( ProgressBar1 );
    }
    //---------------------------------------------------------------------------
    

    Unit3.cpp

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit3.h"
    
    //---------------------------------------------------------------------------
    
    #pragma package(smart_init)
    
    void __fastcall Test_PB( TProgressBar *PB )
    {
     for (int i = 0; i < 100; i++)
    	{
    	 PB->Position = i;
    	 sleep( 200 );
    	}
    }
    //---------------------------------------------------------------------------
    

    Da bekomme ich folgende Fehlermeldung:

    [C++ Fehler] Unit1.cpp(19): E2459 Klassen im VCL-Stil müssen mit dem Operator new erstellt werden

    Geht das nicht über den Objektinspector ?



  • gibt es den ProgressBar1 auf deinem Formular Form1 schon?



  • Ja, siehe hier:

    Unit1.h

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include "cgauges.h"
    #include <ComCtrls.hpp>
    #include <XPMan.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    	TButton *Button1;
    	TButton *Button2;
    	TProgressBar *ProgressBar1;
    	TXPManifest *XPManifest1;
    	TButton *Button3;
    	void __fastcall Button2Click(TObject *Sender);
    	void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    	void __fastcall Button3Click(TObject *Sender);
    private:	// Benutzer-Deklarationen
    public:		// Benutzer-Deklarationen
    	__fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    


  • Den Fehler kann ich nicht nachvollziehen. Versuch mal ein neues Projekt wo nur das Formular mit ProgressBar und Button und die 2. Unit enthalten sind.



  • Hi Linnea,

    ich hab das Problem gefunden. In der Header-Datei von Unit3 habe ich im Prototyp den '*' vergessen. Jetzt funktioniert es.

    Vielen Dank nochmal für Deine Hilfe !



  • Hallo Leute,

    sorry, dass ich einen so alten Thread aus der Versenkung hole.
    Doch konnte einer das schon mit dem Cyan und Rot herausfinden?

    Trial schrieb:

    [...]
    P.S. Wie kann ich eine mehrfarbige Anzeige eines Fortschrittsbalkens erzeugen, so wie in Vista z.B. Anzeige der Festplattenkapazität (Cyan, Rot) wenn ich gleichzeitig XPManifest verwende ?
    [...]

    Beste Grüße
    Mankind


Anmelden zum Antworten