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