Конференция "KOL" » Форма прозрачная для кликов [Delphi, Windows]
 
  • SKA1997 © (17.11.06 21:50) [0]
    Доброго времени суток.

    Мудрые люди (по другому и быть не может!), подскажите ...
    Как делается форма, прозрачная для кликов ?
  • Galkov © (18.11.06 00:06) [1]
    Чего-нибудь типа такого, наверное:


     with Form^ do begin
       ExStyle := ExStyle or WS_EX_LAYERED;
       SetLayeredWindowAttributes(handle, TransporentColor, 0, LWA_COLORKEY);
     end;

  • ANTPro © (18.11.06 00:42) [2]
  • homm © (18.11.06 13:43) [3]
    А по-моему человек о другом спрашивает.

    > Как делается форма, прозрачная для кликов ?
    Т.е. как я понял, пользователь кликает на форме, а она передает событие клика лежащему под собой компоненту (не обязательно этого-же приложения)

    зы. Кому надо хороший телепатор, могу сказать где свой взял :D
  • SKA1997 © (18.11.06 20:52) [4]
    Galkov - точно не то, да и потом вот этот параметр LWA_COLORKEY у меня не сработает (специфика приложения), а то бы и с регионами не пришлось бы возиться (приходится дополнительно маску создавать)...

    Ссылка ANTPro тоже не про то ...

    Как создать прозрачненькую (силами винды) и не прямоугольную форму я в курсе, а вот как, как правильно говорит homm сделать такую форму, которая клик бы передавала лежащему под собой объекту не знаю ...

    ???
  • ANTPro © (18.11.06 21:31) [5]
    > [3] homm ©   (18.11.06 13:43)
    > Кому надо хороший телепатор, могу сказать где свой взял :D

    Колись ;)
  • Vladimir Kladov (18.11.06 21:32) [6]
    WM_NCHITTEST, HTTRANSPARENT?
  • SKA1997 © (18.11.06 23:19) [7]
    У меня на форме находится включенный ShockwaveFlash ... И как быть в этом случае с HTTRANSPARENT ?
  • SKA1997 © (18.11.06 23:22) [8]
    Замысле такой - эта форма всегда сверху (или снизу), но она не мешает пользователю... Через нее можно кликать и т.п. Но на форме тем самым постоянно крутится флэш-анимация ...
  • SKA1997 © (19.11.06 22:54) [9]
    Разобрался... :) Теперь все ок...
  • Galkov © (19.11.06 23:30) [10]
    Так рассказал бы как...
    Мне в голову ничего не приходит, кроме sub-classing-а через SetWindowLong с индексом GWL_WNDPROC :(
  • Dy1 © (22.02.07 20:24) [11]
    SKA1997 ©   [9]
    Разобрался... :) Теперь все ок...

    Сие есмь тайна или можно рассказать это не таким умным? :)
  • имя (11.06.07 23:40) [12]
    Удалено модератором
  • имя (11.06.07 23:40) [13]
    Удалено модератором
  • имя (11.06.07 23:40) [14]
    Удалено модератором
  • Barloggg (22.10.07 10:48) [15]
    вот и я задумался как бы подобное сделать.

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

    ну заметив свойство transparent+mouseTransparent я было подумал что достаточно бросить поверх всего растянутый на всю форму скажем паинтбокс и рисувать на нем каждый такт таймера эти снежинки.
    Гм.
    однако он не стал прозрачным! клики сквозь него как положено проходят, на изображение нет.

    Как сделать правильно?
    Не делать же каждую снежинку отдельным контролом в самом деле.
  • homm © (22.10.07 13:15) [16]
    > [15] Barloggg   (22.10.07 10:48)
    > однако он не стал прозрачным! клики сквозь него как положено
    > проходят, на изображение нет.

    Нужно включить прозрачность для всех дочерних элементов.
  • Barloggg (22.10.07 14:16) [17]
    эмм... дочерних или тех что под ним?
    ибо у этого паинтбокса нет дочерних.

    хмм...значит ли это что всем вообще надо включать прозрачность?
  • homm © (22.10.07 14:52) [18]
    > [17] Barloggg   (22.10.07 14:16)
    > хмм...значит ли это что всем вообще надо включать прозрачность?

    Вообще конечно не логично…
    Временно определи OLD_TRANSPARENT м включи у всех контролов, даблбуфер.
    Дома поколдую, что-бы и в новой версии так можно было сделать.
  • homm © (22.10.07 22:06) [19]
    Влдаимир, пропачте, пожалуста мою любимую процедурку %)

      Result := TRUE;

      if Sender.fTransparent and (not Sender.fParentRequirePaint) then begin


    became to
      Result := TRUE;

      if (Sender.fTransparent or Sender.fDoubleBuffered)  and (Sender.FParent <> nil)
       and Sender.FParent.fDoubleBuffered and (not Sender.fParentRequirePaint) then begin



    AND

              with C{-}^{+} do begin
               if (C <> nil) and fTransparent then begin


    became to
              with C{-}^{+} do begin
               if (C <> nil) and (fTransparent or fDoubleBuffered) then begin

  • имя (04.05.08 04:07) [20]
    Удалено модератором
  • имя (04.05.08 04:07) [21]
    Удалено модератором
 
Конференция "KOL" » Форма прозрачная для кликов [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]