返回首页

{A}简介
这个方便的弹出式是容易做,快速使用,方便了用户,因为你可以调整的形式和图像将保持其形状和大小,但即使它不适合里面的形式,移动鼠标的边缘,将重新定位的形象,使你想看到可见。唯一的问题,这个代码地址位为快"有"把它拖放到屏幕上的图像,用户可以查看在休闲方式的需要。无多,不会少。使用代码
是一件简单的事,后到您的项目中引用的DLL文件,实例化一个弹出式的形式,只是在它看起来好像是一个新的变量,需要的参数夫妇:一个形象和一个字符串。
这是新的头()调用看起来像类:

classPicBoxViewer(Image thisImage, string thisText)

您可以调用命名类,给你的变量的名称(在这个例子中,"thisMarketPrices"),这将创建一个一个实例的指针,所以你需要给该指针创建一个实例的值类的关键字是"新",并按照使用的类的名称再次。只有这个时候,你将需要提供适当的参数(图像和字符串)。图像内将出现新的弹出形式,和文字会出现上面的图像。{C}兴趣点
有一个计时器,将滚动图像,当鼠标光标出现接近边缘。没有定时器这个过程缓慢下来,滚动功能是大多数计算机上快过于,和你的用户可能会向右滚动过去,他们正在寻找,但因为一个步骤是为每个鼠标移动,可以移动的沿着边缘的鼠标,并加速这一进程,或按住鼠标仍然让滚动的计时器速度比较慢。改变定时器的时间间隔值会影响滚动时的速度。或者,您可以鼠标移动事件处理程序中添加几行,...
void picTerritoryMap_MouseMove(object sender, MouseEventArgs e) 

...或创建一个新的MouseHover事件之一,使每个步骤的大小取决于如何靠近边境的鼠标。当你有工作,你可以删除整个定时器计划一起,更好的是,让用户选择,其中计划使用。
整个"移动"业务工程围绕图片的方式很容易在理论上不够,但如果你不采取它认为适当的时间,它变得有点棘手。
如果不是一个简单的方法... ...
你有在看您的图片是可见的一个窗口,背后的形式。位置坐标的图片(X,Y)被称为'顶','Y'和'左'的'X',这些都可以任意整数值,积极或消极的,其中(0,0)值,或原产地,是在顶部,左侧的形式。你可以把图片的方式侧面,有不可见的观众,你可能想避免的东西。这种灵活性允许您将任何你想要的形象。使用"的MouseMove","MouseHover'和其他鼠标事件处理程序,你可以看到鼠标的图片,图片的边界是相对的。这里的混淆的一部分,虽然窗口,在这个意义上的图片前,你看它通过一个窗口(该窗口我指的是这里只是形式),图片实际上是在前面的形式。感到困惑吗?好了,不要担心,因为你只需要认识到,当使用的形式"的MouseMove"事件,这将给你的问题​​,因为鼠标是不能直接在前面的形式,它是在前面的图片,在前面的形式。这种细微的差别,意味着该窗体的MouseMove事件不会处理在前面的图片移动鼠标,让你有看图片的MouseMove事件... ...但是这样做会告诉你在哪里鼠标是相对的顶端左上角的图片,而不是形式上的。既然你想要的图片移动您的鼠标光标的形式方法的边缘,你只知道鼠标光标的图片是相对的,你会做数学的位图,当你的鼠标是密切窗体边缘与否,你也许应该先画在纸上图图表。
,但有一个相对简单的解决方案... ...
udrMouse = new udtCartesian(); 

udrMouse.X = MousePosition.X - thisForm.Left - 5;

udrMouse.Y = MousePosition.Y - thisForm.Top - 10;

在这些线路MousePosition.X(和Y)是鼠标的屏幕上方左上角的相对位置。所以在这里,我们创建了一个用户的"品牌"的笛卡尔方便存储的(x,y)坐标定义类型(UDT)。我们可以交替使用一个点,它会做同样的事情。我们在这里做什么udrMouse(用户定义的寄存器)变量是我们计算鼠标相对于图片的可见边框的位置。首先,我们减去thisForm.Left形式的位置值和X和Y,分别thisForm.Top udrMouse值,然后调整这些值有点在考虑屏幕的顶部和左侧边缘,我找到值5和10做的很好。所以,现在udrMouse.X究竟如何远离鼠标的图片可见部分的左边框,同样可以说,约udrMouse.Y和顶部边框。
我们已经得到...
我们定义称为conBorderSize一个恒定值,这是该地区从可见光图像的边缘,在这里我们说鼠标是足够接近的优势,我们需要移动图片有点宽度。所以,如果鼠标的Y值小于该边界的宽度(如果你想成为挑剔的高度),然后我们正在接近顶部的形式,需要上下移动的图片。然而,你会注意到,我们正在改变这个值是udrMapCenter.Y,我们该值减去一个固定的步长命名conMapMoveStep较小。所以,如果你有你的屏幕的直角坐标系直接在你的脑袋,你知道,您在高中学习的笛卡尔平面的中间和正X的由来,是权利和Y正达。但是你的屏幕的起源是在左上角,这意味着,虽然你的X是积极的向右移动,y的正面向下移动。对此不用担心,直到您尝试编写代码,将返回的反正切适当值,但在其他一些时间。现在,你只需要认识到,当你增加你的Y值,你实际移动从屏幕顶部。那么,为什么我们从我们的udrMapCenter.Y价值减去?你可能会问,得到的回答是,因为这是"为中心的可见光图像",而不是实际图片的位置(左边和顶部的值)的形式。所以,我们做中心涨越高,意味着的形象是被丢弃,我们发出信号下降的图像通过设置布尔值bolPlaceMap(你猜对了,bolPlaceMap是一个实际的布尔,如果你从来没有见过之一,你会发现,他们有点双极但很好相处)为true,因此,在这些"做我们需要移动图片"测试,该值将被设置为true,我们可以将图片的地方需要我们的用户。
if (udrMouse.Y < conBorderSize && udrMapCenter.Y > 0)

{

  udrMapCenter.Y -= conMapMoveStep;

  bolPlaceMap = true;

}

else if (udrMouse.Y > thisForm.Height - conBorderSize && 

         udrMapCenter.Y < picTerritoryMap.Width)

{

  udrMapCenter.Y += conMapMoveStep;

  bolPlaceMap = true;

}

唯一困难的部分留在上面的代码是决定我们是否在屏幕的对面边缘,但也不是太糟糕,因为现在,我们知道我们在做什么!考虑考虑(取决于如果你测试的X或Y)的形式的宽度/高度,就大功告成了。
if (bolPlaceMap)

    tmrMoveMap.Enabled = true;

在这里,我们设置tmrMoveMap的定时器,以便它熄灭时,它不问任何问题,如quot;我应该的picturequot移动;它只是提前移动的画面,这是对全球udrMapCenter笛卡尔变量为中心。历史3月5日,2009年:战后初期11月15日,2009年:更新的源代码,并添加演示

回答

评论会员:wimdevriendt 时间:2012/01/24
您好,
你有一个非常漂亮的文章。我想创造一个databaseplugin上SQLCE数据库执行的方法。
当我发出命令,我总是得到一个missingmethodexception 如果我运行一个Windows CE的形式应用程序代码,它的工作原理。我有System.Data和SQLCE DLL复制到的地方tcpserver和插件,但我一直在同样的问题。

任何想法?

关于
评论会员:xmsw 时间:2012/01/24
您好,
正如我所看到的,问题是我的其他文章:??"远程访问NET CF的设备,并有你已经找到了答案{S0}
http://www.matjazev.net
评论会员:xmsw 时间:2012/01/24
感谢您的热烈反响! 你说的这两个解决方案也正在考虑我now.But我试着写的代码,或明显的效果我觉得是因为我的技术是不是很好的方案,真诚地希望是你指导。期待您在百忙之中,将修订控制升级,非常感谢!非常感谢你!
我希望和幸福的每一天,在你的工作成功
评论会员:mysparkle 时间:2012/01/24
这个控制是如此冷静和强大的!我从中受益。
但我有一个问题是,我怎样才能使它显示滚动条!我认为如果有一个滚动条会更好!
我们期待开导!你可以指点指点!
感谢
评论会员:SeasonLee 时间:2012/01/24
您好,

感谢您的热情你和我真的希望你满意我的控制。

充分了解你的问题。我并不需要滚动条,所以我还没有实现,现在我的工作在其他项目上,这个控制是足够强大,我或我的球队需要的一切。但是,如果你正在寻找一个解决方案,然后有拖车,您可以采取的路径:

1。您可以绘制表面上已滚动实施,您可以一次绘制整个画面,让底部控制移动内容围绕
2。你可以得到顶端X,顶部Y坐标形式的滚动条和自己绘制的图像。如果是这样的情况下,你也可以画在整个图像的内存映像,然后您复制到屏幕上相应的部分。

以及你可以想像,第二个路径是困难但速度更快的。对不起,不给你更好的指针,但现在我没有任何。

希望我的信息是有益的。

有一个愉快的一天
Matjaz

http://www.matjazev.net
评论会员:connectpalm 时间:2012/01/24
嗨!这个邪恶的控制

我会看到,如果我可以添加LT处理;图像>标记以及。代码似乎是一个乍看之下虽然大密集的{S0}

标签插入任何形式的元素?如一个PictureBox?如果是的话,我可以用现在这个...

我会用仿佛只是为了渲染
基本格式化此控制
再次感谢!

Ciao的,
拉尔斯