Главная страница
    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.039 c
1-1098863806
ызфт
2004-10-27 11:56
2004.11.07
Запутался в ООП


14-1098094155
TUser
2004-10-18 14:09
2004.11.07
Дот НЕТ


14-1098103960
Оля
2004-10-18 16:52
2004.11.07
Привязка к компьютеру


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


3-1097055881
msguns
2004-10-06 13:44
2004.11.07
ADO+MSAccess+Update





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский