2023年2月

闲来无聊, 研究下生肖六合彩的规则,特作了该软件,希望能够给感兴趣的人提供一个快捷的分析工具,有兴趣可以下来玩玩。
该软件其最强大的功能是可以获取网络上几千个网站的信息,并进行准确智能统计,找出最为符合条件的数据,有这么庞大的数据作为支撑分析,你对结果有更多的信心。软件能够在开奖日搜索出最为精准的六肖,准确率达到95%以上,有效保护您的投资,稳定和高质量的数据是该软件的最大特点。
准确的资料,稳定的回报,持续的投入即可让你有了和别人不一样的投资机会。
软件支持URL链接的导入,并可以根据现有的URL进行关联查找,自动把新的符合条件的URL地址存入数据库,作为自动扩充网站的功能支持。
因身边一些朋友反映,特别列出了诈骗网站黑名单,希望大家警惕这些人的欺骗行为,切记。
看看软件的界面。



Lottery1.jpg

Lottery2.jpg

下载网站地址:
http://www.iqidi.com

该软件利用了微软.NET Framework2.0优秀的框架和微软SQLServer数据库高性能的数据处理能力,因此在安装软件前,您需要花费一点时间来安装下面的组件(请您按照顺序安装即可):

安装MSDE,下载地址是:
http://www.wishand.com/Soft/UploadSoft/MSDE.rar

安装.net framework2.0,  下载地址是:
http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=zh-cn&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe

最后安装“六合彩生肖数据采集及分析软件2008”,下载地址为:
http://www.iqidi.com/Download/LotteryTool.Zip

几种打印模式



Visio
的二次开发中,我们往往需要打印文档,这也是正常不过的需求,
Visio

Document
对象提供了下面几种打印模式:

Constant

Value

Description

visPrintAll

0

Prints all foreground pages.

visPrintCurrentPage

2

Prints the active page.

visPrintCurrentView

4

Prints the current view area.

visPrintFromTo

1

Prints pages between the
FromPage
value and the
ToPage
value.

visPrintSelection

3

Prints a selection


上面几种是什么意思呢?下面详细解说下,
visPrintAll
是将当前的文档进行分页打印,如果是你的控件中有多个页面的话,使用方法如下:


visPage.Document.PrintOut(VisPrintOutRange.visPrintAll,
1
,
1
,
false
,
""
,
false
, visPage.Name,
1
,
false
,
false
);



visPrintCurrentView
是将你看到的窗体视图内容打印出来(一般很少用,因为可能截取到一半的区域而已),用法如下:


visPage.Document.PrintOut(VisPrintOutRange.visPrintCurrentView,
1
,
1
,
false
,
""
,
false
, visPage.Name,
1
,
false
,
false
);


visPrintSelection
就是打印选取的内容,这个有用,当你选中一部分东西,想将其打印出来的时候。不过注意的是,你要确保你选中了内容,否则会打印出来是整个控件页面的内容,其用法如下
:



visPage.Document.PrintOut(VisPrintOutRange.visPrintSelection,
1
,
1
,
false
,
""
,
false
, visPage.Name,
1
,
false
,
false
);



其他的用法大同小异,可以自己下去试试。

另外还有一种打印方式,是打印一个大页面中的一部分,这个就需要技巧了,首先你需要获取到页面的
Picture
对象,转换为
Image
对象(下面介绍如何转换),然后打印整个
Image
对象中的一部分,通过定位左上角位置,和输出矩形大小就可以了。



Rectangle srcRect
=

new
Rectangle(dblLeft, dblTop,
this
.visioImage.Width
/
2
,
this
.visioImage.Height
/
2
);


e.Graphics.DrawImage(

this
.visioImage, destRetangle, srcRect, GraphicsUnit.Pixel);


Visio


Picture

属性及转换



Visio

文档打印的时候,有时候需要预览下内容,那如何实现呢,其实也很简单,因为你打印的
Page
对象有一个
Picture
的属性,可以用来显示的(
Window.Selection
也有一个这么对象,当然就可以用来预览选择的内容了)。不过到这里别高兴太早,因为
Picture
对象是
IPictureDisp
类型的,你需要转换为
PicutureBox
对象所能识别的
Image
类型,不过这个东西不是那么容易转换的,呵呵。

费了九牛二虎之力,终于查到了转换的方法,下面介绍下吧,以免大家走弯路。

先建立一个
AxHostConverter
的转换类,继承自

AxHost

如下:




public

class
AxHostConverter : AxHost




{



private
AxHostConverter() :
base
(
""
)

{ }



static

public
Image ictureDispToImage(stdole.IPictureDisp pictureDisp)




{


return
GetPictureFromIPicture(pictureDisp);


}




}




在赋值给
PictureBox

Image
对象的时候,如此这般就
OK




pictureBox1.Image
=
AxHostConverter.PictureDispToImage(
this
.visPage.Picture);



打印页边距设置问题

再说另外一个问题,不知道大家有没有注意到,页面设置对话框中,页边距中的值默认是
10
,你确定之后,值就变小了,再打开确定,值变得更小了,这是因为页边距值的转换出了问题,要正常工作,需要做一些转换的工作。下面贴出代码,一目了然。








PageSetupDialog dlg
=

new
PageSetupDialog();


dlg.Document

=
PrintDocument;


dlg.PageSettings.Margins

=
PrinterUnitConvert.Convert(dlg.PageSettings.Margins,


PrinterUnit.ThousandthsOfAnInch, PrinterUnit.HundredthsOfAMillimeter);




if
(dlg.ShowDialog()
==
DialogResult.OK)




{


}




else





{


dlg.PageSettings.Margins

=
PrinterUnitConvert.Convert(dlg.PageSettings.Margins,


PrinterUnit.HundredthsOfAMillimeter, PrinterUnit.ThousandthsOfAnInch);


}



最后给一个图,显示下所完成的工作:




转载请注明出处:

撰写人:伍华聪  http:

//
www.iqidi.com


判断Visio图纸上是否图纸有设备(存在图元), 有两种方法,一种是通过Window对象的SelectAll方法,在判断选择的集合是否不为空即可,如下:





///

<summary>


///
判断是否有对象选定

///

</summary>


///

<param name="window"></param>


///

<returns></returns>


[CLSCompliant(
false
)]

public

static

bool
HasShapeInWindow(Window window)



{

bool
result
=

false
;

try




{

window.SelectAll();

result

=
(window.Selection.Count
>

0
);

window.DeselectAll();

}



catch




{ ;}



return
result;

}



另外一种方法是判断页面对象Page的Shapes对象集合是否大于0即可,如下:


Visio.Page page
=
VisioUtility.GetPage(VisDocument,
"
馈线图
"
);

if
(page.Shapes.Count
<=

0
)



{

MessageUtil.ShowTips(

"
图纸上没有设备
"
);

return
;

}






///

<summary>


///
获取Visio文档制定的页面对象

///

</summary>


///

<param name="visDocument"></param>


///

<param name="pageType"></param>


///

<returns></returns>


[CLSCompliant(
false
)]

public

static
Page GetPage(Document visDocument,
string
pageType)



{

Page visPage;

for
(
int
i
=

1
; i
<=
visDocument.Pages.Count; i
++
)



{

visPage

=
visDocument.Pages[i];

if
(FormulaStringToString(visPage.PageSheet.get_Cells(CUST_PROP_PREFIX
+

"
绘图页
"
).Formula)
==
pageType)



{

return
visPage;

}



}




return

null
;

}


两种方法基本上效果一样, 第二种方法可能速度会快一些,如果你在Visio的Document对象事件中有处理逻辑的时候, 如下所示, 而且有的情况下,你还不能用第一种方式来进行判断:



this
.CtrlDrawing.SelectionChanged
+=

new
EVisOcx_SelectionChangedEventHandler(ctrlDrawing_SelectionChanged);


希望你能发现更多好玩的东西,呵呵


转载请注明出处:

撰写人:伍华聪  http:

//
www.iqidi.com


本文主要分享一些在Visio二次开发中碰到的各种小问题及其解决方法:
1. 为图元设置颜色
在一些分析中,如电气线路分析中,需要根据不同的状态改变图元的颜色,那么如何改变指定图元的设备颜色呢?下面提供代码解决该问题。


shape.get_CellsU(
"
LineColor
"
).ResultIU
=
(
double
)VisDefaultColors.visDarkGreen;
//
有电(绿色)

其中VisDefaultColors是一个枚举,有很多颜色,可以查下SDK,也可以使用其对应的数值来代替

Constant Value Description

visBlack

0

Black

visBlue

4

Blue

visCyan

7

Cyan

visDarkBlue

10

Dark blue

visDarkCyan

13

Dark cyan

visDarkGray

19

Dark gray

visDarkGreen

9

Dark green

visDarkRed

8

Dark red

visDarkYellow

11

Dark yellow

............

上面的代码是比较简洁的写法,当然也可以使用下面这种方式:


shape.get_CellsSRC((
short
)VisSectionIndices.visSectionObject, (
short
)VisRowIndices.visRowLine,(
short
)VisCellIndices.visLineColor).FormulaU
=

4


2. 获取图元设备的连接关系
每个设备Shape都有一个Connects和FromConnects集合,该集合是Connect对象集合,每个Connect有ToSheet和FromSheet属性,分别是指向一个Shape对象,我们如果要获取设备的关联关系,就是需要判断这些Connect的ToSheet和FromSheet属性。
如下代码:



string
strShapes
=

"
;
"
;

if
(IsSpecialEquipTypeInShape(shape))



{

foreach
(Visio.Connect connect
in
shape.Connects)



{

strShapes

+=
GetConnectsShapes(shape, connect.ToSheet);
//
检查接入的设备


strShapes
+=
GetConnectsShapes(shape, connect.FromSheet);
//
检查接出的设备


}




foreach
(Visio.Connect connect
in
shape.FromConnects)



{

strShapes

+=
GetConnectsShapes(shape, connect.ToSheet);
//
检查接入的设备


strShapes
+=
GetConnectsShapes(shape, connect.FromSheet);
//
检查接出的设备


}



}






///

<summary>


///
获取与当前的图元连接(接入或接出)的所有相关设备

///

</summary>



private

string
GetConnectsShapes(Visio.Shape shape, Visio.Shape toFromSheet)



{

string
strShapes
=

string
.Empty;

bool
exist
=
VisioUtility.ShapeCellExist(toFromSheet,
"
设备类型
"
);

bool
isSpecial
=
IsSpecialEquipTypeInShape(toFromSheet);


if
(toFromSheet
!=

null

&&
exist
&&
isSpecial)



{

//
Visio图元的连接集合,会存放自己本身的,所以此处需要判断。



if
(shape.ID
!=
toFromSheet.ID)



{

strShapes

+=

string
.Format(
"
{0};
"
, toFromSheet.ID);

}



}




return
strShapes;

}


3. 获取图元的属性集合
我们知道,每个图元Shape甚至Page对象都有很多自定义属性,你可以通过在Visio的开发模式中查看ShapeSheet查看到。而所有这些属性中,每行又代表一个属性的各种定义信息,如Label是什么,Prompt(提示)是什么,Value(值)是什么,Type(类型)是什么,这就有点类似于我们在数据库定义一个字段,需要指定字段的名称,类型等等,那如果我们需要把这些信息保存下来,我们该如何获取呢?下面举例说明:


Dictionary
<
string
, StencilPropertyInfo
>
list
=

new
Dictionary
<
string
, StencilPropertyInfo
>
();

StencilPropertyInfo propertyInfo;

Visio.Cell shapeCell;

short
shortSectionProp
=
(
short
)VisSectionIndices.visSectionProp;


if
(shape
!=

null
)



{

for
(
short
i
=

0
; i
<
shape.get_RowCount(shortSectionProp); i
++
)



{

if
(shape.get_CellsSRCExists(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsLabel,
0
)
!=

0
)



{

propertyInfo

=

new
StencilPropertyInfo();


shapeCell

=
shape.get_CellsSRC(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsLabel);

propertyInfo.Name

=
VisioUtility.FormulaStringToString(shapeCell.RowNameU);


shapeCell

=
shape.get_CellsSRC(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsPrompt);

propertyInfo.Prompt

=
VisioUtility.FormulaStringToString(shapeCell.FormulaU);


shapeCell

=
shape.get_CellsSRC(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsFormat);

propertyInfo.Format

=
VisioUtility.FormulaStringToString(shapeCell.FormulaU);


shapeCell

=
shape.get_CellsSRC(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsValue);

propertyInfo.Value

=
VisioUtility.FormulaStringToString(shapeCell.FormulaU);


shapeCell

=
shape.get_CellsSRC(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsSortKey);

propertyInfo.SortKey

=
VisioUtility.FormulaStringToString(shapeCell.FormulaU);


shapeCell

=
shape.get_CellsSRC(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsType);

propertyInfo.PropType

=
(PropType)shapeCell.get_ResultInt((
short
)VisUnitCodes.visNumber,
0
);



shapeCell

=
shape.get_CellsSRC(shortSectionProp, i, (
short
)VisCellIndices.visCustPropsInvis);

if
(
"
True
"
.Equals(VisioUtility.FormulaStringToString(shapeCell.FormulaU), StringComparison.OrdinalIgnoreCase))



{

propertyInfo.InVisible

=

true
;

}




propertyInfo.PropRowID

=
i;


if
(
!
list.ContainsKey(propertyInfo.Name))



{

list.Add(propertyInfo.Name, propertyInfo);

}



}



}



}




return
list;

4. 关闭视图中打开的所有模具
一般来说,一个Visio文档,一般会打开很多模具窗口,用来辅助画图的,我们有时候不小心关闭一些,又有可能打开多几个,那么你是如何记住这些打开的模具文件的呢,我们要如何关闭全部呢,你可以使用TryCatch来关闭每个文件,即使它可能已经关闭了,这种才保证不会出错;我们不太喜欢暴力,还有没有更好的方法呢,让它自己知道那些可以关闭的呢?





///

<summary>


///
关闭视图中打开的所有模具

///

</summary>


///

<param name="visApp"></param>


///

<returns></returns>



public

bool
CloseAllStencileDocument(Application visApp)



{

string
[] strs
=

new

string
[
0
];

Array arr

=
strs
as
Array;

visApp.Documents.GetNames(

out
arr);

Document visDoc;

foreach
(
object
file
in
arr)



{

if
(file.ToString().IndexOf(
"
.vss
"
, StringComparison.OrdinalIgnoreCase)
>

0
)



{

visDoc

=
visApp.Documents[file];

if
(visDoc
!=

null
)



{

visDoc.Close();

}



}



}



return

true
;

}


5. 管理Visio内置的窗口
Visio控件提供了很多内置的窗口,你可以根据需要显示或者隐藏它,如我们常常看到的图元属性窗口、形状查询窗口、模具管理窗口等等,很典型的例子,我们很多时候不需要那个形状查询窗口,想把它隐藏,那么这些该如何操作呢?
我前面写过的文章
C#进行Visio二次开发的常见问题处理
有说明,如下所示:



//
Visio2007的形状窗口中去除搜索形状功能


VisApplication.Settings.ShowShapeSearchPane
=

false
;



Visio2003的ShowShapeSearchPane实现方式

Visio2003的ShowShapeSearchPane实现方式


还有一种方式可以管理窗口,如下面代码,对各种内置的窗口实现了统一的管理




for
(
int
i
=
drawingControl.Window.Windows.Count; i
>

0
; i
--
)

{

Window visWindow;

int
windowType;


visWindow

=
drawingControl.Window.Windows.get_ItemEx(i);

windowType

=
visWindow.Type;



if
(windowType
==
(
int
) VisWinTypes.visAnchorBarBuiltIn)

{


switch
(visWindow.ID)



{

case
(
int
) VisWinTypes.visWinIDCustProp:

case
(
int
) VisWinTypes.visWinIDDrawingExplorer:

case
(
int
) VisWinTypes.visWinIDMasterExplorer:

case
(
int
) VisWinTypes.visWinIDPanZoom:

case
(
int
) VisWinTypes.visWinIDShapeSearch:

case
(
int
) VisWinTypes.visWinIDSizePos:

case
(
int
) VisWinTypes.visWinIDStencilExplorer:


visWindow.Visible

=

false
;

break
;


default
:

break
;

}



}



}


这下明白了多少了呢,要饮水思源哦


转载请注明出处:

撰写人:伍华聪  http:

//
www.iqidi.com

Visio Drawing Control
中集成自定义菜单是很多项目必须的,很多朋友也问过我如何实现这些菜单,下面介绍下
Visio
自定义菜单的实现。

Visio
二次开发中,为
Visio Drawing Control
添加自定义菜单有两种方式:一种是使用捕捉
Visio

MouseUpEvent
事件,弹出
ContextMenu
即可;另一种是通过在
PageSheet
中增加
Action
来实现,也就是使用
RUNADDONWARGS
函数来实现。

两种实现的效果如下图所示,两者的区别是,使用第二种会保留Visio控件的一些如复制、粘贴的原有菜单




先介绍第一种方法,首先注册

MouseUpEvent
的事件,如下代码所示:


drawingControl.MouseUpEvent
+=

new
AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseUpEventHandler(
this
.onDrawingControlMouseUp);


然后,你需要实现

onDrawingControlMouseUp
函数的内容,在里面你需要限制下右键的一些事件,然后通过
X

Y
坐标获取选定的
Shape
对象,弹出你的
ContextMenu
对象即可,如下代码所示。

private

void
onDrawingControlMouseUp(
object
sender,AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseUpEvent eventData)



{

if
((eventData.button
==
(
int
)VisKeyButtonFlags.visMouseRight)
&&



((eventData.keyButtonState

&
(
int
)VisKeyButtonFlags.visKeyControl)
==
0
))

{


clickedShape

=
Utility.GetClickedShape(drawingControl, eventData.x, eventData.y);


if
(clickedShape
!=

null
)

{


eventData.cancelDefault

=

true
;

shapeShortcutMenu.Show(

this
,Utility.MapVisioToWindows(drawingControl, eventData.x, eventData.y));

}



}



第二种方式是通过添加
Action
方式,使用
RUNADDONWARGS
函数来实现。操作也很简单,先获取指定的
Page
对象,清除
Action
事件(因为你每次加入的话,
Action
始终保留你的添加的内容,防止出现多个相同的右键菜单,我每次删除旧的内容,然后再添加我需要的东西),然后添加所需要的右键菜单即可。

Visio.Page page
=
VisioUtility.GetPage(VisDocument,
"
馈线图
"
);

if
(page
!=

null
)



{

//
清除所有相关的菜单事件


page.PageSheet.DeleteSection((
short
)VisSectionIndices.visSectionAction);


//
加入新的菜单


VisioUtility.AddRightMouseAction(page.PageSheet,

"
\
"
停电分析\
""
,

"
RUNADDONWARGS(\
"
QUEUEMARKEREVENT\
"
, \
"
/
Drawing
=
停电分析\
"
)
"
,

isEnable,

true
,
false
,
false
,
true
,
true
);

}



AddRightMouseAction

是一个添加右键菜单的函数,函数比较复杂,这里列出函数的原型
,
它其实现的内容就是将内容写入
Page
对象的
Actions
中而已:
03.JPG





///

<summary>


///
给SHPAE增加一个弹出菜单

///

</summary>


///

<param name="TargetShape"></param>


///

<param name="menuCaption">
菜单标题
</param>


///

<param name="menuAction">
菜单动作
</param>


///

<param name="menuEnabled">
菜单的可用性
</param>


///

<param name="menuChecked"></param>


///

<param name="beginGroup"></param>


///

<param name="addToBottom"></param>


///

<param name="menuCaptionISFormula"></param>


///

<param name="menuVisible">
是否可见
</param>



public

static

void
AddRightMouseAction(Visio.Shape TargetShape,
string
menuCaption,
string
menuAction,

bool
menuEnabled,
bool
menuChecked,
bool
beginGroup,
bool
addToBottom,
bool
menuCaptionISFormula,

bool
menuVisible)



转载请注明出处:

撰写人:伍华聪  http:

//
www.iqidi.com