设置窗体字体
// 使用
Form1.set_display_font(this.hWindowControl1, 24, "mono", "true", "false");
public static void set_display_font(HalconDotNet.HWindowControl hWindowCtl, HTuple hv_Size, HTuple hv_Font,
HTuple hv_Bold, HTuple hv_Slant)
{
HTuple hv_OS = null, hv_Fonts = new HTuple();
HTuple hv_Style = null, hv_Exception = new HTuple(), hv_AvailableFonts = null;
HTuple hv_Fdx = null, hv_Indices = new HTuple();
HTuple hv_Font_COPY_INP_TMP = hv_Font.Clone();
HTuple hv_Size_COPY_INP_TMP = hv_Size.Clone();
HOperatorSet.GetSystem("operating_system", out hv_OS);
// dev_get_preferences(...); only in hdevelop
// dev_set_preferences(...); only in hdevelop
if ((int)((new HTuple(hv_Size_COPY_INP_TMP.TupleEqual(new HTuple()))).TupleOr(
new HTuple(hv_Size_COPY_INP_TMP.TupleEqual(-1)))) != 0)
{
hv_Size_COPY_INP_TMP = 16;
}
if ((int)(new HTuple(((hv_OS.TupleSubstr(0, 2))).TupleEqual("Win"))) != 0)
{
//Restore previous behaviour
hv_Size_COPY_INP_TMP = ((1.13677 * hv_Size_COPY_INP_TMP)).TupleInt();
}
else
{
hv_Size_COPY_INP_TMP = hv_Size_COPY_INP_TMP.TupleInt();
}
if ((int)(new HTuple(hv_Font_COPY_INP_TMP.TupleEqual("Courier"))) != 0)
{
hv_Fonts = new HTuple();
hv_Fonts[0] = "Courier";
hv_Fonts[1] = "Courier 10 Pitch";
hv_Fonts[2] = "Courier New";
hv_Fonts[3] = "CourierNew";
hv_Fonts[4] = "Liberation Mono";
}
else if ((int)(new HTuple(hv_Font_COPY_INP_TMP.TupleEqual("mono"))) != 0)
{
hv_Fonts = new HTuple();
hv_Fonts[0] = "Consolas";
hv_Fonts[1] = "Menlo";
hv_Fonts[2] = "Courier";
hv_Fonts[3] = "Courier 10 Pitch";
hv_Fonts[4] = "FreeMono";
hv_Fonts[5] = "Liberation Mono";
}
else if ((int)(new HTuple(hv_Font_COPY_INP_TMP.TupleEqual("sans"))) != 0)
{
hv_Fonts = new HTuple();
hv_Fonts[0] = "Luxi Sans";
hv_Fonts[1] = "DejaVu Sans";
hv_Fonts[2] = "FreeSans";
hv_Fonts[3] = "Arial";
hv_Fonts[4] = "Liberation Sans";
}
else if ((int)(new HTuple(hv_Font_COPY_INP_TMP.TupleEqual("serif"))) != 0)
{
hv_Fonts = new HTuple();
hv_Fonts[0] = "Times New Roman";
hv_Fonts[1] = "Luxi Serif";
hv_Fonts[2] = "DejaVu Serif";
hv_Fonts[3] = "FreeSerif";
hv_Fonts[4] = "Utopia";
hv_Fonts[5] = "Liberation Serif";
}
else
{
hv_Fonts = hv_Font_COPY_INP_TMP.Clone();
}
hv_Style = "";
if ((int)(new HTuple(hv_Bold.TupleEqual("true"))) != 0)
{
hv_Style = hv_Style + "Bold";
}
else if ((int)(new HTuple(hv_Bold.TupleNotEqual("false"))) != 0)
{
hv_Exception = "Wrong value of control parameter Bold";
throw new HalconException(hv_Exception);
}
if ((int)(new HTuple(hv_Slant.TupleEqual("true"))) != 0)
{
hv_Style = hv_Style + "Italic";
}
else if ((int)(new HTuple(hv_Slant.TupleNotEqual("false"))) != 0)
{
hv_Exception = "Wrong value of control parameter Slant";
throw new HalconException(hv_Exception);
}
if ((int)(new HTuple(hv_Style.TupleEqual(""))) != 0)
{
hv_Style = "Normal";
}
hv_AvailableFonts = hWindowCtl.HalconWindow.QueryFont();
//HOperatorSet.QueryFont(hv_WindowHandle, out hv_AvailableFonts);
hv_Font_COPY_INP_TMP = "";
for (hv_Fdx = 0; (int)hv_Fdx <= (int)((new HTuple(hv_Fonts.TupleLength())) - 1); hv_Fdx = (int)hv_Fdx + 1)
{
hv_Indices = hv_AvailableFonts.TupleFind(hv_Fonts.TupleSelect(hv_Fdx));
if ((int)(new HTuple((new HTuple(hv_Indices.TupleLength())).TupleGreater(0))) != 0)
{
if ((int)(new HTuple(((hv_Indices.TupleSelect(0))).TupleGreaterEqual(0))) != 0)
{
hv_Font_COPY_INP_TMP = hv_Fonts.TupleSelect(hv_Fdx);
break;
}
}
}
if ((int)(new HTuple(hv_Font_COPY_INP_TMP.TupleEqual(""))) != 0)
{
throw new HalconException("Wrong value of control parameter Font");
}
hv_Font_COPY_INP_TMP = (((hv_Font_COPY_INP_TMP + "-") + hv_Style) + "-") + hv_Size_COPY_INP_TMP;
hWindowCtl.HalconWindow.SetFont(hv_Font_COPY_INP_TMP);
return;
}
自适应显示图片
// 使用显示
Form1.DisplayImage(this.hWindowControl1, imgSub);
// 显示图片
private static void DisplayImage(HalconDotNet.HWindowControl hWindowCtl, HImage imgShow)
{
// 设置显示大小
imgShow.GetImageSize(out int imgWidth, out int imgHeight);
double ratioWidth = (1.0) * imgWidth / hWindowCtl.Width;
double ratioHeight = (1.0) * imgHeight / hWindowCtl.Height;
HTuple row1, column1, row2, column2;
if (ratioWidth >= ratioHeight)
{
row1 = -(1.0) * ((hWindowCtl.Height * ratioWidth) - imgHeight) / 2;
column1 = 0;
row2 = row1 + hWindowCtl.Height * ratioWidth;
column2 = column1 + hWindowCtl.Width * ratioWidth;
}
else
{
row1 = 0;
column1 = -(1.0) * ((hWindowCtl.Width * ratioHeight) - imgWidth) / 2;
row2 = row1 + hWindowCtl.Height * ratioHeight;
column2 = column1 + hWindowCtl.Width * ratioHeight;
}
// 显示图片
hWindowCtl.HalconWindow.SetPart(row1, column1, row2, column2);
hWindowCtl.HalconWindow.DispObj(imgShow);
}
注意dll需要放在一个文件夹中
halcon.dll
hcanvas.dll
halcondotnet.dll