ďťż

Ł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
  •