Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BCB6 - Crtanje canvas-om

[es] :: C/C++ programiranje :: BCB6 - Crtanje canvas-om

[ Pregleda: 1847 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

itf
Zagreb

Član broj: 59794
Poruke: 993
*.dsl.iskon.hr.



+9 Profil

icon BCB6 - Crtanje canvas-om13.04.2007. u 10:56 - pre 207 meseci
Da li postoji ikakva druga metoda crtanja upotrebom canvasa gdje se crtež neće obrisati nakon što ga prekrije drugi prozor i sl.. Naravno, postoji event OnPaint, no što kada parametri za crtanje su poznati tek naknadno? Za sada sam smislio samo ovo...:

Code:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int crtaj = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    crtaj = 1;
    Canvas->MoveTo(10, 100);
    Canvas->LineTo(StrToInt(Edit1->Text), StrToInt(Edit2->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
    if(crtaj)
        Button1Click(Sender);
}
//---------------------------------------------------------------------------


Ima kakav način da ne moram koristiti FormPaint a da dobijem istu stvar, jer problem je što tek naknadno dobivam podatke za crtanje iz EditBox-a?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB6 - Crtanje canvas-om13.04.2007. u 11:43 - pre 207 meseci
Nije mi poznato da postoji neki drugačiji, a lak način.

Potrebno je da negde nekako (neka lista objekata) pamtiš prethodne poteze (koordinate ili šta već)
i ceo kod za iscrtavanje tako imaš uvek u OnPaint()-u:

Code:

// PSEUDO
OnPaint()
{

   for ( objekat.prvi(); !objekat.end_of_list(); objekat.sledeci() )
   {
      objekat.crtaj();
   }
   
   // ako dinamicki vuces i iscrtavas liniju:
   trenutni.crtaj();

}


Alternativa je da crtas po BITMAPI (TImage) i od gotove linije pravis bitmapu, ali to ce sigurno
otezati UNDO, a kod vecih objekata moze da ponestane i resursa (RAM-a).

Po mom iskustvu OnPaint() bez problema uspeva da Handle-uje veliki broj objekata, ali sam koristio
TPaint unutar TScrollBox-a, sto nije lose resenje.

Svakako u konstruktor ubaci:
DoubleBuffered = true;
... da izbegnes flicker-ing.

 
Odgovor na temu

K-up

Član broj: 142706
Poruke: 10
*.ns.ac.yu.



Profil

icon Re: BCB6 - Crtanje canvas-om19.04.2007. u 10:31 - pre 207 meseci
Kreiraj jedan TGraphicControl ciji je Parent ta forma, pa override-uj njegovu virtualnu metodu Paint(), stavljajuci u nju svo crtanje po sopstvenom Canvasu od TGraphicControl. Paint() ce biti pozvana svaki put kada prozoru stigne Windows poruka za iscrtavanja -- dakle ne moras sam misliti o tome. Na promenu podataka od kojih zavisi crtanje, samo pozovi TGraphicControl::Invalidate().
 
Odgovor na temu

monte_sandman
Mark Andrej
heaven

Član broj: 61080
Poruke: 60
*.cg.yu.



Profil

icon Re: BCB6 - Crtanje canvas-om28.04.2007. u 17:21 - pre 206 meseci
A kakav je slucaj sa podacima u nekim labelama?Kako sacuvati njihov sadrzaj tokom rada programa?
 
Odgovor na temu

K-up

Član broj: 142706
Poruke: 10
*.ns.ac.yu.



Profil

icon Re: BCB6 - Crtanje canvas-om03.05.2007. u 15:34 - pre 206 meseci
U skladu sa teorijom i (dobrom) praksom bi bilo da ti GUI predstavlja samo view i controller nekog modela. Podaci ne treba da se cuvaju u labelama, nego u nekim objektima, varijablama i sl. ispod (model). Kada je potrebno da se podaci izbace na ekran, view se updateuje iz modela.
 
Odgovor na temu

[es] :: C/C++ programiranje :: BCB6 - Crtanje canvas-om

[ Pregleda: 1847 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.