Your example work well, perhaps a little fast the animation.
I have RosAsm!
I read you are using GdipImageDraw, that makes me to remember that there is some Draw functions in GDI and ... there is DrawIcon!
Just replacing the button with a small window:
Hi HSE, yes i tested that with DrawIcon too, but it was not working for transparent icons on the tests i was doing and neither for png and other kind of images, that's why i choose to use GdipImageDraw to make it a general usage drawing image routine. (That can also be used to draw webp files, btw).
Glad to see you are using RosAsm

I plan to make new updates soon. Recently i suceeded to implement SSE3 and SSE4 in the assembler, disassembler and debugger routines and started cleaning the whole code. I suceded to fix some old old issues in memory management and got the way to make the encoder and decoder be used as a standalone libraries (dlls). Now i´m currently working on the resources editor to fix whatever i can, and eventually build a new one based on the WizardsForm

The main problem was that hundreds of variables in RosAsm were being reused several times by different functions for different purposes and identifying which one is which is a true hell

The good news is i created a couple of libraries to start making it work as standalone: FastCRT.dll, RosMem.dll, IconEdit.dll and i´m allowing to use libwep.dll (from google) to be used in the resources images so we could also import and export webp files inside the resource section

About the speed on this tests. It maybe fast because some gifs are encoded in different ways. Some of them have more frames per scenes then others.
Try reducing the fps to 29.970 or 25 and changing the keyframe to 4 instead of 3. It may result on a delay time of something around 100 ms (that will be passed to WM_TIMER message) that is used in many gifs as well. Like this:
[AnimateFramePerSec: F$
29.970] ; or
25and change the keyFrame value used in GdipCreateImageInfo as below (marked in red)
call GdipCreateImageInfo D@Addressee, 0, 0, GDIP_DRAWIMG_DEFAULT, IDC_TIMER1, AnimateFramePerSec,
4, D$RsrcIconNfo.IconDataPtr, D$RsrcIconNfo.Size, GdipImageNfo1
call GdipCreateImageInfo D@Addressee, 0, 0, GDIP_DRAWIMG_FILL, IDC_TIMER2, AnimateFramePerSec,
4, D$RsrcIconNfo.IconDataPtr2, D$RsrcIconNfo.Size2, GdipImageNfo2