My function

[pascal]
function LoadTextures(dds:TDirectDrawSurface;Transparent:Bo olean):Boolean;
Var
DIB: TDIB;
ddck:TDDColorKey;
COL:Integer;
TEX: TDirect3DTexture2; {now as local, else as public}
Begin
Result := True;
Try
DIB := TDIB.Create;
Try
DIB.AsSign(dds); // picture here now
DIB.Transparent := Transparent; //is transparent
//FDDraw is TCustomDXDraw for me
TEX := TDirect3DTexture2.Create(FDDraw, DIB, False); //create texture from DIB
If dds.IDDSurface <> NIL Then //exists
if dds.ISurface.GetColorKey(DDCKEY_SRCBLT,ddck) = DD_OK Then //get color
COL := ddck.dwColorSpaceLowValue; //transparent color here
Tex.Transparent := Transparent; //set up flag transparent
Tex.TransparentColor := COL; //and main color
//Problem when draw to 16 bit target surface only (but 32 bit is OK)
//COL here is decreased as 16 bit but Tex is stil 32 bit
//no match COL in TEX = ERROR, no transparency show
Finally
DIB.Free;
End;
Except
Result := False;
End;
End;
[/pascal]

Problem in comment described.

Very thanks for any answer.