Šta je novo?

Delphi pomoc potrebna-nece da mi crta Rectangle

Marvin

Čuven
Učlanjen(a)
26.09.2002
Poruke
356
Poena
620
Ono sto meni treba je da po startovanju programa nacrta odredjeni
pravougaonik.Kako?
Hocu da mi FormCreate procedura nacrta Rectangle, ali on nece. Ako
stavim neko dugme, pa OnClick event za to dugme, hoce da ga nacrta, ali
samo u FormCreate proceduri nece. Probao sam i da menjam boju pen i
brush, medjutim nista.U toj istoj FormCreate proceduri se nalazi jos
nekoliko poslova koje obavlja bez problema (npr. inicijalizacija nekih
promenljivih, promena pen i brush boje itd.)

Kod procedure:


procedure TfrmForm1.FormCreate(Sender: TObject);
begin
BrojKrugova:=1;
BrojPokusaja:=1;
with pozicija do
begin
left:=150;
top:=50;
right:=170;
bottom:=70;
end; {with}
Canvas.Pen.Color:=clBlue;
Canvas.Rectangle(148,48,300,400);
end; {procedure}

E sad, on sve odradi kako treba, cak i promeni boju Pena na clBlue, ali

nece da mi nacrta ovaj pravougaonik. Nece ni liniju, nista...


Ideje?
 
Ma nacrta on to tebi, samo sto na sledeci WM_PAINT msg od windowsa forma "osvezi" svoj defaultni izgled (tj samo sa komponentama koje imaju formu kao Parent property).

Umesto da to radis u OnCreate eventu, prebaci sve u OnPaint, pa ces da vidis. To jest, najbolje je da inicijalizaciju podataka (ovo top:=, left:=...) ostavis u OnCreate, a samo crtanje po Canvasu prebacis u OnPaint.
 
Mislim da sve shto treba da se uradi je da se inicijalizuje canvas. Znaci, pre crtanja ubaciti:

frmForm1.Canvas.Create;
 
Ako forma kao klasa sadrzi canvas objekat, onda je prilikom kreiranja forme u procesu inicijalizacije kreiran i canvas objekat. Isto vazi i za kill - kada se povuce form.free, ubice se i canvas subcomponent...
 
Tako sam i ja mislio. Medjutim, vishegodishnje iskustvo u Delphiju :d :smoke: mi govori da se canvas ne inicijalizuje automatski, vec se mora eksplicitno pozvati (verovatno analogno BeginPaint funkciji iz API-ja). Vizuelno, inicijalizacija canvasa se prepoznaje time shto forma ili kontrola postaju skroz bele.

EDIT: Sad sam probao (Delphi 6 Personal) i da, treba da se ubaci u OnPaint event, bez kreiranja canvasa. Ali mogu da potpishem da u ranijim verzijama (tipa 3 i 4) ovo nije radilo kako treba. E sad, da li je to bio neki bag ili sam ja lud, ne znam :)
 
Poslednja izmena:
Inicijalizacij canvasa je fakticki samo rezultat rezervisanja device contexta.

Kakvo ti je to visegodisnje iskustvo u delphiju, kada si stao kod verzija 3 i 4, te preskocio ove 5, 6, 7, a mozda i 8? :D
 
Chim se pojavi serial za 8.0, eto je na mom kompu... :d

Shalim se naravno, evo sad koristim Personal edition, registrovao sam se na borland.com, sve je legalno...
 
Hvala svima,
da, samo je trebalo da se ubaci u OnPaint
Pozdrav
 
Vrh Dno