Решил первую проблему.
Код:
procedure TForm1.CheckListBox4DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var i:integer;
cc:TCanvas;
begin
PngIcon:=TPngImage.Create;
if odSelected in State then begin
CheckListBox4.Canvas.Brush.Color:=DynamicColor[40];
CheckListBox4.Canvas.Font.Color:=DynamicColor[39];
end
ELSE begin
CheckListBox4.Canvas.Brush.Color:=CheckListBox4.Color;
CheckListBox4.Canvas.Font.Color:=DynamicColor[38];
end;
CheckListBox4.ItemHeight:=20;
CheckListBox4.Canvas.Font.Size:=12;
CheckListBox4.Canvas.FillRect(Rect);
CheckListBox4.Canvas.TextOut(Rect.Left,Rect.Top,DynamicLangSaveLang[index]);
if (Length(ParamIconSaveLang[index])>0)and(ParamIconSaveLang[index]<>'...') then begin
PngIcon.LoadFromFile(ExtractFileDir(Application.ExeName)+ParamIconSaveLang[index]);
CheckListBox4.Canvas.Draw(Rect.Left+150,Rect.Top+3,PngIcon);
end;
PngIcon.Free;
end;
Теперь осталось вот эти числа Rect.Left+150 Rect.Top+3 CheckListBox4.ItemHeight:=20;
Получать программным путем если вдруг измениться CheckListBox4.Canvas.Font.Size:=12;