Ĺadny brzuch
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int a, b;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form1->DoubleBuffered = true;
Image1->Canvas->Brush->Style = bsClear;
for(int x = 0; x < 100; x++)
{
int a = random(390);
int b = random(390);
Image1->Canvas->Pixels[a][b] = clRed;
}
}
//---------------------------------------------------------------------------
Mam taki kodzik chyba nie musze tułmaczyć o co chodzi :P ale dla ytch którzu nie wiedzą. Program ma rysować losowo wybrane współrzędne pixsela a owych ma być 100. Po skompilowaniu programu na ekranie pojawia się od razu te 100 pixeli
oczywiście już wcześniej dodałem instrukcje Sleep() o opóźnieniu 1000milisekund, ale co się okazało?? Forma w ogóle się nie ukazała!! Szukałem czy może niechcący czegoś nie przestwiłem z widocznością Formy ale nie, dla pewności jeszcze raz napisałem kod i to samo!! O co chodzi??
nie wiem czy w bcb dziala ale sprobuj Application->ProcessMessages();
Po skompilowaniu programu na ekranie pojawia się od razu te 100 pixeli
oczywiście już wcześniej dodałem instrukcje Sleep() o opóźnieniu 1000milisekund, ale co się okazało?? Forma w ogóle się nie ukazała!!
To chyba za krótko czekałeś :).
TForm1 *Form1; int a, b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
Wiesz co to jest ten fragment kodu? Jeśli nie to poczytaj sobie o konstruktorach klas.
A takie coś widziałeś kiedyś:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; }
Poczytaj sobie lub zdebuguj program i zobacz co się dzieje w metodzie Application->CreateForm, a co w metodzie Application->Run().
Może wtedy zrozumiesz dlaczego od razu rysuje Ci te wszystkie punkty. W każdym bądź razie program jak najbardziej prawidłowo się zachowuje.
Użytkownik Igor edytował ten post 24 listopad 2005, 17:32
nie wiem czy w bcb dziala ale sprobuj Application->ProcessMessages();
Mateusz - program działa poprawnie, gdyż wykonuje pętlę for, ale Ty nie dajesz mu możliwości pokazania na ekranie etapów pośrednich (tak samo w czasie działania tej pętli nie będziesz mógł np. przesunąć okna), stąd konieczność dodania "Application->ProcessMessages();" w każdym przebiegu pętli for :)
W tym przypadku ProcessMessages nic nie da. Albo nieuważnie czytasz kod programu albo powinieneś zapoznać się z książkami do C++ Buildera z rozdziałem na temat tworzenia formy TForm1. Kiedy jest ona tworzona?
Jak można przesuwać oknem jeśli program jeszcze nie doszedł do kodu w którym jest ono tworzone?
:D
Użytkownik Igor edytował ten post 24 listopad 2005, 17:56
Może tak? :)//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int a, b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- unsigned long __stdcall rysuj(void*) { Form1->DoubleBuffered = true; Form1->Image1->Canvas->Brush->Style = bsClear; for(int x = 0; x < 100; x++) { int a = random(390); int b = random(390); Form1->Image1->Canvas->Pixels[a][b] = clRed; Sleep(1); } } void __fastcall TForm1::FormShow(TObject *Sender) { unsigned long t; CreateThread(NULL,0,rysuj,NULL,0,&t); } //---------------------------------------------------------------------------
Użytkownik Cyrkiel edytował ten post 24 listopad 2005, 19:15
wogle gdzie ty ten kod wrzuciles, wrzuc go w onCreate
oczywiście już wcześniej dodałem instrukcje Sleep() o opóźnieniu 1000milisekund
gdzie wcześniej, wcześniej sie chyba nie da :blink:
W tym przypadku ProcessMessages nic nie da. Albo nieuważnie czytasz kod programu albo powinieneś zapoznać się z książkami do C++ Buildera z rozdziałem na temat tworzenia formy TForm1. Kiedy jest ona tworzona?
Jak można przesuwać oknem jeśli program jeszcze nie doszedł do kodu w którym jest ono tworzone?
:D
Może tak? :)//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int a, b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- unsigned long __stdcall rysuj(void*) { Form1->DoubleBuffered = true; Form1->Image1->Canvas->Brush->Style = bsClear; for(int x = 0; x < 100; x++) { int a = random(390); int b = random(390); Form1->Image1->Canvas->Pixels[a][b] = clRed; Sleep(1); } } void __fastcall TForm1::FormShow(TObject *Sender) { unsigned long t; CreateThread(NULL,0,rysuj,NULL,0,&t); } //---------------------------------------------------------------------------
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam taki kodzik chyba nie musze tułmaczyć o co chodzi :P ale dla ytch którzu nie wiedzą. Program ma rysować losowo wybrane współrzędne pixsela a owych ma być 100. Po skompilowaniu programu na ekranie pojawia się od razu te 100 pixeli
oczywiście już wcześniej dodałem instrukcje Sleep() o opóźnieniu 1000milisekund, ale co się okazało?? Forma w ogóle się nie ukazała!! Szukałem czy może niechcący czegoś nie przestwiłem z widocznością Formy ale nie, dla pewności jeszcze raz napisałem kod i to samo!! O co chodzi??
nie wiem czy w bcb dziala ale sprobuj Application->ProcessMessages();
Po skompilowaniu programu na ekranie pojawia się od razu te 100 pixeli
oczywiście już wcześniej dodałem instrukcje Sleep() o opóźnieniu 1000milisekund, ale co się okazało?? Forma w ogóle się nie ukazała!!
To chyba za krótko czekałeś :).
TForm1 *Form1; int a, b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
Wiesz co to jest ten fragment kodu? Jeśli nie to poczytaj sobie o konstruktorach klas.
A takie coś widziałeś kiedyś:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; }
Poczytaj sobie lub zdebuguj program i zobacz co się dzieje w metodzie Application->CreateForm, a co w metodzie Application->Run().
Może wtedy zrozumiesz dlaczego od razu rysuje Ci te wszystkie punkty. W każdym bądź razie program jak najbardziej prawidłowo się zachowuje.
Użytkownik Igor edytował ten post 24 listopad 2005, 17:32
nie wiem czy w bcb dziala ale sprobuj Application->ProcessMessages();

Mateusz - program działa poprawnie, gdyż wykonuje pętlę for, ale Ty nie dajesz mu możliwości pokazania na ekranie etapów pośrednich (tak samo w czasie działania tej pętli nie będziesz mógł np. przesunąć okna), stąd konieczność dodania "Application->ProcessMessages();" w każdym przebiegu pętli for :)
W tym przypadku ProcessMessages nic nie da. Albo nieuważnie czytasz kod programu albo powinieneś zapoznać się z książkami do C++ Buildera z rozdziałem na temat tworzenia formy TForm1. Kiedy jest ona tworzona?
Jak można przesuwać oknem jeśli program jeszcze nie doszedł do kodu w którym jest ono tworzone?
:D
Użytkownik Igor edytował ten post 24 listopad 2005, 17:56
Może tak? :)//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int a, b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- unsigned long __stdcall rysuj(void*) { Form1->DoubleBuffered = true; Form1->Image1->Canvas->Brush->Style = bsClear; for(int x = 0; x < 100; x++) { int a = random(390); int b = random(390); Form1->Image1->Canvas->Pixels[a][b] = clRed; Sleep(1); } } void __fastcall TForm1::FormShow(TObject *Sender) { unsigned long t; CreateThread(NULL,0,rysuj,NULL,0,&t); } //---------------------------------------------------------------------------
Użytkownik Cyrkiel edytował ten post 24 listopad 2005, 19:15
wogle gdzie ty ten kod wrzuciles, wrzuc go w onCreate
oczywiście już wcześniej dodałem instrukcje Sleep() o opóźnieniu 1000milisekund
gdzie wcześniej, wcześniej sie chyba nie da :blink:
W tym przypadku ProcessMessages nic nie da. Albo nieuważnie czytasz kod programu albo powinieneś zapoznać się z książkami do C++ Buildera z rozdziałem na temat tworzenia formy TForm1. Kiedy jest ona tworzona?
Jak można przesuwać oknem jeśli program jeszcze nie doszedł do kodu w którym jest ono tworzone?
:D

Może tak? :)//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int a, b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- unsigned long __stdcall rysuj(void*) { Form1->DoubleBuffered = true; Form1->Image1->Canvas->Brush->Style = bsClear; for(int x = 0; x < 100; x++) { int a = random(390); int b = random(390); Form1->Image1->Canvas->Pixels[a][b] = clRed; Sleep(1); } } void __fastcall TForm1::FormShow(TObject *Sender) { unsigned long t; CreateThread(NULL,0,rysuj,NULL,0,&t); } //---------------------------------------------------------------------------
