Нужно добавить восстановление позиции штриховой кисти.
Схема для наглядности
Add(MainForm,2953706,336,259)
{
Width=660
Height=356
Position=1
link(onCreate,12078549:doWork1,[(424,279)])
}
Add(Img_FloodFill,1917040,441,301)
{
Color=65535
ColorBorder=16711935
Style=6
link(onDraw,6784223:doDraw,[])
link(Bitmap,8794527:Var2,[])
}
Add(Button,6858880,336,301)
{
Left=305
Top=275
link(onClick,16704057:doEvent1,[])
}
Add(PaintBox,9740949,441,238)
{
Left=45
Top=20
Width=575
Height=230
Color=0
}
Add(HubEx,12078549,420,301)
{
link(onEvent,1917040:doDraw,[])
}
Add(Hub,16704057,385,301)
{
link(onEvent1,12078549:doWork2,[])
link(onEvent2,9740949:doRefresh,[(409,314)(409,244)])
}
Add(Img_FloodFill,6784223,483,301)
{
X=1
Y=1
Color=255
ColorBorder=16711935
UseOffsetFill=1
Style=6
link(Bitmap,8794527:Var3,[(489,285)])
}
Add(GetDataEx,8794527,441,280)
{
link(Data,9740949:Bitmap,[])
}
Запустив схему можно увидеть как PaintBox заливается первым элементом FloodFill желтой сеткой (заливка не сдвигается UseOffsetFill = False), а потом вторым FloodFill красной сеткой с смещенной заливкой на 1 пиксель по Х и Y (UseOffsetFill = True).
Нажав кнопку можно увидеть что останется только красная сетка. Причина в том что второй FloodFill сдвинул позицию, а первый FloodFill об этом не знает и первая сетка закрашивается второй. Так как позиция штриховой кисти в Canvas-е PaintBox-а, то один раз сдвинутая позиция одним элементом будет использованы по умолчанию остальными.
Элементов изменяющих позицию штриховой кисти шесть: Img_Arc, Img_Rectangle, Img_Ellipse, Img_Polygon, Img_FloodFill и RGN_Draw.
Для восстановления позиции можно использовать два способа:
1. Поставить позицию кисти в нулевую позицию. Достаточно перед FINALLY в _work_doDraw добавить строку:
2. Запомнить позицию при изменении и восстановить в конце.
Вот не знаю какой способ лучше. Первый вроде бы как проще и его вполне хватит, но второй более корректный.
Кто что скажет?