delphi - RoundRect

Programovacie jazyky, rady, poradňa...
franta86
Light Expert
Light Expert
Príspevky: 42
Registrovaný: 11 aug 2009, 12:13

delphi - RoundRect

Príspevok od používateľa franta86 »

mam problém chcel nakresliť napr. 5 obdĺžnikov s oblými rohmi. Používam proceduru RoundRect, ale prvy mi nakresli tak ako chcem a tie ďalšie už nie. co mam robit? viete o nejakej inej procedure ktora toto urobí?

Kód: Vybrať všetko

const Pocet = 5;
...
Diel:=(Image1.ClientHeight-14-(Pocet*2)) div Pocet;
for i:=1 to Pocet do
    Image1.Canvas.RoundRect(7,(i-1)*Diel+(i-1)*2+7,Image1.ClientWidth-7,i*Diel+i*2+7,17,(i-1)*Diel+(i-1)*2+17);
vid obrazok
http://www.upnito.sk/imggal.php?viewGal ... 80702d3530

este mala otazka: ako zistím inverznu farbu k danej farbe?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: delphi - RoundRect

Príspevok od používateľa audiotrack »

k prvému dotazu: posledný parameter máš zle, má byť tiež iba 17 a nie (i-1)*Diel+(i-1)*2+17. V prvej iterácii ti to víjde, lebo i-1 je nula tak sa všetky tie členy rovnajú nule a bude to iba tých 17. V ďalších iteráciach už nie. Ak nevieš prečo to má byť 17, tak si pozri dokumentáciu k tej funkcii

k druhému dotazu: pokiaľ mi je známe, žiadna taká funkcia neexistuje (v základných knižniciach). Stačí však od 255 odrátať hodnotu každého pixela, takže nejak takto

Kód: Vybrať všetko

.
.
.
for height := 0 to AnImage.Picture.Bitmap.Height - 1 do
  begin
    P := AnImage.Picture.Bitmap.ScanLine[height];
    for width := 0 to BytesPorScan - 1 do
        P^[width] := 255-P^[width];
  end; 
.
.
.
kde AnImage je príslušný obrázok v bmp. Je to iba ukážka, ak tam máš len jeden pixel tak to nebude v cykle a so scanom riadkov... Ale logiku som ti chcel radšej ukázať na celom obrázku nech nevzniknú nové otázky :)
franta86
Light Expert
Light Expert
Príspevky: 42
Registrovaný: 11 aug 2009, 12:13

Re: delphi - RoundRect

Príspevok od používateľa franta86 »

dakujem nakopol si ma
myslel som toto

Kód: Vybrať všetko

a:=clGreen;
a:=clWhite-a;
teda k bielej je inverzna cierna atd.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: delphi - RoundRect

Príspevok od používateľa audiotrack »

neviem či toto ešte patrilo k otázke, lebo mám pocit že som ju dostatočne jasne zodpovedal v tej ukážke. Len namiesto konštant musíš používať ich číselné hodnoty (lebo cl-konštantu nemá každá farba, len tie základné). Presne to isté som spravil aj ja v riadku P^[width] := 255-P^[width]; (ak to nebudeš mať na celý obrázok, ale iba jednu farbu tak to nebude takéto pole ale iba premenná ako v tvojom prípade)
franta86
Light Expert
Light Expert
Príspevky: 42
Registrovaný: 11 aug 2009, 12:13

Re: delphi - RoundRect

Príspevok od používateľa franta86 »

cez ColorDialog si vyberiem farbu a urobí mi to v poroadku bez ziadnej chyby.
Napísať odpoveď