Czemu to nie działa?? :( (CombineRgn)

0

Mam poniższy kod:
[code]SetWindowRgn(kraje.Handle,CombineRgn(CreateRectRgn(0,0,kraje.Width,kraje.Height),CreateRoundRectRgn(0,0,kraje.Width,kraje.Height,24,24),CreateRectRgn(kraje.Height,0,119,70), RGN_OR), true);[/code]
i niestety nie działa.. Czy moglibyście mi powiedzieć co robię nie tak?? "kraje" to listobox. Dzięki

0

Nie działa, bo czytasz helpa bez zrozumienia (jeśli w ogóle).

var r:HRGN;
begin
  r:=CreateRectRgn(0,0,kraje.Width,kraje.Height);
  CombineRgn(r,r,CreateRoundRectRgn(0,0,kraje.Width,kraje.Height,24,24),RGN_OR);
  CombineRgn(r,r,CreateRectRgn(kraje.Height,0,119,70),RGN_OR);
  SetWindowRgn(kraje.Handle,r,true);
end;

Zresztą coś mi sie tu nie zgadza... Co ty chcesz w ogóle osiągnąć? Bo do tej pory osiągnąłes standardowy prostokąt wielkości pierwotnego okna. Wykombinowałeś standardowy kształt okna, czyli lepiej byłoby , gdybyś nic nie robił.

0

Chodzi mi o to, żeby listbox(wnętrze) był zaokrąglony, a paski przewijania całe.

0
var r:HRGN;
begin
  r:=CreateRoundRectRgn(0,0,kraje.Width-szerpaska_ver,kraje.Height-wyspaska_hor,24,24);
  CombineRgn(r,r,CreateRectRgn(kraje.Width-szerpaska_ver,0,kraje.Width,kraje.Height);,RGN_OR);
  CombineRgn(r,r,CreateRectRgn(0,kraje.Height-wyspaska_hor,kraje.Width,kraje.Height);,RGN_OR);
  SetWindowRgn(kraje.Handle,r,true);
end;

Mozesz sie jeszcze pozbyc kwadracika, w dolnym prawym rogu:

var r:HRGN;
begin
  r:=CreateRoundRectRgn(0,0,kraje.Width-szerpaska_ver,kraje.Height-wyspaska_hor,24,24);
  CombineRgn(r,r,CreateRectRgn(kraje.Width-szerpaska_ver,0,kraje.Width,kraje.Height-wyspaska_hor
);,RGN_OR);
  CombineRgn(r,r,CreateRectRgn(0,kraje.Height-wyspaska_hor,kraje.Width-szerpaska_ver,kraje.Height);,RGN_OR);
  SetWindowRgn(kraje.Handle,r,true);
end;

wyspaska_hor - wysokość paska horyzontralnego (poziomego)
szerpaska_ver - szerokość paska wertykalnego (pionowego)

// I pewnie jeszcze grubość ramki i takie tam trzeba uwzględnić.

0

Dzięki, ale właśnie przy pomocy tej: http://www.republika.pl/delphipl/wyklady/region/region.htm doszedłem do tego. :D
Dziękuję zły obolu :D

//A czy da się zrobić wokół wnętrza listboxa jeszcze powiedzmy czarną ramkę??

0

chyba nie.

0

Da się... Trzeba albo pobawić sie canvasem (jesli jest), albo zrobić to poprzez api (device context... getdc() i funkcje/procedury z tej grupy). Chyba nawet jest drawellipse(), czy drawrectangle(). To znaczy jest na pewno, ale nie wiem, czy akurat pod tymi nazwami.

0

Jednym słowem dużo roboty.... :( Jak będziesz miał czas to mógłbyś się tym pobawić ??

1

Witam wszystkich na forum.

Jak ktoś do tego nie doszedł to prezentuje sprawdzony kod na zaokrąglanie panelu co może być stosowane do róznych komponentów ,a także do formularzy:

http://www.noribo.prv.pl/faq/faq.html
Pytanie: 53

Pozdrawiam Grupa Noribo Częstochowa

1 użytkowników online, w tym zalogowanych: 0, gości: 1