sewek14 Temat założony przez niniejszego użytkownika |
Uruchomienie funkcji w klasie aplikacji » 2019-11-12 17:55:44 Witam. Chciałbym uruchomić funkcję "Start" znajdującą się w pliku .h z poziomu pliku .cpp, lecz mój sposób nie działa. Macie jakieś propozycje jak to zrobić ? plik .h #pragma once
namespace AppTest { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public ref class Formatka : public System::Windows::Forms::Form { public: Formatka( void ) { InitializeComponent(); } protected: ~Formatka() { if( components ) { delete components; } } private: System::Windows::Forms::Label ^ labelzegar; protected: private: System::Windows::Forms::Timer ^ timer1; private: System::Windows::Forms::Label ^ labeldeff; private: System::ComponentModel::IContainer ^ components; protected: protected: private: #pragma region Windows Form Designer generated code void InitializeComponent( void ) { this->components =( gcnew System::ComponentModel::Container() ); this->labelzegar =( gcnew System::Windows::Forms::Label() ); this->timer1 =( gcnew System::Windows::Forms::Timer( this->components ) ); this->labeldeff =( gcnew System::Windows::Forms::Label() ); this->SuspendLayout(); this->labelzegar->AutoSize = true; this->labelzegar->BackColor = System::Drawing::Color::Transparent; this->labelzegar->Font =( gcnew System::Drawing::Font( L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast < System::Byte >( 238 ) ) ); this->labelzegar->ForeColor = System::Drawing::Color::Red; this->labelzegar->Location = System::Drawing::Point( 4, 0 ); this->labelzegar->Name = L"labelzegar"; this->labelzegar->Size = System::Drawing::Size( 46, 13 ); this->labelzegar->TabIndex = 0; this->labelzegar->Text = L"45.000"; this->timer1->Interval = 50; this->timer1->Tick += gcnew System::EventHandler( this, & Formatka::timer1_Tick ); this->labeldeff->AutoSize = true; this->labeldeff->BackColor = System::Drawing::Color::Transparent; this->labeldeff->Font =( gcnew System::Drawing::Font( L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast < System::Byte >( 238 ) ) ); this->labeldeff->ForeColor = System::Drawing::Color::FromArgb( static_cast < System::Int32 >( static_cast < System::Byte >( 0 ) ), static_cast < System::Int32 >( static_cast < System::Byte >( 0 ) ), static_cast < System::Int32 >( static_cast < System::Byte >( 192 ) ) ); this->labeldeff->Location = System::Drawing::Point( 79, 0 ); this->labeldeff->Name = L"labeldeff"; this->labeldeff->Size = System::Drawing::Size( 31, 13 ); this->labeldeff->TabIndex = 2; this->labeldeff->Text = L" "; this->AutoScaleDimensions = System::Drawing::SizeF( 6, 13 ); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size( 116, 13 ); this->Controls->Add( this->labeldeff ); this->Controls->Add( this->labelzegar ); this->Name = L"Formatka"; this->Text = L"Formatka"; this->Load += gcnew System::EventHandler( this, & Formatka::Formatka_Load ); this->ResumeLayout( false ); this->PerformLayout(); } #pragma endregion public: double czas, zapisanyczas; public: void Start() { czas = 45.000; timer1->Enabled = true; } private: System::Void timer1_Tick( System::Object ^ sender, System::EventArgs ^ e ) { czas -= 0.05; labelzegar->Text = Convert::ToString( czas ); } private: System::Void Formatka_Load( System::Object ^ sender, System::EventArgs ^ e ) { } }; }
plik .cpp #include "Formatka.h"
using namespace System; using namespace System::Windows::Forms;
[ STAThread ]
void Main() { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault( false ); AppTest::Formatka form; Application::Run( % form ); form.Start(); }
|
|
nanoant20 |
» 2019-11-13 18:18:19 public ref class Formatka form.Start();
Formatka.Start();
Formatka::Start();
Mozna też by przypisać start timer'a do zdarzenia np. click buttona Poniżej link do samouczka Microsoft'u Timer Klasa |
|
sewek14 Temat założony przez niniejszego użytkownika |
Odpowiedź » 2019-11-13 22:53:59 Ja chcę bez buttona. Tymi sposobami, które wymieniłeś był błąd przy kompilacji |
|
nanoant20 |
» 2019-11-14 18:45:21 nie wiem co chcesz osiągnąć, ale jeżeli interesuje cię zbudowania cyfrowego zegara, który ma się uruchomić po odpaleniu programu to podam Ci link, żebyś zobaczył sobie jak to wygląda znajdzesz tam kod źródłowy i film instruktażowy EPISODE 08 - Make Digital Clock//edit a próbowałeś tak, jak to się robi w podejsciu obiektowym public ref class Formatka Formatka object1; object1.Start();
lub void Main() { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault( false ); AppTest::Formatka form; Application::Run( % form ); Start(); }
albo popróbować z void Formatka_Load( System::Object ^ sender, System::EventArgs ^ e ) { }
|
|
sewek14 Temat założony przez niniejszego użytkownika |
Odpowiedz » 2019-11-14 21:57:51 JA chcę tylko uruchomić funkcję "Start" przez plik .cpp. Zobaczyłem ten filmik i wykorzystam z niego tylko to czarne okienko bez obramowania ;). Także dziękuję i liczę na dalszą pomoc |
|
pekfos |
» 2019-11-16 23:40:15 Formatka( void ) { InitializeComponent(); } |
Próbowałeś wywołać Start() tu? |
|
sewek14 Temat założony przez niniejszego użytkownika |
pekfos » 2019-11-17 15:19:20 pekfos pewnie by zadziałało, lecz funkcja start uruchomi się wtedy po odpaleniu programu, a mój cel jest taki, żeby odpalić go gdzieś w kodzie w pliku .cpp |
|
pekfos |
» 2019-11-17 15:30:18 Po co dokładnie chcesz to zrobić? Application::Run() zawiera pętlę komunikatów, więc cokolwiek napiszesz po tym wywołaniu wykona się dopiero przy wyłączaniu aplikacji. Jedyne opcje to wywołanie twojej metody przed Run(), w konstruktorze klasy Formatka (równoznaczne z poprzednim), albo w innych metodach zapewnianych przez System::Windows::Forms::Form, które będą wywoływane w ramach Application::Run(), na przykład wspomniane już Load. |
|
« 1 » 2 |