Witam
Zmieniłem Delphi 7 na Delphi 2005 PE.
I jest problem. W Delphi 2005 nie kompiluje mi się kod do tworzenia niestandardowej formy. Używam kodu stąd:
http://www.republika.pl/delphipl/wyklady/region/region.htm
Z tego modułu:
<url>
http://www.republika.pl/delphipl/wyklady/region/bitmpfrm.zip</url>
W taki sposób:
procedure costam;
var
rgn1 : hrgn;
begin
rgn1:=BitToFrm.Bitmap2Region(Maska.Picture.Bitmap,rgb(255,0,255),rgb(0,0,0)); // maska -> obrazek w TImage
SetWindowRgn(SplashFrm.Handle,rgn1,true); // splashfrm to nazwa formy, poddanej obrobce...
end;
Normalnie, powinno pojawic sie piekne, niestandardowe okienko... Ale, niestety w Delphi 2005 dostaje Accessa... Program się wykrzacza i po robocie.
Jakby ktoś wiedzial co zrobić, aby w łatwy i tak szybki sposób jak ten w tym unicie zrobić niestandardową formę, to PILNIE proszę o info. Dzięki.
Pozdr, Pepe
PS: Działa ta funkcja:
function TForm1.GenerujMaskeG(BitMap: TBitmap; transparentcolor: TColor;
Panelik: TForm): boolean;
var
x,y : integer;
rgn1, rgn2 : hrgn;
startx,endx : integer;
begin
result:=false;
rgn1 := 0;
for y := 0 to BitMap.Height-1 do
begin
x:=0;
repeat
while (bitmap.canvas.pixels[x,y] = transparentcolor) and (x = BitMap.width) do
inc(x);
startx:=x;
inc(x);
while (bitmap.canvas.pixels[x,y]<>transparentcolor) and (x<=BitMap.width) do
inc(x);
endx:=x;
if startx<>BitMap.Width then
begin
if endx= BitMap.Width then dec(endx);
if rgn1 = 0 then
begin
rgn1 := createrectrgn(startx+1,y,endx,y+1);
end else
begin
rgn2 := createrectrgn(startx+1,y,endx,y+1);
if rgn2<>0 then combinergn(rgn1,rgn1,rgn2,RGN_OR);
deleteobject(rgn2);
end;
end;
until x>=BitMap.width-1;
end;
if (rgn1<>0) then
begin
SetWindowRgn(panelik.Handle,rgn1,true);
result:=true;
end;
// na podstawie TCoolForm
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
GenerujMaskeG(maska.Picture.Bitmap,rgb(255,0,255),form1);
end;
Jak ktos wie jak poprawic tamten moduł (bittofrm.pas), proszę o kontakt