Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Почему иногда неверно работает?   Найти похожие ветки 

 
Barbaris   (2004-10-25 16:57) [0]

Рисую регионы формы по битмапу. Очень редко, но случается так, что "прозрачные" регионы не вырезаются из формы программы.
Почему так?


function BitmapToRegion(bmp: TBitmap) : dword; stdcall;
var
   ix,iy : integer;    
   tc    : TColor;    
   b1    : boolean;    
   c1    : cardinal;  
   i1    : integer;    
begin
 Result := 0;
 i1 := 0;
  tc := bmp.transparentColor and $FFFFFF;
 with bmp.canvas do
    for iy := 0 to bmp.height - 1 do
   begin
     b1 := False;
      for ix:=0 to bmp.Width - 1 do
        if (pixels[ix, iy] and $FFFFFF <> tc) <> b1 then begin
          if b1 then begin
           c1:=CreateRectRgn(i1,iy,ix,iy+1);
           if result<>0 then
             begin
                CombineRgn(Result, Result, c1, RGN_OR);
               DeleteObject(c1);
              end
           else
             Result := c1;
         end else i1 := ix;
         b1:=not b1;
       end;
     if b1 then begin
       c1:=CreateRectRgn(i1, iy, bmp.width-1, iy+1);
       if (Result <> 0) then
         begin
           CombineRgn(Result, Result, c1, RGN_OR);
           DeleteObject(c1);
         end
       else
         Result := c1;
     end;
   end;
     Application.ProcessMessages();
end;

procedure TMainForm.FormShow(Sender: TObject);
var
 sapppath : string;
 Region : HRGN;
 P: TBitmap;
 f : Textfile;
begin
sapppath := ExtractFilePath(Application.ExeName);

if FileExists(sapppath+"Resources\Main.rgn") then exit;

  P := TBitmap.Create;
  try
     P.LoadFromFile(sapppath+"Resources\Images\Skins\Main_2.bmp");
     DiscKeeper.Width := p.Width;
     DiscKeeper.Height := p.Height;
     Region := BitmapToRegion(p);
     SetWindowRgn(DiscKeeper.Handle, Region, True);
     DeleteObject(Region);
  finally
    P.Free;
    Assignfile(f,sapppath+"Resources\Main.rgn");
    Rewrite(f);
    Writeln(f,"qwerty");
    closefile(f);
  end;
end;


 
Rouse_ ©   (2004-10-25 23:10) [1]

Было бы проще если бы та дал линк на регион с которым не правильно работает данный алгоритм...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.035 c
1-1098431826
newh
2004-10-22 11:57
2004.11.07
Image со скроннигом


1-1098340108
__dmitry
2004-10-21 10:28
2004.11.07
Run time error 216


1-1098782807
msdn11
2004-10-26 13:26
2004.11.07
Что-то тут не то.


1-1098208529
Falcon(TFSoft)
2004-10-19 21:55
2004.11.07
^ и @


14-1098188035
AlexG
2004-10-19 16:13
2004.11.07
Меня опять напугали совместимостью AMD шек





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский