kategoria: Blitz
[#1] [blitz] IDCMP_IDCMPUPDATE mi nie dziala
Czesc
tym razem chodzi mi wylacznie o Blitza.
Czy ktos kto ma chwile, checi oraz wie o czym pisze moglby sklecic program otwierajacy okno na WB, dodac do niego gadget typu boopsi (wystarczy jeden), ustawic w nim ICA_TARGET na ICTARGET_IDCMP i zobaczyc czy okno przechwytuje zdarzenia IDCMP_IDCMPUPDATE ?
Bo u mnie jakos tego nie robi wcale i juz sam nie wiem czy ja mam gdzies blad (siedze nad tym ze 3 godzinu juz) czy Blitz tu ma jakies niedociagniecie...

Oczywiscie to powinno byc napisane funkcjami systemowymi.

Dzieki
[#2] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@peceha, post #1

A czy mógłbyś wkleić kod? Da to jakiś pogląd, jak to u Ciebie wygląda.
[#3] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@Hexmage960, post #2

Hehe, no dobra.
Musialem napisac to od zera bo poprzednie to byla za duza sprawa :)

To co jest ponizej najpierw szuka ekranu WB, potem tworzy obrazek stystemowej strzalki "gora". Kolejna czesc robi gadget boopsi i na koniec otwieram okno.

Petla glowna jak widac czeka na IDCMP_IDCMPUPDATE (ktory powinien zostac wyslany po kliknieciu na gadget) oraz na nacisniecie dowolnego klawisza. Przy kazdym zdarzeniu narysuje prostokat by wiedziec ze takowe odbiera.

Niestety klikanie na gadget nie daje zadnej reakcji.

DEFTYPE.IntuitionBase *ibase
DEFTYPE.Screen        *scr
DEFTYPE.Window        *win
DEFTYPE.DrawInfo      *di
DEFTYPE.Image         *upimage
DEFTYPE.Gadget        *upbutton
DEFTYPE.IntuiMessage  *msg

DEFTYPE.l idcmp
DEFTYPE.l suc
DEFTYPE.w w
DEFTYPE.w h
DEFTYPE.b done

Dim tags.TagItem(20)



;nieistotne, szukam WB
;---------------------
*ibase  =IntuitionBase
lock.l  =LockIBase_(0)
*scr    =*ibase\FirstScreen
While *scr
  If (*scr\Flags)&#SCREENTYPE=#WBENCHSCREEN
    Pop While
    Goto jump_00
  EndIf
  *scr=*scr\NextScreen
Wend
jump_00:
UnlockIBase_(lock)
*di =GetScreenDrawInfo_(*scr)





;obrazek strzalki w gore
;-----------------------
tags(0)\ti_Tag =#SYSIA_Which,    #UPIMAGE
tags(1)\ti_Tag =#SYSIA_Size,     #SYSISIZE_HIRES
tags(2)\ti_Tag =#SYSIA_DrawInfo, *di
tags(3)\ti_Tag =#TAG_DONE,       0

*upimage=NewObjectA_(0,"sysiclass",&tags(0))
suc=GetAttr_(#IA_Width,*upimage,&w)
suc=GetAttr_(#IA_Height,*upimage,&h)




;objekt typu button jako gadget boopsi
;-------------------------------------
tags(0)\ti_Tag  = #GA_Previous,    0
tags(1)\ti_Tag  = #GA_ID,          112
tags(2)\ti_Tag  = #GA_Left,        30
tags(3)\ti_Tag  = #GA_Top,         30
tags(4)\ti_Tag  = #GA_Width,       w
tags(5)\ti_Tag  = #GA_Height,      h
tags(6)\ti_Tag  = #GA_DrawInfo,    *di
tags(7)\ti_Tag  = #GA_GZZGadget,   False
tags(8)\ti_Tag  = #GA_Image,       *upimage
tags(9)\ti_Tag  = #ICA_TARGET,     #ICTARGET_IDCMP
tags(10)\ti_Tag = #TAG_DONE,       0

*upbutton=NewObjectA_(0,"buttongclass",&tags(0))




;otwieram okno
;-------------
idcmp=#IDCMP_CLOSEWINDOW|#IDCMP_RAWKEY|#IDCMP_IDCMPUPDATE
title.s="test"

tags(0)\ti_Tag =#WA_Left,     *scr\WBorLeft
tags(1)\ti_Tag =#WA_Top,      *scr\BarHeight+1
tags(2)\ti_Tag =#WA_Width,    *scr\Width/4
tags(3)\ti_Tag =#WA_Height,   *scr\Height/2
tags(4)\ti_Tag =#WA_PubScreen,*scr
tags(5)\ti_Tag =#WA_Title,    &title.s
tags(6)\ti_Tag =#WA_Activate, True
tags(7)\ti_Tag =#WA_Flags,    #WFLG_DRAGBAR|#WFLG_CLOSEGADGET
tags(8)\ti_Tag =#WA_IDCMP,    idcmp
tags(9)\ti_Tag =#WA_Gadgets,  *upbutton
tags(10)\ti_Tag=#TAG_DONE,    0

*win=OpenWindowTagList_(0,&tags(0))
suc=SetFont_(*win\RPort,*scr\RastPort\Font)



Repeat
  WaitPort_(*win\UserPort)
  *msg=GetMsg_(*win\UserPort)
  While *msg
    Select *msg\Class
      Case #IDCMP_IDCMPUPDATE
        SetAPen_ *win\RPort,1
        RectFill_ *win\RPort,100,100,150,150
      Case #IDCMP_RAWKEY
        SetAPen_ *win\RPort,1+Int(Rnd(3))
        RectFill_ *win\RPort,12,200,23,250
      Case #IDCMP_CLOSEWINDOW
        done=True
    End Select
    ReplyMsg_(*msg)
    *msg=GetMsg_(*win\UserPort)
  Wend
Until done
CloseWindow_(*win)
DisposeObject_(*upimage)
End
[#4] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@peceha, post #3

Chyba wiem dlaczego nie wysyła tych wiadomości:

Spróbuj dodać do listy tagów przy tworzeniu tego przycisku tagów:

GA_Immediate, TRUE,
GA_RelVerify, TRUE.

GA_Immediate prosi, by wysyłać komunikaty bezpośrednio po naciśnięciu przycisku.
GA_RelVerify prosi o to samo, tylko przy zwalnianiu przycisku myszy nad gadżetem.
[#5] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@Hexmage960, post #4

Niestety zaden z nich nie pomoglo (wstawilem oba jednoczesnie a potem raz jeden raz drugi)
Moze byc tak ze blitz ma tu jakies niedopatrzenie i tyle.
[#6] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@peceha, post #5

EDIT:
Więc u mnie to działa w języku C (troszkę okroiłem kod).

Ostatnia aktualizacja: 17.04.2019 11:44:53 przez Hexmage960
[#7] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@peceha, post #5

Hej, kod IDCMP_IDCMPUPDATE to akurat heksadecymalnie $80000000. Czy aby na pewno zapodajesz tę flagę jako liczbę 32-bitową bez znaku? Może tu tkwi przyczyna.

Spróbuj idcmp.l=#IDCMP_CLOSEWINDOW|#IDCMP_RAWKEY|#IDCMP_IDCMPUPDATE

Ostatnia aktualizacja: 17.04.2019 13:14:40 przez Hexmage960
[#8] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@Hexmage960, post #7

chyba troche za duzo :)

/* for notifications from "boopsi" gadgets */
#define IDCMP_IDCMPUPDATE 0x00800000 /* new for V36 */

ale wstawialem bezposrednio liczbe zamiast #IDCMP_IDCMPUPDATE wprost do odpowiedniego tagu (i wywalalem pozostale IDCMP) - niestety nie pomoglo.

Ostatnia aktualizacja: 17.04.2019 13:43:07 przez peceha
[#9] Re: [blitz] IDCMP_IDCMPUPDATE mi nie dziala

@peceha, post #8

Po calej nocy walki dzis rano nadeszla wygrana szeroki uśmiech

Znalazlem, ze:
#define ICTARGET_IDCMP (~0L)

wiec usunalem #ICTARGET_IDCMP z kodu i wpisalem bezposrednio TRUE (-1 w blitzie)

Teraz wszystko dziala.
Byc moze jest literowka w pliku amigalibs.res z ktorego to Blitz bierze wszystkie systemowe stale.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem