Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem DELPHI - scrollbox, Timage a zmena velkosti kresliacej plochy za behu programu

nazdar. potreboval som plochu na kreslenie s premenlivou velkostou, tak som dal do scrollboxu image a na jeho canvas kreslim. ale ak chcem nieco nakreslit na okraj, tak potrebujem, aby sa ta kresliaca plocha v tom scrollboxe zvacsila(scrollbox ostane taky velky, ako je - cize len sa scrollbary zmensia a bude sa tam dat pohybovat).
Najprv som to robil tak, ze som puzival na zvacsenie prikaz
aObrazok.SetBounds(0, 0, tmpSir, tmpVys)
ale to mi potom aj spravilo okolo mojho bieleho platna este sede okraje (na jednej strane dost velke) a to mi vadilo.
Potom som nejak nahodou prisiel na to, ze ked som pouzil
aObrazok.Picture.Bitmap.Width:= tmpSir;
aObrazok.Picture.Bitmap.Height:= tmpVys;
aObrazok.SetBounds(0, 0, tmpSir, tmpVys);
tak to islo OK.
Ale teraz, ked som nieco mazal mimo zobrazovanu plochu(cize bolo nutne posuinut posuvnik, aby som ten utvar videl), tak sa mi to stalo zas, ale na opacnej strane.
Zmazalo mi to ten objekt, zobrazilo mi zaciatok kresliaceho platno (vratilo do povodnej polohy), ale posuvnik nebol az celkom na kraji vlavo a ked som ho tam posunul ja, tak tam bola ta moja seda dostsiroka plocha, ktoru tam nechcem mat.
Uz druhy den sa s tym morim...
Prosim, kto s tym pracujete, tak mi poradte, ako sa pracuje s TImage a vsetkym,co s tym suvisi, lebo iba s tym zacinam a mam dost problemov.
Mimochodom, ak to pomoze, vykreslujem tam pomocou rectangle, lineTo a pisem text pomocou textOut. porpitom menim farbu brush, style, atd
Dakujem

Předmět Autor Datum
Kdyz se podivas na normalni graficke programy, tak v nich si zvolis velikost platna a pak kreslis. P…
Jan Fiala 12.03.2006 07:34
Jan Fiala
ja robim nieco take ako MS Project, ked ti to nieco hovori. Bol by som rad, keby to bolo take, ako t…
marek 12.03.2006 10:43
marek
Nastroje jako MSProject nepouzivaji kresleni na TImage, ale pouzivaji zpusob, kdy mas seznam objektu…
Jan Fiala 12.03.2006 12:06
Jan Fiala
no v podstate som sa snazil to vsetko robit objektovo.... tak by som mohol vyskusat aj ten paintbox.…
marek 12.03.2006 12:41
marek
Paintbox nedrzi nic napevn nakresneneho. Na PaintBox se kresli pouze v jeho metode OnPaint a sam se… poslední
Jan Fiala 12.03.2006 13:54
Jan Fiala

Kdyz se podivas na normalni graficke programy, tak v nich si zvolis velikost platna a pak kreslis. Pokud chces platno zvetsit/zmensit, pouzijes v tom programu nejakou funkci, ve ktere se rozhodnes, zda chces zvetsit pouze platno nebo i nakresleny obsah.
Myslim si, ze na tento zpusob jsou uzivatele zvykli a bude mnohem pruhlednejsi nez kdyz se uzivateli bude obrazek sam zvetsovat nebo zmensovat

ja robim nieco take ako MS Project, ked ti to nieco hovori. Bol by som rad, keby to bolo take, ako to je - ze ked dam nejaky objekt ku okraju platna (image.canvas), tak sa za=vacsi platno tak, aby bol ten objekt viditelny... A aj tak by ma zaujimalo, ako by sa malo kreszlit na tan cavas..
Ale ja tak dik.

Nastroje jako MSProject nepouzivaji kresleni na TImage, ale pouzivaji zpusob, kdy mas seznam objektu a ten vykreslujes pomoci TPaintBox v jeho metode OnPaint.
Znamena to ale napsat vse objektove od zacatku - spolecny predek, ktery se umi vykreslit, posunout, zmazat, propojit se a udrzovat propojeni s jinym objektem, mit dobre navrzeny seznam objektu atd.

Jinak ve tvem pripade, kdy potrebuju nejaky objekt nakreslit na Canvas:
1. vim, kam chci objekt nakreslit (uzivatel jej tam polozil)
2. vim rozmery toho objektu (protoze jej chci kreslit)
Takze ti nezbyva nez zjistit, zda se na Canvas vejde nebo zda bude "couhat" z Canvasu ven. Pokud se nevejde, zmenis rozmery - Image.Width, Image.Height. Ale protoze kreslis "natvrdo", zmena rozmeru zpusobi i deformaci toho, co jsi dosud nakreslil

Paintbox nedrzi nic napevn nakresneneho. Na PaintBox se kresli pouze v jeho metode OnPaint a sam se stara o prekresleni, pokud je to treba.

Takze predstava by byla asi takova:
vytvarim si seznam objektu, ktere chci nakreslit. Novy objekt pridam do seznamu a zavolam PaintBox.Paint (Refresh, Invalidate, ...)
V metode PaintBox.OnPaint budu mit cyklus, ktery projde seznam objektu a vykresli je.

Zpět do poradny Odpovědět na původní otázku Nahoru