另类的编程
vb吧
全部回复
仅看楼主
level 7
假无崖子 楼主
多年后再回此吧,颇多感慨,希望万事和谐。
积累了某些不常见的,但有特色的编程手法,想与众吧友分享、讨论和提炼。也借此有个展现的机会,能让其他人看到,或许可以推广,甚至光大。请勿喷!
得出VB编程的界面通常使用工具栏,能否弃之而直接写代码(即使是复杂或有画面的),这样就可以将所有代码,以文本的形式,存入 XXX.Txt 文件中。而且后续的编程不受限制,直接在上面增删叠加。
这是开始提出的内容,您认为可行吗,实用吗,是否能尝试做出实例。
2026年08月01日 03点08分 1
level 7
假无崖子 楼主
真是悲哀,此吧竟然到了几天才出现一个新贴的地步。衰败到如此,万万没有想到,如今真的世道变了!
2026年08月01日 05点08分 2
当然可以行,可以把代码全放入单个模块中,生成窗体按钮之类的,既可以使用vb本身的动态创建,也可以纯用win api。到感觉没意义,vb唯一的优势就是所见即所得了吧,这唯一的优势也没了。虽然也没用用vb了……
2026年08月02日 17点08分
level 14
这样直接用python就行了吧
2026年08月02日 01点08分 3
level 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
'这仅是初步介绍的内容,如果有感兴趣的朋友跟贴,则后面会陆续增加,最后完整写出某有功能软件的全代码
2026年08月04日 03点08分 4
吧务
level 14
纯写代码制作界面是没问题的,使用CreateWindowEx就可以实现,不过事件响应什么的都要自己弄[滑稽]
2026年08月05日 17点08分 5
对不同对象创建方法区别,需鼠标响应的用ForeColor...,可以直接代码操作的则用Controls.Add "...",合理分配内部资源。自己写代码实现各种功能,正是编程的乐趣所在。突破常规编写模式,以得到非常效果,就是一种心理满足。
2026年08月06日 00点08分
对不同对象创建方法区别,需鼠标响应的用WithEvents。前条有打字手误
2026年08月06日 00点08分
level 7
假无崖子 楼主
冷眼观察了几天,看出某些端倪,楼主以为衰落是多种原因叠加的结果。VB6本身是业余编程者的工具,其本身不再升级,落后于当前电脑环境。而且功能还少许萎缩,例精简版就不支持虚拟键盘函数 SendKays "{XXX}" 等。同时Windows系统平台逐渐严格,VB使用了Api函数生成的软件,会被标注为含病毒的程序,从而进一步收缩了编程自由度。
随时代的发展,传统的编程已淡出主流,且不说AI生成,就是人工写的代码VB也驾驭不了神经网络的运行。与此配套的是:学校教育基本不教VB,导致投机的学生也再难得访问此吧,贴数锐减,老吧客也失去了指导机会。
原有的吧客多是非专业的编程爱好者,高水平的通常不来光顾,因此存在高不成低不就。难度大的问题解决不了,缺乏创新进取的锐气。常规的问题则索然无味,程式化的堆砌觉得十分乏味。几乎见不到令人耳目一新的贴子,吧内渐失生气,退吧或沉寂者日益增多。
楼主认为此吧想新增关注者,肯定是奢望。但减少流失,提高贴子的质量,吸引原有吧客的注意,形成正反馈,才是苟延残喘的方法。贴子内容若总是老生常谈,必然鲜有回应,所以必需有新意。闭门造车肯定不行,应该是在现有的环境下,解决真实的客观问题,发挥VB内置的功能,超常组合或运用,突破传统的程式,才具备真正的吸引力。
当然VB是昨日黄花不可逆转,不要指望能写成出色优秀的软件。只是我们这些怀旧的群体,借助这个平台留住正在逝去的兴趣,娱人娱己,打发业余时间而已。
2026年08月07日 07点08分 6
level 7
假无崖子 楼主
既然提出了建议,就当仁不让的首发一张此类贴子吧。
贴名为"另类的编程",当然不止仅仅指放弃工具栏,纯代码编写,而涵盖更多的方面内容。不过本楼主秉持某些自我约束条件:使用精简版VB6,免用Api函数,纯代码编写,尽可能节省内部资源(尽管如今的电脑内存颇大),不引用外部功能对象,完全靠VB自身函数及方法。
譬如4楼的代码中,以 WithEvents 语句创建 PictureBox,是因为需要用其鼠标响应和打印功能,采取耗资源大的形式。而以 Controls.Add "Vb.xxx" 语句创建 TextBox,则因为要它实现的功能,均可用写代码完成,所以使用占内部资源小的方法。这是我初学编程时的价值标准,虽然如今内部资源大到取之不尽,但原则仍继续遵守。
上述代码其实是从楼主的中国象棋软件中,抽取的局部片段(有少许改动)。因为象棋的棋盘界面不宜尺寸变化,若出现局部棋盘有点不伦不类,而纯代码形成的窗体则只能是可变化的,不支持用语句重塑类型,因此出现了意外的难题。由此引出了调用 Private Sub Form_Resize() 函数(内容参看4楼),通过迂回手段,解决窗口尺寸不变的实现。实现其效果用了异常模式,这种做法就属于一种另类编程。
在上述象棋软件中类似的问题层出不穷,采取的手法亦花样众多,可列举的另类编程片段颇多,打算通过本贴陆续展示,以饗众吧友。亦希望能有跟贴出现,或讨论或质疑,活跃吧内气氛,增强贴子的质量。愿本吧能有所回暖。
2026年08月08日 06点08分 7
level 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年08月09日 03点08分 8
level 7
假无崖子 楼主
上一贴画棋盘只是抛砖引玉,接下来是怎么表现棋子。“车马炮士相将炮兵.....",红黑有14种类型,如何在窗体内部自画出?难度增大了,你能整出一个有效而合理的方案吗?请亮出相关的代码来。
楼主也有自己的方案,届时比较一下,互通有无,交流切磋,活跃吧内的气氛岂不妙哉。
2026年08月09日 03点08分 9
level 5
这要面向对象的,棋子类是基类,每个棋子是子类
2026年08月09日 07点08分 10
level 5
你参考下中国象棋的源码,总之必须要面向对象的,否则不知道怎么写。
2026年08月09日 07点08分 11
level 5
中国象棋的棋子在软件开发中怎么设计类,举个例子。参考这个提示词
2026年08月09日 07点08分 12
level 7
假无崖子 楼主
本人编程属于野路子,所以称另类。也没有见过其它人的中国象棋软件代码,纯是自创的。画几个棋子,仅用不过10行左右的代码,哪有你想的那么复杂难搞。若想见识一下,等两天我会发贴展示。
本人基本上未阅读过成熟软件的原代码,从来就只是自我摸索编程,所以也想让外人见识一下特别风格的编程手段。
2026年08月09日 09点08分 13
1