That does make for a more refined display and I have now incorporated the size of the 'ArrowHead' - even specifying the size dependent upon the Gear size - very effective.
It seems that I still don't fully understand the finer details of drawing BGRABitmaps

The three Gears that I have as yet displayed all work perfectly with curved arrows being dynamically sized, coloured and directed (there will ultimately be up to 6 - never less than 3) but there are four more gears - two of which are static and one of those always rotating clockwise, the other two change direction based upon the position of a lever. I'm sure I can specify the location of each arrow and I have a TImage ready to receive the BGRABitmap. I've attempted to draw an arrow on the static gear that is always clockwise but nothing appears - I have stepped through to make sure the 'Show Arrow' routine is being called. It's the same routine that creates the other arrows which do show.
The calling proc naturally needs to be marginally different though the same elements need to be in place. This is the code for the Static/CW arrow with a bitmap called [Spindle] and a TImage [Sp_Arrow] :
procedure ShowSpindleDirection;
Var
Spindle : TBGRABitmap;
begin
Spindle := TBGRABitmap.Create(60,60);
Spindle.ReplaceTransparent(TrCol);
with Form1.Sp_Arrow do
begin
Canvas.Brush.Color := TrCol; // set to colour being used as 'transparent'
Canvas.FillRect(0,0,60,60);
Picture.Clear;
Picture.Bitmap.SetSize(60,60);
Picture.Bitmap.TransparentColor:=TrCol;
Transparent:=True;
end;
ShowArrow(Spindle,7,285,105,24);
Spindle.Draw(Form1.Sp_Arrow.Canvas,0,0,false);
application.ProcessMessages;
Spindle.free;
end;
Comparing this with the code for the other gears :
Tmp := TBGRABitmap.Create(Box,Box);
Tmp.ReplaceTransparent(TrCol);
with DestG do
begin
Width := Box; // needed to overide the size set at Design time
Height := Box;
Canvas.Brush.Color := TrCol; // set to colour being used as 'transparent'
Canvas.FillRect(0,0,Box,Box);
Picture.Clear;
Picture.Bitmap.SetSize(Box,Box);
Picture.Bitmap.TransparentColor:=TrCol;
Transparent:=True;
Top := Round(Y - Boy);
Left := Round(X - Boy);
end;
[...]
ShowArrow(tmp,N,C.x,C.y,R6);
tmp.Draw(DestG.Canvas,0,0,false);
application.ProcessMessages;
tmp.free;
The 'ShowArrow' Proc just determines the Direction, Colour, Size of 'head' and then calls 'ARC' with the specific parameters leaving the actual drawing [ .Draw() ] until after has returned.
I'm sure that you can see that 'Spindle' & 'Tmp' are both TBGRABitmaps, DestG & Sp_Arrow are both TImages. The subtle difference only being concerned with static rather than dynamic positioning of the TImages.
I'd be grateful for any pointers as to what I've missed
