- Avalonia Visual Basic 6 là một dự án mang tính thử nghiệm nhằm tái dựng IDE và ngôn ngữ Visual Basic 6 cổ điển bằng C# sử dụng Avalonia
- Có thể mở phiên bản web trong trình duyệt, và phiên bản desktop cũng có thể được build dựa trên .NET 9.0
- Các tính năng chính gồm trình thiết kế trực quan, lưu·mở dự án theo định dạng tương thích VB6, chạy dự án và hỗ trợ hạn chế cho ngôn ngữ VB6
- Phiên bản trình duyệt yêu cầu .NET 9.0, còn bản build desktop có thể dùng cả .NET 8.0 nếu chỉnh sửa
Directory.Build.props
- Quyền đối với tên gọi, biểu tượng và đồ họa của Visual Basic thuộc về Microsoft Corporation, và dự án này không có mục đích thương mại
Tổng quan dự án
- Avalonia Visual Basic 6 là dự án tái dựng IDE và ngôn ngữ Visual Basic 6 cổ điển bằng C# và Avalonia
- Được giới thiệu là một fun, toy project không nhằm mục đích thương mại
- Mọi quyền đối với tên gọi, biểu tượng và đồ họa Visual Basic đều thuộc về Microsoft Corporation
- Có thể chạy phiên bản web trong trình duyệt
Tính năng được hỗ trợ
- Cung cấp Visual Designer
- Có thể lưu và tải dự án theo định dạng tương thích VB6
- Cung cấp khả năng chạy dự án
- Hỗ trợ ngôn ngữ VB6 ở mức hạn chế
Build phiên bản desktop
- Thông thường cần .NET 9.0
- Phiên bản desktop có thể dùng .NET 8.0 nếu chỉnh sửa
Directory.Build.props
- Phiên bản trình duyệt yêu cầu .NET 9.0
- Lệnh build desktop như sau
dotnet build AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj
Lỗi Antlr4 và Java
- Nếu xảy ra Antlr4 errors, có thể thư viện
Antlr4BuildTasks đã không tự động tải Java về
- Trong trường hợp này, cài đặt Java thủ công có thể giải quyết vấn đề
Triển khai desktop
- Cần publish riêng dự án IDE và runtime
dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/
dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/standalone/
- Sau khi triển khai, có thể chạy tệp sau
./bin/AvaloniaVisualBasic.Desktop
Các dự án và tài nguyên được sử dụng
1 bình luận
Ý kiến trên Hacker News
Tôi tìm thấy cuốn "Write Your Own Adventure Programs" (1983 - Usborne: https://colorcomputerarchive.com/repo/Documents/Books/Write%...) trên kệ sách ở trường tiểu học; mã viết bằng BASIC, còn nhà tôi lúc đó không có máy tính tử tế
Vài năm sau, khi thấy Visual Basic, tôi nghĩ chắc nó sẽ tương tự, và ở một mức nào đó đúng là vậy. Ban đầu không có sách để học nên tôi bấm hết mọi menu và nút để xem chức năng, rồi dùng kết nối quay số tải đủ loại control form VB của bên thứ ba, thả chúng vào Form và xem chúng làm gì
Cuối cùng, qua việc cứ sao chép-dán và chỉnh sửa, tôi làm được mấy công cụ hỗ trợ bài tập kiểu tính diện tích hình tròn, rồi cả các chương trình nghịch ngợm như hiện biểu tượng ở vùng thông báo cạnh đồng hồ hoặc ẩn cửa sổ để phát ra âm thanh khó chịu trong nền. Nhưng mỗi khi cố cài lên máy bạn bè thì thường thất bại vì các .dll cần thiết không nhét vừa một đĩa mềm
Có những lúc bực bội, nhưng tôi cảm thấy mình rất may mắn khi học lập trình theo cách đó, nhờ cha mẹ cho tôi gần như tự do nghịch một thiết bị mà thời đó hẳn là rất đắt
Ngay cả tutorial hồi đó cũng thú vị hơn. Kiểu như “tutorial Windows Registry của hypnoMan37!!! HEyyeyeyy Guuyzs :-)))) vào kênh IRC #blabla của tôi trên EFNet nhé! Trước tiên gọi RegistryCreateNewKey32(...) rồi…”; tất nhiên là cũng chẳng có CD MSDN
Học kiểu code camp chắc hiệu quả hơn nhiều, nhưng so ra thì khô khan quá. Tôi nghĩ cái giá của việc khiến người mới chán đến chết có lẽ cũng khá lớn
Lần đầu tôi tiếp xúc với Visual Basic là VBA trong MS Word; mở ra thì biết đó là chỗ viết code, nhưng hoàn toàn không biết phải nhập gì. Lúc đó tôi chưa biết một ngôn ngữ lập trình nào
Sau này tôi tìm thấy một cuốn sách VB.NET ở hiệu sách, mừng quá nên lập tức làm theo trong VBA, nhưng code hoàn toàn không chạy, khiến tôi rất nản. Tôi tự nhủ thử thêm lần cuối, nếu không được thì bỏ cuộc, may là nó chạy
Hóa ra VBA của MS Word trên máy tôi dựa trên VB 6, còn sách là sách VB.NET nên code hơi khác
Sau đó tôi mua mọi cuốn sách liên quan đến VB 6 mà tôi thấy, rồi tình cờ tìm được bộ cài VB 6 IDE trong đống CD của họ hàng và cài lên. Đến giờ tôi vẫn nghĩ GUI builder của VB 6 là thứ tốt nhất tôi từng dùng
Thư viện địa phương của tôi cũng có cuốn "Visual Basic How-To: The Definitive Vb3 Problem Solver", và tôi gia hạn nhiều đến mức họ bảo tôi không thể mượn tiếp được nữa. Tôi vẫn nhớ mình đã tạo một giao diện hoạt động thật dựa trên giao diện “Peanut Computer” ở phần đầu Out of this World
Có ý tưởng nào hay không?
Khi buồn chán, tôi thích đọc sách hướng dẫn MS-DOS 6 từ đầu đến cuối
Vào thời internet chưa phổ biến, chất lượng tài liệu và code ví dụ thật ấn tượng
Dấu ampersand trong nhãn nút không tạo phím tắt. Ví dụ
&Gokhông gạch chân chữ GTrong VB6 thật, nếu đặt control Label rồi gõ ngay thì nội dung sẽ thay đổi, nhưng ở đây phải focus vào ô nhập trước. Nhấp vào tiêu đề “Caption” cũng không được, phải nhấp vào trong cột nhập liệu
Để tăng độ trung thực, khi chọn một control trong GUI designer, một hàng trong lưới Properties phải luôn được tô sáng. Với Label, tôi nhớ mặc định là Caption; còn control không có thuộc tính mặc định thì là Name
Khi chuyển sang control khác, nếu có thuộc tính cùng tên với thuộc tính đang chọn, VB6 sẽ giữ nguyên lựa chọn đó. Nhờ vậy có thể nhanh chóng đổi liên tiếp thuộc tính Tag của nhiều control với số lần nhấp tối thiểu
Rõ ràng các menu như debug, lưu, trợ giúp, add-in vẫn chưa được triển khai. Nếu nút Build có thể xuất ra một “file thực thi” chạy trong trình duyệt thì sẽ rất tuyệt
Những nhận xét soi mói này xuất phát từ tình yêu thôi ;-)
_, nhưng tôi vừa đẩy bản cập nhật để hỗ trợ cả&rồi :)Lưu thực ra có hoạt động. Nhưng chỉ trên desktop, và hơn nữa còn tương thích định dạng với VB6. Vì hỗ trợ tổng thể còn hạn chế nên độ tương thích cũng hạn chế, nhưng tôi dự định cải thiện thêm một chút
Build cũng hoạt động, nhưng chỉ trên desktop ;)
Nhìn cũng như cách hoạt động đều thật sự trực quan
Đã rời khỏi các widget quen thuộc theo sở thích và không quá nổi bật, chuyển sang những thiết kế được tạo kiểu tinh vi, có chiều sâu và thể hiện rõ thương hiệu
Việc tập trung vào một thương hiệu hào nhoáng, khác lạ không chỉ thu hút người dùng mới mà còn khiến họ cảm thấy lạ lẫm và bức bối hơn khi chuyển sang nơi khác, từ đó giảm rời bỏ. Cách này kiếm tiền dễ hơn so với xu hướng trước đó vốn tập trung vào hiệu suất người dùng và khác biệt hóa tính năng
Công nghệ cũng chạy theo trào lưu đó, tiêu ngân sách độ phức tạp vào tùy biến phong cách, hoạt ảnh, cải thiện kết xuất phông chữ, v.v.; còn những nỗ lực khuyến khích một ngôn ngữ thiết kế tiêu chuẩn để cả người tạo lẫn người dùng cùng làm quen thì bị từ bỏ
Tất cả các phiên bản Visual Studio về sau cũng có cùng builder này. Tôi dùng builder này hằng ngày khi làm các ứng dụng cá nhân nhỏ. Ngay cả trong Visual Studio 2022 mới ra hôm qua, nó gần như giống 100%
Thật ra bây giờ còn tốt hơn. Vì việc căn chỉnh và thay đổi thuộc tính đã dễ hơn. Nhưng giao diện thì vẫn vậy, đúng nghĩa là không thay đổi suốt 25 năm
Tôi vừa mở VS2022 và tạo ứng dụng này trong chưa đầy 60 giây: https://imgur.com/a/qHOCasJ
Có hai lý do khiến tôi bị VB thu hút. Một là có thể tự vẽ GUI; theo chuẩn thời đó, việc tạo ra phần mềm “trông giống phần mềm” với nỗ lực tối thiểu là một trải nghiệm rất tuyệt và đầy sức mạnh
Lý do còn lại là để làm GUI thì thay vì dùng VB, bạn phải vật lộn với các thư viện lớp. Khi ấy OOP hoàn toàn khó hiểu với một lập trình viên sở thích như tôi, và ngay cả để tạo một ứng dụng “hello world” tối thiểu trên Windows hay Mac cũng cần hướng dẫn dài nhiều trang
Trong vài thập kỷ sau đó, yêu cầu đối với GUI chất lượng cao tăng lên, đồng thời kỹ năng lập trình cần để tạo GUI nhỏ bằng code dường như cũng trở nên phổ biến hơn. Có thể là nhờ các ngôn ngữ dần dần làm việc này dễ hơn
Giờ thì với mức GUI tôi cần, tôi chỉ viết bằng code; trong trường hợp của tôi, để Tkinter tự đặt theo bố cục mặc định vừa đủ lại khiến tôi hài lòng hơn. Các nạn nhân của tôi, à không, người dùng của tôi, cũng không đòi hỏi gì tốt hơn
Điều này khá giống cách Interface Builder của Xcode dùng trong các ứng dụng macOS và iOS
Như những người khác đã nói, nó hoạt động tốt cho đến khi phải hỗ trợ kích thước màn hình, bố cục, hoạt ảnh, tương tác cảm ứng, v.v.
Sau khi đã làm cả ứng dụng native desktop lẫn ứng dụng dựa trên trình duyệt, tôi thấy rằng một khi vượt qua đường cong học tập, việc viết bố cục widget bằng văn bản dưới dạng code hoặc markup là hiệu quả
Tôi biết Qt và wxWidgets cũng có tính năng bố cục tự động, nhưng vì làm trên C++ nên trải nghiệm có thể kém mượt mà hơn. Cho đến nay, trình thiết kế form của Visual Studio vẫn yêu cầu bố trí pixel thủ công, nên GUI càng phức tạp thì càng nhàm chán
Cách kéo thả control dễ học nên tốt cho người mới, nhưng chỉ cần khoảng 12 control là thời gian dùng để kéo, căn và chỉnh kích thước thủ công đã bắt đầu thấy rõ. Với GUI dựa trên markup hoặc được tạo theo thủ tục, những phép tính bố cục này được làm thay cho bạn
Giao diện Windows giai đoạn 1995–2001 thật sự giống như đỉnh cao của Windows
Rất sắc nét và gọn gàng. Visual C++ và Visual Basic thời đó không hoàn hảo, nhưng chúng giúp hoàn thành công việc
XP đã ở ngay trước mắt, và tôi nghĩ sau đó là đi xuống
Hơi lạc đề một chút, nhưng cái này được làm bằng Avalonia, thứ tôi mới nghe lần đầu. Có ai đã dùng chưa? Lời hứa tạo ra các ứng dụng đa nền tảng đẹp mắt từ một codebase .NET duy nhất nghe rất ấn tượng, nhưng tôi tò mò liệu thực tế có làm được đến mức đó không
https://avaloniaui.net/
Thấy cái này thật sự vui
Tôi là một trong những lập trình viên ban đầu làm phần “visual” của Visual Basic
Khi đó nó có tên là Ruby, không liên quan gì đến ngôn ngữ lập trình Ruby. Nó dự định là một shell có thể tùy biến cho Windows 3.0. Ý tưởng là từng người dùng Windows có thể tạo môi trường desktop cá nhân của riêng mình bằng trình biên tập trực quan và các “gizmos”; sau này những gizmos đó được gọi bằng cái tên nhàm chán hơn nhiều là “controls”
Có lẽ Microsoft đã khôn ngoan khi nhận ra thứ này phù hợp làm công cụ cho lập trình viên hơn là công cụ cho người dùng cuối, rồi kết hợp Ruby với Basic để tạo ra Visual Basic
Nếu từng tạo control tùy chỉnh VBX, bạn có thể đổ lỗi cho tôi về API kinh khủng đó
Và nếu tò mò cụm “fire an event” đến từ đâu, bạn có thể tìm câu trả lời trong bài viết của Retool về VB: https://retool.com/visual-basic
Cảnh báo nội dung: có cách diễn đạt liên quan đến ma túy. Nói cách khác, “cứ hỏi tôi bất cứ điều gì”
Tự quảng bá hơi trơ trẽn một chút: hiện tôi đang tìm việc. Ở IBM, nhóm của chúng tôi bị ảnh hưởng khá nặng trong đợt sa thải gần đây, và chúng tôi mất McDonald's, khách hàng chuyên trách duy nhất
Tôi biết nhiều ngôn ngữ và framework, nhưng không biết tất cả. Có ai biết hết không?
Tôi thích làm việc cùng khách hàng để hiểu nhu cầu của họ. Như mọi lập trình viên, tôi cũng thích code, nhưng code chỉ là phương tiện để làm khách hàng hài lòng
Nếu quan tâm, có thể tìm tôi ở đây: http://linkedin.geary.com/, http://resume.geary.com/
Tôi là người đã viết bình luận dài đầy nhiệt huyết ở trên. Tôi muốn ngồi Zoom khoảng một giờ để nghe chuyện thời đó, và nếu đăng video đó lên đây thì mọi người chắc sẽ thích
Tôi hoàn toàn không có kinh nghiệm phỏng vấn hay kênh truyền thông nào, nhưng sẽ cố hết sức để đặt các câu hỏi thú vị. Nếu quan tâm thì cứ gửi email cho tôi. Có thể tìm thấy trong hồ sơ của tôi
Có liên quan gì đến MS Dialog Editor không?
Nếu đào sâu vào mã, có thể thấy tác giả chỉ triển khai mức tối thiểu để tạo ra một bản demo ấn tượng
Ví dụ, các hàm được hỗ trợ chỉ có hai hàm MsgBox và InputBox: https://github.com/BAndysc/AvaloniaVisualBasic6/blob/383a005...
Dù vậy, nhìn vào lịch sử commit thì việc tạo ra một thứ phức tạp như thế này chỉ trong 4 ngày thật ấn tượng. Đây cũng là điểm khởi đầu tốt để phát triển thành một IDE hoàn chỉnh
Đáng tiếc là thiếu các tính năng nâng cao như tô sáng cú pháp và tự động hoàn thành. Tôi chưa chạy thử, nhưng vì đang dùng macOS nên đoán là cũng sẽ không có debugger
Nói chuyện tuổi thơ của tôi một chút, hành trình lập trình ban đầu bắt đầu với Turbo Pascal rồi sau đó chuyển sang Delphi 7. Delphi khá giống VB6, cho phép thiết kế app bằng cách kéo thả component lên form
App đầu tiên tôi làm là một bản clone Notepad++, và mã vẫn còn, nhưng tệ đến mức mỗi lần nhìn lại đều thấy ngượng
Hỗ trợ ngôn ngữ VB6 cũng còn hạn chế. Nó giống một món đồ chơi hoặc proof of concept hơn, nhưng phản ứng tích cực khiến tôi muốn triển khai thêm tính năng. Đặc biệt vì định dạng lưu tương thích với VB6. Có lẽ nó vẫn sẽ là đồ chơi, nhưng biết đâu có thể trở thành một món đồ chơi thực sự chạy được?
Có thể mở phiên bản web trong trình duyệt: https://bandysc.github.io/AvaloniaVisualBasic6/
Sửa: đã tìm ra nguyên nhân. Tùy chọn Enhance your security on the web của Edge làm chậm rất nhiều. Tắt tùy chọn này thì vấn đề hiệu năng được giải quyết
Tôi thật sự nhớ component frame trong các ứng dụng ngày nay. Có vẻ ai cũng nghĩ một tiêu đề đậm cộng với chút khoảng trắng ở cuối là đủ để nhóm các mục lại
fieldsetvới kiểu hiển thị như vậy. Nhưng quá nhiều CSS framework làm hỏng nó. Cá nhân tôi thật sự thích kiểu đóMuốn kiểm tra thì chỉ cần đặt nội dung sau vào một file HTML trống và xem nó được render thế nào: Frame1, HTML, CSS, JavaScript
Liên quan đến chuyện này, một thứ quan trọng khác cũng đã biến mất là TabView đúng nghĩa. Tôi không biết ai là người đầu tiên khăng khăng gọi một hàng nút bình thường là TabView, nhưng có lẽ là Apple, và điều đó rất tệ. Bởi vì, cũng như khi thiếu GroupBox, nó không hiển thị ranh giới cho thấy các control bên dưới thuộc về view của tab được chọn. Tôi nghĩ chuyện này đáng lẽ phải hiển nhiên