请推荐一些可以实现各种图像淡出淡入效果的控件。
多谢。

解决方案 »

  1.   

    不知道控件,程序有一份,转贴把
    下面的代码可以在窗体上面淡入淡出一个图形:
    下面的代码可以在窗体上面淡入淡出一个图形:
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array[0..32767] of TRGBTriple;  /////////////////////////////////////////////////
      //                  Fade In                    //
      /////////////////////////////////////////////////procedure FadeIn(ImageFileName: TFileName);
    var
      Bitmap, BaseBitmap: TBitmap;
      Row, BaseRow      : PRGBTripleArray;
      x, y, step        : integer;
    begin
      // Bitmaps vorbereiten / Preparing the Bitmap //
      Bitmap := TBitmap.Create;
      try
        Bitmap.PixelFormat := pf32bit; // oder pf24bit / or pf24bit //
        Bitmap.LoadFromFile(ImageFileName);
        BaseBitmap := TBitmap.Create;
        try
          BaseBitmap.PixelFormat := pf32bit;
          BaseBitmap.Assign(Bitmap);
          // Fading //
          for step := 0 to 32 do
          begin
            for y := 0 to (Bitmap.Height - 1) do
            begin
              BaseRow := BaseBitmap.Scanline[y];
              // Farben vom Endbild holen / Getting colors from final image //
              Row := Bitmap.Scanline[y];
              // Farben vom aktuellen Bild / Colors from the image as it is now //
              for x := 0 to (Bitmap.Width - 1) do
              begin
                Row[x].rgbtRed := (step * BaseRow[x].rgbtRed) shr 5;
                Row[x].rgbtGreen := (step * BaseRow[x].rgbtGreen) shr 5; // Fading //
                Row[x].rgbtBlue := (step * BaseRow[x].rgbtBlue) shr 5;
              end;
            end;
            Form1.Canvas.Draw(0, 0, Bitmap); // neues Bild ausgeben / Output new image //
            InvalidateRect(Form1.Handle, nil, False);
            // Fenster neu zeichnen / Redraw window //
            RedrawWindow(Form1.Handle, nil, 0, RDW_UPDATENOW);
          end;
        finally
          BaseBitmap.Free;
        end;
      finally
        Bitmap.Free;
      end;
    end;/////////////////////////////////////////////////
    //                  Fade Out                   //
    /////////////////////////////////////////////////
    procedure FadeOut(ImageFileName: TFileName);
    var
      Bitmap, BaseBitmap: TBitmap;
      Row, BaseRow: PRGBTripleArray;
      x, y, step: integer;
    begin
      // Bitmaps vorbereiten / Preparing the Bitmap //
      Bitmap := TBitmap.Create;
      try
        Bitmap.PixelFormat := pf32bit;  // oder pf24bit / or pf24bit //
        Bitmap.LoadFromFile(ImageFileName);
        BaseBitmap := TBitmap.Create;
        try
          BaseBitmap.PixelFormat := pf32bit;
          BaseBitmap.Assign(Bitmap);
          // Fading //
         for step := 32 downto 0 do
          begin
            for y := 0 to (Bitmap.Height - 1) do
            begin
              BaseRow := BaseBitmap.Scanline[y];
              // Farben vom Endbild holen / Getting colors from final image //
              Row := Bitmap.Scanline[y];
              // Farben vom aktuellen Bild / Colors from the image as it is now //
              for x := 0 to (Bitmap.Width - 1) do
              begin
                Row[x].rgbtRed := (step * BaseRow[x].rgbtRed) shr 5;
                Row[x].rgbtGreen := (step * BaseRow[x].rgbtGreen) shr 5; // Fading //
                Row[x].rgbtBlue := (step * BaseRow[x].rgbtBlue) shr 5;
              end;
            end;
            Form1.Canvas.Draw(0, 0, Bitmap);   // neues Bild ausgeben / Output new image //
            InvalidateRect(Form1.Handle, nil, False);
            // Fenster neu zeichnen / Redraw window //
            RedrawWindow(Form1.Handle, nil, 0, RDW_UPDATENOW);
            sleep(20);
          end;
        finally
          BaseBitmap.Free;
        end;
      finally
        Bitmap.Free;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      FadeIn('F:\Documents\xywper0071.BMP')
    end;{*****************************}
     {by Yucel Karapinar, [email protected] }{ Only for 24 ve 32 bits bitmaps }procedure FadeOut(const Bmp: TImage; Pause: Integer);
    var
      BytesPorScan, counter, w, h: Integer;
      p                 : pByteArray;
    begin
      if not (Bmp.Picture.Bitmap.PixelFormat in [pf24Bit, pf32Bit]) then
        raise Exception.Create('Error, bitmap format is not supporting.');
      try
        BytesPorScan := Abs(Integer(Bmp.Picture.Bitmap.ScanLine[1]) -
          Integer(Bmp.Picture.Bitmap.ScanLine[0]));
      except
        raise Exception.Create('Error!!');
      end;  for counter := 1 to 256 do
      begin
        for h := 0 to Bmp.Picture.Bitmap.Height - 1 do
        begin
          P := Bmp.Picture.Bitmap.ScanLine[h];
          for w := 0 to BytesPorScan - 1 do
            if P^[w] > 0 then P^[w] := P^[w] - 1;
        end;
        Sleep(Pause);
        Bmp.Refresh;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      FadeOut(Image1, 1);
    end;