斑竹,大侠,wjying(葡萄)请进,继续问用picturebox画流程问题!!!急!!!给最高分!
主 题: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. 程序无法编译,编译器说用户定义类型未定义
愿意再加分,一经解决!!