На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Прозрачный компонент под анимацией
    Всем привет. Не могу добиться желаемого результата для анимированной картинки с прозрачным задним планом (типа курсора мыши) для отображения хода выполнения запроса в программе.
    Один из вариантов, рисование на потомке TPanel (пробовал сразу на TPaint и на форме - не получается, или я не мог понять из прочитанного :) )
    ExpandedWrap disabled
      //---------------------------------------------------------------------------
      #include <vcl.h>
      #pragma hdrstop
      #include "WaitBoxUnit.h"
      #include "math.h"
       
      //---------------------------------------------------------------------------
      #pragma package(smart_init)
      __fastcall WImagePn::WImagePn(TComponent* Owner): TPanel(Owner)
      {
         this->Parent       = dynamic_cast<TWinControl*>(Owner);
       
         this->Width        = 40;
         this->Height       = 40;
         this->BorderWidth  = 0;
         this->BorderStyle  = bsNone;
         this->BevelOuter   = bvNone;
         this->BringToFront();
       
         Images             = new TPngImage;
         ShadowImages       = new Graphics::TBitmap();
         ShadowTemplate     = new Graphics::TBitmap();
       
         MImageCounter      = 0;
         MType              = tSnake;
         SetImageType(MType);
       
         Timer              = new TTimer(Owner);
         Timer->Enabled     = true;
         Timer->Interval    = 1000;
         Timer->OnTimer     = OnTimer;
      }
      //---------------------------------------------------------------------------
       
      __fastcall WImagePn::~WImagePn()
      {
         delete ShadowImages;
         delete ShadowTemplate;
         delete Timer;
         delete Images;
      }
      //---------------------------------------------------------------------------
       
      void __fastcall WImagePn::Paint()
      {
         TPanel::Paint();
         try {
            BitBlt(ShadowTemplate->Canvas->Handle, 0,0,40,40, ShadowImages->Canvas->Handle, (MImageCounter * 40), 0, SRCCOPY);
            TPanel::Canvas->Draw(0, 0, ShadowTemplate);
           } __finally {
         }
      }
      //---------------------------------------------------------------------------
       
      void __fastcall WImagePn::OnTimer (TObject *Sender)
      {
          MImageCounter ++;
          if (MImageCounter > 7)
             MImageCounter = 0;
       
          this->Invalidate();
          Application->ProcessMessages();
      }
      //---------------------------------------------------------------------------
       
      void __fastcall WImagePn::SetImageType(MImageType Value)
      {  String UImageName;
         MType = Value;
         if      (MType == tSnake)        UImageName = "WAIT_IMAGE_01";
         else if (MType == tFadingBalls)  UImageName = "WAIT_IMAGE_02";
         else if (MType == tRainbow)      UImageName = "WAIT_IMAGE_03";
         else                             UImageName = "WAIT_IMAGE_04";
       
         TResourceStream *RcStream = new TResourceStream(unsigned(HInstance), UImageName, L"RT_RCDATA");
         try {
            Images->LoadFromStream(RcStream);
            ShadowImages->Assign(Images);
            ShadowTemplate->Assign(Images);
            ShadowTemplate->SetSize(40, 40);
         } __finally {
            delete RcStream;
         }
         this->Invalidate();
      }
      //---------------------------------------------------------------------------
       
      int __fastcall WImagePn::GetInterval()
      {
         return Timer->Interval;
      }
      //---------------------------------------------------------------------------
       
      void __fastcall WImagePn::SetInterval(int Value)
      {
         Timer->Interval = Value > 0 ? Value: 1000;
       
      }
      //---------------------------------------------------------------------------

    ну и сам хеадер
    ExpandedWrap disabled
      //---------------------------------------------------------------------------
      #ifndef WaitBoxUnitH
      #define WaitBoxUnitH
      //---------------------------------------------------------------------------
      #include <Classes.hpp>
      #include <PngImage.hpp>
      #include <Forms.hpp>
       
      //---------------------------------------------------------------------------
      enum MImageType {tSnake, tFadingBalls, tRainbow, tBrokenCircle};
       
      class PACKAGE WImagePn : public TPanel   // TCustomPanel
      {
      private:
         TTimer *Timer;
         MImageType MType;
         int MImageCounter;
         TPngImage *Images;
         Graphics::TBitmap *ShadowImages;
         Graphics::TBitmap *ShadowTemplate;
      protected:
         virtual void __fastcall Paint(void);
         int __fastcall GetInterval();
         void __fastcall SetInterval(int Value);
         void __fastcall SetImageType(MImageType Value);
         void __fastcall OnTimer (TObject *Sender);
      public:
         virtual __fastcall WImagePn(TComponent* Owner);
         virtual __fastcall ~WImagePn();
      __published:
         __property int Speed = {read = GetInterval, write = SetInterval};
         __property MImageType Type = {read = MType, write = SetImageType};
      };
       
      //---------------------------------------------------------------------------
      #endif


    Все нормально рисуется, только задний фон - не прозрачный. Создавал компонент TPaintBox и рисовал на нем, но подменить вывод на канву панели с сохранением прозрачности не добился, также пробовал создать потомка TPaintBox - аналогично, потом формы и рисовать на ней - тот же результат. В какую сторону "копать"? Огромное спасибо за любой совет (или ответ), а то другой день ломаю голову.
    Сообщение отредактировано: Syslik -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0206 ]   [ 16 queries used ]   [ Generated: 19.04.24, 00:53 GMT ]