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

Вниз

проблема с прозрачностью окон   Найти похожие ветки 

 
dubdaze   (2004-06-27 19:14) [0]

есть функция, которая делает окно прозрачным, она выглядит следующим образом

function RegionFromBitmap(ABitmap : Graphics.TBitmap; TransparentColour : TColor): HRGN;
var
x, y           : integer;
Rgn1, Rgn2  : hrgn;
Startx : integer;
InTransparent : Boolean;
begin
Rgn1 := 0;
For y := 0 to ABitmap.Height-1 do begin
  Startx := 0;
  InTransparent := True;
  For x := 0 to ABitmap.Width do begin
    If (ABitmap.Canvas.Pixels[x, y] = TransparentColour) or (x = ABitmap.Width) then begin
      If Not InTransparent then begin
        if Rgn1 = 0 then begin
          Rgn1 := CreateRectRgn(Startx, y, x, y+1);
        end
        else begin
          Rgn2 := CreateRectRgn(Startx, y, x, y+1);
          if Rgn2 <> 0 then CombineRgn(Rgn1, Rgn1, Rgn2, RGN_OR);
          DeleteObject(Rgn2);
        end;
      end;
      InTransparent := True;
    end
    else begin
      If InTransparent then begin
        Startx := x;
      end;
      InTransparent := False;
    end;
  end;
end;
Result := Rgn1;
end;

далее у меня есть таймер, который использует эту функцию для создания анимации (типа screen mate"а такого), форма, соответственно, делается прозрачной

procedure TForm1.Timer1Timer(Sender: TObject);
var
ABitmap: TBitmap;
ARegion: HRGN;
r: trect;
begin
ABitmap:=TBitmap.Create;
I:=I+1;
if I > 1 then I:=0;
case I of
  0: ABitmap.LoadFromFile("1.bmp");
  1: ABitmap.LoadFromFile("2.bmp");
end;
ARegion:=RegionFromBitmap(ABitmap, clLime);
SetWindowRgn(Handle, ARegion, True);
 r:=Rect(0, 0, Abitmap.Width, Abitmap.Height);
 Form1.Canvas.CopyRect(r, ABitmap.Canvas, r);
DeleteObject(ARegion);
ABitmap.Free;
end;

border style у формы bsNone, так вот проблема в том, что во время анимации при перетаскивании формы при помощи следующего кода

procedure MoveForm(Sender: TWinControl);
begin
 ReleaseCapture;
 Sender.Perform(WM_SYSCOMMAND, $F012,0);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then MoveForm(Self);
end;

остается ободок от формы, который хрен знает откуда берется, предполагаю, что он от установленной предыдущей картинкой формы, как это исправить?


 
wicked ©   (2004-06-27 21:06) [1]

никак.....



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

Форум: "Media";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.045 c
6-1089116732
ruslan
2004-07-06 16:25
2004.09.19
modem, i internet


3-1092905893
Alex_Bredin
2004-08-19 12:58
2004.09.19
Выделение области в DBGridEH


14-1094036140
Real
2004-09-01 14:55
2004.09.19
Восстановление нормальной загрузки Win9x - Win2000 - Linux


8-1088321110
tytus
2004-06-27 11:25
2004.09.19
TJpegImage...


14-1094040572
BigFat
2004-09-01 16:09
2004.09.19
звуки





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