← முகப்பு

பல்தள WinForms

Windows Forms குறியீட்டை macOS மற்றும் Linux-இல் இயக்குவது என்றால் என்ன, அதன் விலை என்ன, Majorsilence.Forms அதை எப்படிச் செய்கிறது.

இந்தப் பக்கம் ஒரு மொழிபெயர்ப்பு. ஆங்கிலப் பதிப்புடன் வேறுபாடு இருந்தால், ஆங்கிலப் பதிப்பே சரியானது. English

Windows Forms எப்போதும் Windows-க்கு மட்டுமே உரியது. System.Windows.Forms என்பது Win32 சாளர வகுப்புகள் (window classes) மற்றும் GDI+ மீதான ஒரு managed உறை — HWNDகள், WM_PAINT, user32.dll. .NET எல்லா இடங்களிலும் இயங்குகிறது, ஆனால் அந்த assembly Windows Desktop runtime-இல் மட்டுமே வருகிறது; எனவே ஒரு WinForms பயன்பாட்டை macOS அல்லது Linux-இல் build செய்யவோ தொடங்கவோ முடியவே முடியாது. அதுதான் முழுப் பிரச்சினை; அதனால்தான் “எங்கள் WinForms பயன்பாட்டைப் பல்தளமாக்குங்கள்” என்பது வரலாற்று ரீதியாக “அதை மீண்டும் எழுதுங்கள்” என்றே பொருள்பட்டது.

Majorsilence.Forms மற்ற வழியைத் தேர்ந்தெடுக்கிறது: WinForms நிரலாக்க மாதிரியை ஒரு பல்தள renderer மீது மீண்டும் செயல்படுத்துதல். அதே வகுப்புப் பெயர்கள், அதே பண்புகள் (properties), அதே நிகழ்வுகள் (events), designer உருவாக்கும் அதே குறியீடு — ஆனால் அடியில் எதுவும் Win32 அல்ல.

using Majorsilence.Forms;   // System.Windows.Forms-க்குப் பதிலாக

public class MainForm : Form
{
    public MainForm ()
    {
        var button = new Button { Text = "Click me", Location = new Point (12, 12) };
        button.Click += (s, e) => MessageBox.Show ("Hello from Linux.");
        Controls.Add (button);
    }
}

அந்தக் கோப்பு ஒரே net10.0 (அல்லது net8.0) build-இலிருந்து Windows, macOS மற்றும் Linux-இல் compile ஆகி இயங்குகிறது. -windows TFM இல்லை, Windows Desktop runtime இல்லை, Wine-உம் இல்லை. மைய நூலகம் ஒரு netstandard2.0 build-ஐயும் வழங்குகிறது; அதனால்தான் Windows-இல் உள்ள .NET Framework 4.8 பயன்பாடும் அதை ஹோஸ்ட் (host) செய்ய முடிகிறது.

WinForms இணக்க அடுக்கு உண்மையில் எப்படி வேலை செய்கிறது

WinForms குறியீட்டை வேறொரு தளத்துக்குக் கொண்டு செல்ல மூன்று அணுகுமுறைகள் உள்ளன; அவை மிகவும் வேறுபட்டு நடந்துகொள்கின்றன:

அணுகுமுறை அது என்ன விட்டுக்கொடுப்பு
போலச்செய்தல் (emulation) (Wine, Mono-வின் பழைய System.Windows.Forms) மாற்றப்படாத WinForms assembly-க்கு அடியில் Win32/GDI+-ஐ மீண்டும் செயல்படுத்துதல் மூலக் குறியீட்டில் எந்த மாற்றமும் இல்லை, ஆனால் மிகப் பெரிய Win32 பரப்பு, இயல்பற்ற நடத்தை, மற்றும் உங்கள் பயன்பாடு செயல்படுத்தப்படாத ஏதாவதொன்றைத் தொட்ட கணமே முடிந்துவிடும் ஆதரவு ஆகியவற்றை நீங்கள் சுமக்க வேண்டும்
மீண்டும் எழுதுதல் (rewrite) (WPF, .NET MAUI, Avalonia, இணையம்) UI-ஐ வேறொரு முன்னுதாரணத்தில் மீண்டும் வெளிப்படுத்துதல் உண்மையிலேயே நவீனமான விளைவு, ஆனால் ஒவ்வொரு திரையையும் மீண்டும் கட்டி, அணிக்கு மீண்டும் பயிற்சி அளிக்க வேண்டிய விலையில்
API-இணக்கமான மறுசெயலாக்கம் (Majorsilence.Forms) WinForms API-ஐ ஒரு கையடக்க (portable) renderer மீது மீண்டும் கட்டுதல் இயந்திரத்தனமான namespace மாற்றத்துடன் மூலக் குறியீட்டு மட்ட இணக்கம்; Control.Handle, WndProc போன்ற Win32 தப்பிக்கும் வழிகளை விட்டுக்கொடுக்கிறீர்கள்

Majorsilence.Forms மூன்றாவது வகை. ஒவ்வொரு கட்டுப்பாடும் (control) SkiaSharp மூலம் framework தானே வரைகிறது — Chrome மற்றும் Flutter-க்குப் பின்னால் உள்ள அதே GPU-முடுக்கப்பட்ட 2D இயந்திரம் — எனவே ஒரு Button மூன்று desktop-களிலும் ஒரே மாதிரித் தோன்றி ஒரே மாதிரி நடந்துகொள்கிறது, ஏனெனில் அது மூன்றிலும் உண்மையிலேயே அதே வரைதல் குறியீடுதான்.

ஒரே வரைபடத்தில் கட்டமைப்பு

உங்கள் பயன்பாடு (படிவங்கள், கட்டுப்பாடுகள், Designer கோப்புகள் — உங்களுக்குத் தெரிந்த WinForms மாதிரி) │ Majorsilence.Forms (கட்டுப்பாடுகள் + WinForms-இணக்க API, SkiaSharp மூலம் வரையப்படுகிறது) │ மாற்றக்கூடிய ஹோஸ்ட் பின்தளம் (host backend) ├─ Avalonia → Windows · macOS · Linux (இயல்புநிலை) · Android · iOS · உலாவி ஆகியவையும் ├─ Uno → desktop · iOS · Android · WebAssembly ├─ GTK 4 → Linux-முதன்மை உண்மையான GTK சாளரம் (gir.core), GTK runtime உடன் Windows/macOS-இலும் ├─ Terminal → படிவம் terminal-இல் வரையப்படுகிறது (Kitty graphics, Sixel அல்லது Unicode blocks) ├─ WinForms → Windows-மட்டும் இடம்பெயர்த்தல் பாலம்: ஏற்கனவே உள்ள WinForms பயன்பாட்டில் உட்பொதித்து, படிப்படியாக port செய்யுங்கள் ├─ WPF → Windows-மட்டும் இடம்பெயர்த்தல் பாலம், அதே வடிவம், ஏற்கனவே உள்ள WPF பயன்பாட்டுக்கு └─ Headless → சோதனைகள் / CI-க்கான திரைக்கு வெளியான வரைதல் (offscreen rendering)

மைய Majorsilence.Forms assembly எந்த windowing toolkit-ஐயும் குறிப்பிடுவதில்லை — SkiaSharp-ஐ மட்டுமே. ஒரு பின்தளத்தின் (backend) முழு வேலையும் ஒரு native சாளரத்தை (அல்லது ஒரு terminal-ஐ, அல்லது எதையுமே இல்லாமல்) உருவாக்குவது, ஒரு message loop-ஐ இயக்குவது, உள்ளீட்டை வழங்குவது, ஒரு Skia surface-ஐக் காட்டுவது ஆகியவைதான். அந்த இணைப்புக்கோடு (seam) காரணமாகவே அதே பயன்பாட்டு binary இன்று desktop-இல் Avalonia-வையும் நாளை GTK 4, Uno அல்லது WebAssembly-ஐயும் இலக்காகக் கொள்ள முடிகிறது — மேலும் ஒரு Windows பயன்பாடு இடம்பெயரும்போது தனது ஏற்கனவே உள்ள WinForms அல்லது WPF சாளரங்களுக்குள் அதே கட்டுப்பாடுகளை ஹோஸ்ட் செய்ய முடிகிறது. இடைமுகங்களுக்கும் உங்கள் சொந்தப் பின்தளத்தைச் சேர்ப்பது எப்படி என்பதற்கும் தளப் பின்தளங்கள் பக்கத்தைப் பாருங்கள்.

ஒவ்வொரு தளத்திலும் உங்களுக்குக் கிடைப்பது

தளம் நிலை ஹோஸ்ட்
Windows ஆதரிக்கப்படுகிறது, நேரடியாகவே Avalonia (இயல்புநிலை), Uno, அல்லது GTK runtime நிறுவப்பட்டிருந்தால் GTK 4
Windows, ஏற்கனவே உள்ள WinForms அல்லது WPF பயன்பாட்டுக்குள் ஆதரிக்கப்படுகிறது — படிப்படியான இடம்பெயர்த்தல், ஒரு நேரத்தில் ஒரு கட்டுப்பாடு; .NET Framework 4.8 (net48) இலிருந்தும் ஹோஸ்ட் செய்யலாம் Majorsilence.Forms.WinForms / Majorsilence.Forms.Wpf
macOS (Intel மற்றும் Apple Silicon) ஆதரிக்கப்படுகிறது, நேரடியாகவே — macOS-இல் WinForms பாருங்கள் Avalonia (இயல்புநிலை), Uno, அல்லது Homebrew வழியாக GTK 4
Linux (X11 / Wayland) ஆதரிக்கப்படுகிறது, நேரடியாகவே — Linux-இல் WinForms பாருங்கள் Avalonia (இயல்புநிலை, X11), GTK 4 (native Wayland/X11, Wayland-இல் சரிபார்க்கப்பட்டது), அல்லது Uno
Terminal இயங்குகிறது, புதியது — xterm மற்றும் WezTerm-இல் சரிபார்க்கப்பட்டது Majorsilence.Forms.Terminal: படிவம் terminal முழுவதையும் நிரப்புகிறது, Kitty graphics, Sixel அல்லது Unicode block எழுத்துருக்களாக வரையப்படுகிறது
WebAssembly / உலாவி இயங்குகிறது, புதியது — நேரடிக் காட்சியகத்தை முயன்று பாருங்கள்; திரை வாசிப்பான்கள் UI-இன் ARIA DOM பிரதிபலிப்பைக் காண்கின்றன Avalonia Browser அல்லது Uno Wasm
Android ஆரம்ப நிலை — உண்மைச் சாதனத்தில் முதற்கட்டச் சோதனை முடிந்தது (boot, தட்டல்கள், render scaling, தொடு scroll ஆகியவை வன்பொருளில் உறுதிப்படுத்தப்பட்டன); keyboard, safe-area, சுழற்சி ஆகியவை unit-test மட்டுமே செய்யப்பட்டுள்ளன Avalonia Android அல்லது Uno
iOS ஆரம்ப நிலை — CI உண்மையான head-ஐ compile செய்து simulator smoke check-இல் தொடங்குகிறது, ஆனால் இதுவரை யாரும் அதை ஊடாடும் வகையில் இயக்கவில்லை Avalonia iOS அல்லது Uno
Headless / CI ஆதரிக்கப்படுகிறது Headless பின்தளம், offscreen Skia

ஒரு port மாற்றீடு செய்ய வேண்டிய Windows-மட்டும் API-கள்

கட்டுப்பாடுகளைக் கையடக்கமாக்குவது பாதி வேலை மட்டுமே. ஒரு உண்மையான WinForms பயன்பாடு வேறு Windows-மட்டும் அடுக்குகளையும் சார்ந்திருக்கிறது; அவை ஒவ்வொன்றுக்கும் இங்கே ஒரு பல்தளத் தீர்வு உள்ளது:

அதன் விலை என்ன

அம்சப் பட்டியலை விட, விட்டுக்கொடுப்புகள் பற்றி நேர்மையாக இருப்பது அதிகப் பயனுள்ளது:

அடுத்து எங்கே செல்லலாம்