Me parece que estáis mezclando el canvas del form con el del combo y por eso no os sale igual.
Edito: ahh, ya veo, el error estaba en que en MesureItem le daba un tamaño de fuente de 12 y después al pintar de 15, por eso se mezclaban unos encima de otros.
Por otro lado, cuidadín con el uso de :
Código Delphi
[-]
with TComboBox(Control) do
begin
Canvas.Font.Name := Items[Index]; Canvas.Font.Size := 10; Height := Canvas.TextHeight(Items[Index]) end
Porque ahí "Height" se refiere al Tcombobox, precisamente por el uso del with Tcombbox(control), cuando en realidad nosotros queremos el nombre del parámetro del evento... ofú lo que me ha salido...
Aquí algo más simple, tiene algún fallito de pintado, pero no me he puesto a ver el brush, el pen que se usa ni el estado del elemento.
yo le he llamado al combo "cbb" a secas.
Código Delphi
[-]
procedure TForm1.cbbDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
cbb.Canvas.Font.Name := cbb.Items[Index];
cbb.Canvas.Font.Size:= 15;
cbb.Canvas.TextOut(Rect.Left, Rect.Top, cbb.Items[index]);
end;
procedure TForm1.cbbMeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
begin
if Index < 0 then Exit;
cbb.Canvas.Font.Name:= cbb.items[index];
cbb.Canvas.Font.Size:= 15;
Height := cbb.Canvas.TextHeight(cbb.items[index]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
cbb.Items.Assign(Screen.Fonts);
end;
Saludos