网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月03日漏签0天
vb吧 关注:156,007贴子:1,166,285
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 3 下一页 尾页
  • 44回复贴,共3页
  • ,跳到 页  
<<返回vb吧
>0< 加载中...

另类的编程

  • 只看楼主
  • 收藏

  • 回复
  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
多年后再回此吧,颇多感慨,希望万事和谐。
积累了某些不常见的,但有特色的编程手法,想与众吧友分享、讨论和提炼。也借此有个展现的机会,能让其他人看到,或许可以推广,甚至光大。请勿喷!
得出VB编程的界面通常使用工具栏,能否弃之而直接写代码(即使是复杂或有画面的),这样就可以将所有代码,以文本的形式,存入 XXX.Txt 文件中。而且后续的编程不受限制,直接在上面增删叠加。
这是开始提出的内容,您认为可行吗,实用吗,是否能尝试做出实例。


  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
真是悲哀,此吧竟然到了几天才出现一个新贴的地步。衰败到如此,万万没有想到,如今真的世道变了!


2026-09-03 09:51:54
广告
不感兴趣
开通SVIP免广告
  • AESQL2171
  • 多线程
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这样直接用python就行了吧


  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

Option Explicit '所有变量都须实名设置
Dim WithEvents Pic As PictureBox '若用Api创建对象的软件,Windowns 会判其含病毒,处理较麻烦,故慎用
Private Sub Form_Load()
Dim pp As Integer '用重字母命名变量,可方便机器查找,不易错判
ScaleMode = 3
AutoRedraw = True '被遮后重现不会褪色
Font.Size = 20
Height = 7000
Width = 8600
Caption = "示范"
Controls.Add "Vb.TextBox", "Co3", Me
Controls(0).Move 7, 390, 540, 22 '定位置与大小尺寸
Controls(0).Visible = True '凡 Controls(N).类型的对象较简单,不响应鼠标操作
Controls(0).BackColor = &HFFEEEE
Controls(0).Font.Size = 14 '比窗体字小
For pp = 1 To 2
Controls.Add "Vb.Label", "La" & CStr(pp), Me
Controls(pp).Move 100 + pp * 12, 100 + pp * 50, 38 + pp * 20, 30
Controls(pp).Visible = True 'Label对象显示级别较低,仅能遮住部分窗体,在其它对象的后方
Controls(pp).BackColor = &HFFDDDD + Sgn(1 - pp) * &H113333
Next pp
Controls(1).ForeColor = 255
Controls(1).Caption = "选择"
Set Pic = Controls.Add("Vb.PictureBox", "Pic", Me)
Pic.ScaleMode = 3 '此类对象能用别称代表,也能响应鼠标的操作
Pic.BorderStyle = 1 '例会有:Private Sub Pic_MouseDown(Button As Integer, ......)
Pic.Move 310, 12, 241, 345
Pic.AutoRedraw = True '被遮后重现不会褪色
Pic.Visible = True
Pic.BackColor = &HDDFFBB
End Sub
Private Sub Form_Resize()
If WindowState <> 1 Then '让窗体调整大小的功能失效,尽管按钮还存在
WindowState = 0
Left = (Screen.Width - 8600) / 2 '窗体位于屏幕中间
Top = (Screen.Height - 7000) / 2
Move Left, Top, 8600, 7000
End If
End Sub
'这仅是初步介绍的内容,如果有感兴趣的朋友跟贴,则后面会陆续增加,最后完整写出某有功能软件的全代码


  • 马云爱逛京东
  • 小吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
纯写代码制作界面是没问题的,使用CreateWindowEx就可以实现,不过事件响应什么的都要自己弄


  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
冷眼观察了几天,看出某些端倪,楼主以为衰落是多种原因叠加的结果。VB6本身是业余编程者的工具,其本身不再升级,落后于当前电脑环境。而且功能还少许萎缩,例精简版就不支持虚拟键盘函数 SendKays "{XXX}" 等。同时Windows系统平台逐渐严格,VB使用了Api函数生成的软件,会被标注为含病毒的程序,从而进一步收缩了编程自由度。
随时代的发展,传统的编程已淡出主流,且不说AI生成,就是人工写的代码VB也驾驭不了神经网络的运行。与此配套的是:学校教育基本不教VB,导致投机的学生也再难得访问此吧,贴数锐减,老吧客也失去了指导机会。
原有的吧客多是非专业的编程爱好者,高水平的通常不来光顾,因此存在高不成低不就。难度大的问题解决不了,缺乏创新进取的锐气。常规的问题则索然无味,程式化的堆砌觉得十分乏味。几乎见不到令人耳目一新的贴子,吧内渐失生气,退吧或沉寂者日益增多。
楼主认为此吧想新增关注者,肯定是奢望。但减少流失,提高贴子的质量,吸引原有吧客的注意,形成正反馈,才是苟延残喘的方法。贴子内容若总是老生常谈,必然鲜有回应,所以必需有新意。闭门造车肯定不行,应该是在现有的环境下,解决真实的客观问题,发挥VB内置的功能,超常组合或运用,突破传统的程式,才具备真正的吸引力。
当然VB是昨日黄花不可逆转,不要指望能写成出色优秀的软件。只是我们这些怀旧的群体,借助这个平台留住正在逝去的兴趣,娱人娱己,打发业余时间而已。


  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
既然提出了建议,就当仁不让的首发一张此类贴子吧。
贴名为"另类的编程",当然不止仅仅指放弃工具栏,纯代码编写,而涵盖更多的方面内容。不过本楼主秉持某些自我约束条件:使用精简版VB6,免用Api函数,纯代码编写,尽可能节省内部资源(尽管如今的电脑内存颇大),不引用外部功能对象,完全靠VB自身函数及方法。
譬如4楼的代码中,以 WithEvents 语句创建 PictureBox,是因为需要用其鼠标响应和打印功能,采取耗资源大的形式。而以 Controls.Add "Vb.xxx" 语句创建 TextBox,则因为要它实现的功能,均可用写代码完成,所以使用占内部资源小的方法。这是我初学编程时的价值标准,虽然如今内部资源大到取之不尽,但原则仍继续遵守。
上述代码其实是从楼主的中国象棋软件中,抽取的局部片段(有少许改动)。因为象棋的棋盘界面不宜尺寸变化,若出现局部棋盘有点不伦不类,而纯代码形成的窗体则只能是可变化的,不支持用语句重塑类型,因此出现了意外的难题。由此引出了调用 Private Sub Form_Resize() 函数(内容参看4楼),通过迂回手段,解决窗口尺寸不变的实现。实现其效果用了异常模式,这种做法就属于一种另类编程。
在上述象棋软件中类似的问题层出不穷,采取的手法亦花样众多,可列举的另类编程片段颇多,打算通过本贴陆续展示,以饗众吧友。亦希望能有跟贴出现,或讨论或质疑,活跃吧内气氛,增强贴子的质量。愿本吧能有所回暖。


  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

Option Explicit
Dim WithEvents Pic As PictureBox
'
Private Sub Form_Load()
Dim pp As Integer
ScaleMode = 3: AutoRedraw = True: Caption = "象棋": Font.Size = 20
Height = 9900: Width = 12000
Controls.Add "Vb.TextBox", "Co3", Me: Controls(0).Move 7, 585, 770, 22
Controls(0).Visible = True: Controls(0).BackColor = &HFFEEEE: Controls(0).Font.Size = 14
For pp = 1 To 3
Controls.Add "Vb.Label", "La" & CStr(pp), Me: Controls(pp).Move 100 + pp * 12, 404, 40 + Sgn(1 - pp) * 34, 30
Controls(pp).Visible = False: Controls(pp).BackColor = &HFFDDDD + Sgn(1 - pp) * &H113333
Next pp
Controls(1).ForeColor = &HEEBBBB: Controls.Add "Vb.Label", "La4", Me
Controls(4).Visible = False: Controls(4).BackColor = &HDD8888: Controls(4).Caption = "选择"
Controls(4).ForeColor = &HFFFFFF: Controls(4).Move 566, 547, 58, 30
Set Pic = Controls.Add("Vb.PictureBox", "Pic", Me)
Pic.ScaleMode = 3: Pic.BorderStyle = 1: Pic.Move 541, 12, 242, 528
Pic.AutoRedraw = True: Pic.BackColor = &HDDFFBB: Pic.Visible = True
Line (5, 7)-(536, 580), 15658751, BF '画棋盘底色
For pp = 0 To 8 '在循环结构中,完成位置不规则的炮台标记制作
Line (40 + pp * 57, 39)-(40 + pp * 57, 268) '画横纵线条
Line (40, 39 + pp * 57)-(496, 39 + pp * 57)
Line (40 + pp * 57, 324)-(40 + pp * 57, 552)
If pp = 1 Or pp = 2 Then '生成棋盘网格之外的其它构造
Line (211, 39 + 399 * (pp \ 2))-(325, 153 + 399 * (pp \ 2)) '画斜线
Line (325, 39 + 399 * (pp \ 2))-(211, 153 + 399 * (pp \ 2))
Line (97 - Sgn(1.5 - pp) * 6, 153 - 12)-(97 - Sgn(1.5 - pp) * 6, 153 - 6) '画左上炮台标记
Line (97 - Sgn(1.5 - pp) * 12, 153 - 6)-(97 - Sgn(1.5 - pp) * 6, 153 - 6) '由8根短线条构成
Line (97 - Sgn(1.5 - pp) * 6, 153 + 12)-(97 - Sgn(1.5 - pp) * 6, 153 + 6)
Line (97 - Sgn(1.5 - pp) * 12, 165 - 6)-(97 - Sgn(1.5 - pp) * 6, 165 - 6)
If pp = 2 Then Picture = Image: PaintPicture Picture, 427, 140, _
25, 30, 85, 140, 25, 30 '改变已画图形属性,复制炮台标记至右上位置
ElseIf pp > 2 And pp < 6 Then '复制其余同类标记
PaintPicture Picture, 142 + (pp - 3) * 114, 197, 25, 30, 85, 140, 25, 30
PaintPicture Picture, 142 + (pp - 3) * 114, 368, 25, 30, 85, 140, 25, 30
If pp > 3 Then PaintPicture Picture, 85 + (pp \ 5) * 342, 425, 25, 30, 85, 140, 25, 30
ElseIf pp > 6 Then '复制靠边界的半个标记
PaintPicture Picture, 40, 197 + (pp \ 8) * 171, 12, 30, 97, 140, 12, 30
PaintPicture Picture, 484, 197 + (pp \ 8) * 171, 12, 30, 85, 140, 12, 30
End If
Next pp
Line (40, 39 + pp * 57)-(496, 39 + pp * 57)
Line (40, 268)-(40, 328): Line (496, 268)-(496, 328)
End Sub
'
Private Sub Form_Resize()
If WindowState <> 1 Then '当窗口非最小化变动时
WindowState = 0
Left = (Screen.Width - 12000) / 2
Top = (Screen.Height - 9900) / 2
Move Left, Top, 12000, 9900 '还原初始的尺寸与位置
End If
End Sub
'函数 Sgn() 有特别的属性,考察其在两个 For 循环结构中的不同表现,认识它的变异作用
'语句 Picture = Image 相对关键,请深刻了解它们不同的图形内涵


2026-09-03 09:45:54
广告
不感兴趣
开通SVIP免广告
  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上一贴画棋盘只是抛砖引玉,接下来是怎么表现棋子。“车马炮士相将炮兵.....",红黑有14种类型,如何在窗体内部自画出?难度增大了,你能整出一个有效而合理的方案吗?请亮出相关的代码来。
楼主也有自己的方案,届时比较一下,互通有无,交流切磋,活跃吧内的气氛岂不妙哉。


  • 御龙在天
  • 基本语句
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这要面向对象的,棋子类是基类,每个棋子是子类


  • 御龙在天
  • 基本语句
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你参考下中国象棋的源码,总之必须要面向对象的,否则不知道怎么写。


  • 御龙在天
  • 基本语句
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
中国象棋的棋子在软件开发中怎么设计类,举个例子。参考这个提示词


  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本人编程属于野路子,所以称另类。也没有见过其它人的中国象棋软件代码,纯是自创的。画几个棋子,仅用不过10行左右的代码,哪有你想的那么复杂难搞。若想见识一下,等两天我会发贴展示。
本人基本上未阅读过成熟软件的原代码,从来就只是自我摸索编程,所以也想让外人见识一下特别风格的编程手段。


  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

Option Explicit
Dim WithEvents Pic As PictureBox
'
Private Sub Form_Load()
Dim pp As Integer
ScaleMode = 3: AutoRedraw = True: Caption = "象棋": Font.Size = 24
Height = 9900: Width = 12000
Controls.Add "Vb.TextBox", "Co3", Me: Controls(0).Move 7, 585, 770, 22
Controls(0).Visible = True: Controls(0).BackColor = &HFFEEEE: Controls(0).Font.Size = 14
'......无关画棋子的代码,省略未显示
'......
Line (541, 59)-(600, 205), 15658751, BF '画棋盘底色
FillStyle = 0: FillColor = 1736138: Circle (570, 160), 24 '画无字棋子外缘
FillColor = 969215: ForeColor = 969215: Circle (570, 160), 20 '画无字棋子中部
Font.Size = 24: Picture = Image '改变图形属性
For pp = 0 To 13 '复制不同的棋子
PaintPicture Picture, 542 + (pp Mod 5) * 48, 59 + (pp \ 5) * 49, 49, 49, 546, 136, 49, 49
ForeColor = 0: If pp > 4 Then ForeColor = 255 '黑字切换成红字
CurrentX = 550 + (pp Mod 5) * 48: CurrentY = 66 + (pp \ 5) * 49 '打印定位
If pp = 10 Or pp = 11 Then ForeColor = 0 '最后两子再切换成红字
Print Mid("车马象士将车马相仕帅炮卒炮兵", pp + 1, 1) '按字符串的顺序逐个打印
Next pp '尽管棋子模板藏在图形框后方看不见,但照样可以被复制而粘贴到棋盘上
End Sub


2026-09-03 09:39:54
广告
不感兴趣
开通SVIP免广告
  • 假无崖子
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
简直弄不懂此吧的态势了,不知都在静观什么?难得见新贴,出贴少人应,好劣均无反响,无论赞或喷,甚至发个表情符号,也算是某种交互。否则更难见发贴了。
存在文字的棋谱是象棋的特色。棋盘形势变化提供了棋谱的增量,棋谱的复盘还原了棋局动态过程,两者互为映射关系。棋谱的特点是红、黑方各一步形成一个回合(例"炮二平五,马8进7,"),每步由四个字符记录。此记录并不完备,需要与现场盘面结合,才能再现变化的实况。
界面中的图形框是为展示棋谱准备的,每行记录一个回合。然而一个回合是由红、黑先后两步构成的,因此须打印两次才能转行。每走一步棋,要点一下按钮,但界面上并没有按钮,这里打算在图形框下方空档处,画出假按钮图形,再写代码实现按钮功能。以较少的内部资源,完成按钮控件的任务。
上述的要求是客观具体的,在前面编写的代码之后,怎样添加语句实现这些功能,形成了下一节的任务要求。或许观贴的你也想一试身手,续上你的代码。那么后面我们再来比较一下各自的编程段落,有何异同,各自的优劣,取长补短,共同提高。这样总比望着不变的贴吧,无所事事的期待,更加积极主动吧。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 下一页 尾页
  • 44回复贴,共3页
  • ,跳到 页  
<<返回vb吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示