斑竹,大侠,wjying(葡萄)请进,继续问用picturebox画流程问题!!!急!!!给最高分!

huguangwu 2002-01-29 09:44:38
主  题:picturebox画图的问题,急!!!
作  者:huguangwu
所属论坛:Visual Basic
问题点数:100
回复次数:13
人气指数:82
发表时间:2002-1-28 19:25:54

我想在picturebox里画一份流程图,要画出矩形,菱形,直线等形状,

我的窗体上有一个tabstrip控件,有两个选项卡,一个选项卡里有一个richtextbox,另一个是picturebox控件,我就想在这里画出这样一个简单的流程图,
__________
¦ 职员 ¦
¦ (张三)¦
-----------
请¦
假¦
¦
.
. . _________
. 小组长 .---超过三天-----¦主任
. . ¦ ¦
. =========
¦ ¦
¦ ¦
===============
¦
结束


另外我的窗体上有工具栏,上面的矩形、菱形这些按钮,怎么选中这些按钮后只有在picturebox中,如何拖动出这些图形来?

由于没有在VB里作图形的经验,请大虾们指点

愿以100分相送
谢谢

转移贴子到 Visual C++ Visual Basic Delphi C/C++ C++ Builder ASM 数据库开发 PowerBuilder ActiveX/COM 数据算法 软件工程 图形/游戏/多媒体 安全技术 网络/通讯 技术书籍 文件格式 C# XML/SOAP 数据仓库 VBA 主页制作 图形处理 ASP PHP Perl Java Javascript JSP 嵌入式开发 .NET Framework lotus开发使用 ADO.NET ASP.NET Web Services Web Forms Windows Forms VB.NET VC.NET Windows 9x/ME Windows NT/2000/XP DOS Office使用 Office开发 Exchange/SPS/KM IIS 程序人生 软件市场 程序员考试 人才热线 建议和意见 灌水乐园 走向海外 程序员杂志 软件使用 资源使用 我看软件 寻找软件 行业软件 软件评测 Linux/Unix 硬件指南 程序员大本营 | 贴子加分 | 密码:


回复贴子:
 zyl910(910:分儿,我来了!) 回复于2002-1-28 19:37:29
用PictureBox的Line方法画线
用PictureBox的Print方法输出文字

 xsp(半个程序员) 回复于2002-1-28 19:39:13
思路:请自己发挥。
dim x1 as long
dim y1 as long
dim x2 as long
dim y2 as long

private sub picture1.mousedown(...)
x1=x
y1=y
end sub

private sub picture1.mouseup(...)
x2=x
y2=y
picture1.line (x1,y1)-(x2,y2),,bf
end sub

 zyl910(910:分儿,我来了!) 回复于2002-1-28 19:41:39
用PictureBox的Line方法画线
用PictureBox的Print方法输出文字
用PictureBox的 CurrentX、CurrentY 属性 可以为输出文字定位
 huguangwu(追风少年) 回复于2002-1-28 19:53:54
Private Sub tsContent_Click()
Select Case tsContent.SelectedItem.Key
Case "Content"
Frame1.Visible = True
Frame2.Visible = False
Case "TaskStream"
Frame1.Visible = False
Frame2.Visible = True
Call DrawStream

End Select
End Sub


Private Sub DrawStream()
currx = PicStream.ScaleWidth / 2
curry = PicStream.ScaleHeight / 2
PicStream.FillColor = QBColor(10)
PicStream.ScaleMode = 3
PicStream.DrawWidth = 8
PicStream.Line Step(currx, curry)-Step(currx + 100, curry + 50), QBColor(10), BF
DoEvents
End Sub

我有如上代码,可是在picturebox里看不到任何东西,怎么回事?
 huguangwu(追风少年) 回复于2002-1-28 19:59:58
哦,我发现未将picturebox的autoredraw设置为true

 huguangwu(追风少年) 回复于2002-1-28 20:08:54
picturebox.print函数原形是什么,我查msdn怎么没有查到?
 wjying(葡萄) 回复于2002-1-28 20:13:48
查print
 zyl910(910:分儿,我来了!) 回复于2002-1-28 20:17:19
MSDN(Print 方法):

在窗体和图片框上显示文本


为了在窗体或图片框上显示文本,应使用 Print 方法,将该窗体或图片框的名称加在它的前面即可。为了把输出文本发送到打印机上,应使用 Printer 对象上的 Print 方法。

使用 Print 方法
Print 方法的语法是:

[object.]Print [outputlist] [{ ; ¦ , }]

object 参数是可选项;如果被省略,则 Print 方法将应用于当前窗体。

例如,以下语句将把消息打印到:

名为 MyForm 的窗体:
MyForm.Print "This is a form."

名为 picMiniMsg 的图片框:
picMiniMsg.Print "This is a picture box."

当前窗体:
Print "This is the current form."

Printer 对象:
Printer.Print "This text is going to the printer."

outputlist 参数是显示在窗体或图片框上的文本。如果 outputlist 参数有多个项,它们必须用逗号或分号,或逗号和分号同时使用来进行分隔,参见本章稍后“在单行上显示不同的项”一节中的说明。

文本的截断
如果窗体或图片框太小,以至不能显示所有的文本,则文本将被切断。在什么地方截断文本,取决于文本打印开始点的位置坐标。被截断的文本不能通过滚动窗体或图片框来显示。

分层
当将文本打印到窗体上时,文本将显示在窗体上已有的任一控件 behind 的那一层上。因此,最好的方法是特意创建一个用于显示文本的窗体,把文本打印到该窗体上。有关文本和图形如何显示在窗体的层次中的详细信息,请参阅本章后面的“用 AutoRedraw 和 ClipControls 使图形分层”。

 huguangwu(追风少年) 回复于2002-1-28 20:18:12
Private Sub DrawStream()
currx = PicStream.ScaleWidth / 2 - 50
curry = 10
'PicStream.FillColor = QBColor(10)
PicStream.ScaleMode = 3
PicStream.DrawWidth = 1
PicStream.Line (currx, curry)-(currx + 100, curry + 30), RGB(255, 0, 0), BF
PicStream.Print "hello,world"
DoEvents
End Sub

问题1:怎么样将hello,world打印在矩形的中央
问题2:我第一次选中第二个选项卡(含有picturebox控件)时,看不到东西,要第二次时才能看到
 wjying(葡萄) 回复于2002-1-28 20:43:52
用api函数drawtext

DrawText

VB声明
Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
说明
将文本描绘到指定的矩形中
返回值
Long,描绘文字的高度
参数表
参数 类型及说明
hdc Long,欲在其中显示文字的一个设备场景的句柄
lpStr String,欲描绘的文本字串
nCount Long,欲描绘的字符数量。如果要描绘整个字串(直到空中止符),则可将这个参数设为-1
lpRect RECT,指定用于绘图的一个格式化矩形(采用逻辑坐标)
wFormat Long,一个标志位数组,决定了以何种形式执行绘图。参考下面总结的常数类型列表
标志常数 说明
DT_BOTTOM 必须同时指定DT_SINGLE。指示文本对齐格式化矩形的底边
DT_CALCRECT 象下面这样计算格式化矩形:多行绘图时矩形的底边根据需要进行延展,以便容下所有文字;单行绘图时,延展矩形的右侧。不描绘文字。由lpRect参数指定的矩形会载入计算出来的值
DT_CENTER 文本垂直居中
DT_EXPANDTABS 描绘文字的时候,对制表站进行扩展。默认的制表站间距是8个字符。但是,可用DT_TABSTOP标志改变这项设定
DT_EXTERNALLEADING 计算文本行高度的时候,使用当前字体的外部间距属性(the external leading attribute)
DT_LEFT 文本左对齐
DT_NOCLIP 描绘文字时不剪切到指定的矩形
DT_NOPREFIX 通常,函数认为 & 字符表示应为下一个字符加上下划线。该标志禁止这种行为
DT_RIGHT 文本右对齐
DT_SINGLELINE 只画单行
DT_TABSTOP 指定新的制表站间距,采用这个整数的高8位
DT_TOP 必须同时指定DT_SINGLE。指示文本对齐格式化矩形的顶部
DT_VCENTER 必须同时指定DT_SINGLE。指示文本对齐格式化矩形的中部
DT_WORDBREAK 进行自动换行。如用SetTextAlign函数设置了TA_UPDATECP标志,这里的设置则无效

 wjying(葡萄) 回复于2002-1-28 20:45:05
picturebox.hdc作为参数hdc
 zyl910(910:分儿,我来了!) 回复于2002-1-28 20:49:00
'GetTextExtentPoint32 判断一个字串的大小(范围)。返回值:Long,非零表示成功,零表示失败。
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As Size) As Long
Private Type Size
cx As Long
cy As Long
End Type

如:
Private Sub GetTextSize(PicBox As PictureBox,Width As Long,Height As Long)
Dim GetSize As Size

Call GetTextExtentPoint32(PicBox.hDC, TestStr, LenB(StrConv(TestStr,vbUniCode)), GetSize)

Width=GetSize.cx
Heidht=GetSize.cy

End Sub
 huguangwu(追风少年) 回复于2002-1-29 9:33:47
继续问:
1 我用picturebox的print方法无法在矩形中显示文字
2 我采用了wjying(葡萄) 所说的API函数,在窗体中声明部分加入,问题有二
a. 我的部分代码如下
Private Sub tsContent_Click()
Select Case tsContent.SelectedItem.Key
Case "Content"
Frame1.Visible = True
Frame2.Visible = False
Case "TaskStream"
Frame1.Visible = False
Frame2.Visible = True

Call DrawStream
End Select
End Sub


Private Sub DrawStream()
currx = PicStream.ScaleWidth / 2 - 50
curry = 10

PicStream.ScaleMode = 3
PicStream.DrawWidth = 1
PicStream.Line (currx, curry)-(currx + 100, curry + 30), RGB(255, 0, 0), B

DrawText PicStream.hdc, "hello,world", -1,××××××× , dt_center
DoEvents
End Sub

我怎么用drawtext函数中指定的那个矩形就是我刚刚画的矩形,即×××××部分怎么写?
b. 程序无法编译,编译器说用户定义类型未定义





愿意再加分,一经解决!!
...全文
101 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jett 2002-01-29
  • 打赏
  • 举报
回复
?
dbcontrols 2002-01-29
  • 打赏
  • 举报
回复
倒!
zyl910 2002-01-29
  • 打赏
  • 举报
回复
你还是去那儿看看!
lisbjing 2002-01-29
  • 打赏
  • 举报
回复
本人在网上漫游过程中,发现了一个问题, 为什幺各个网站都说能为你赚到很多钱呢? 就连读一封E-mail点几回广告栏都能挣到钱? 难以置信,天下哪有免费的午餐?(后来才弄清是广告商买单), 可呆着实在是无聊啊,反正闲着也是闲着,比网上闲聊强的多。 找了一个不要身份证,不要会员费, 只要有
个地址,电话号码就能挣到钱的网站, 申请成了会员……(反正挣不到钱也不会吃亏,哼!) 等了一个月,两个月…… 什幺汇款单?连个影子都没有!不过一想,无所谓了,反正也没吃亏! 就当是鬼迷心窍一回吧!哈哈! 可一直到了3个月…… 突然,汇款单到了!不看不知道,一看吓一跳! 9百多美金?折合人民币不就是7千多了吗? 半信半疑,到了银行,交了几十元的手续费,换回了7千多! 真像做梦一样……买了一些一直想买的东东。 兴奋之余,又开始了我的宣传,宣传越多,挣的越多吗? 果然,不到一个月,又飞来了一张单子! 1千3百多美金……真是难以置信! 又过了一个月上涨到了2千4百多美金。所以,事情往往是发生 在想信当中 ,反正也没有亏可吃嘛。 如今,不用上班也有钱花了,真是乐哉乐哉! 你不信?那没办法!只可惜你自己不愿赚这份钱了。 不过,古人云:“宁可信其有,不可信其无”啊! 反正也不吃亏,就当疯一回试试看嘛! 相信我,没错的!(点击一次5美分,折合人民币0.4元多) 加入方法很简单的哦: http://208.32.133.14/?m=2076966(中间没有空格) 进入上面网站(如若点击不成,复制、粘贴到地址栏) 打开网页,点击右上方clickhere活动图标, 或点击蓝色FREESign-uppage字样也可! 然后,跟着提示,一步一步输入信息就ok了。 值得高兴的是它能识别中文信息,而能100%加入! 下面是我为了方便大家的加入详细说明了加入过程中的细节 Firstname*:名字(例:静) LastName*:姓(例:李) CompanyName:可不填 StreetAddress*:家庭住址:(一定要详细填写,不然收不到汇款单喽!) 例:广东省广州市**地方 City*:城市名(例:QingDao 英文填写青岛) State*:可不填 Zip*:邮编(填000000)Country*:国家(选china) Phone*:电话号码(国家代码86+去掉区位号前0的电话号码) 例:020-84079030→86-20-84079030) Fax:可不填E-mail*:电子信箱(所有的交流都通过信箱传递,所以务必填写正确) ConfirmE-mail*:再次输入信箱地址****** Yearofbirth*:出生年例:1970、1980 Gender*:性别Male(男),Femaie(女) Password*:密码(6位以上), ConfirmPassword:确认密码(必须与上相同) howdoyouwanttoreceivecommissionsthatyouearn? 以什幺形式接收礼品? giftcertificates(double$$)奖品*cash现金 如要奖品能收到双倍价格的东西, 但都是一些英文版的书籍、磁带、光盘等,对于中国人来说,还是选择现金比较合算些,请选择cash doyouwanttobenotifiedwhenyourreferralssingup? 加入会员成功时通知你吗?选yes 下一栏,请选择自己的爱好或兴趣(最多可选10种) Submit点击它屏幕上就会出现thankyou的字样 同时你的ID(用户名数字)和密码也会出现在屏幕上 记住它,加入完毕,一切ok了!恭喜发财! 然后,5分钟之内你会收到一封欢迎信!. 宣传方法: http://208.32.133.14/?m=20776966(中间没有空格)先介绍给你的亲朋好友们 然后,到各个网站的留言板中,把上面的内容全部复制、粘贴进去!只要有人点。你就可以挣钱了!多好啊!
huguangwu 2002-01-29
  • 打赏
  • 举报
回复
怎么没人响应啊。。。5555

741

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧