<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Majorsilence.Forms</title>
  <subtitle>.NET-க்கான திறந்த மூல பல்தள WinForms நூலகம் — உங்கள் பயன்பாடுகளை மீண்டும் எழுதாமல் Windows, macOS, Linux மற்றும் உலாவியில் இயக்கும் Windows Forms இணக்க அடுக்கு.</subtitle>
  <id>https://forms.majorsilence.com/ta/feed.xml</id>
  <link href="https://forms.majorsilence.com/ta/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://forms.majorsilence.com/ta/" rel="alternate" type="text/html"/>
  <updated>2026-10-08T14:30:00+00:00</updated>
  <author><name>Majorsilence</name></author>
  <rights>MIT</rights>
  <entry>
    <title>ஆகஸ்ட் முதல் வந்தவை: 26.9.0, நான்கு புதிய பின்தளங்கள், CSS தீம்கள், மற்றும் நடத்தை தணிக்கை</title>
    <id>https://forms.majorsilence.com/ta/blog/2026/10/08/whats-new-since-august-26-9-0/</id>
    <link href="https://forms.majorsilence.com/ta/blog/2026/10/08/whats-new-since-august-26-9-0/" rel="alternate" type="text/html"/>
    <published>2026-10-08T14:30:00+00:00</published>
    <updated>2026-10-08T14:30:00+00:00</updated>
    <summary type="text">Majorsilence.Forms 26.9.0: GTK 4, Terminal, WinForms மற்றும் WPF பின்தளங்கள், net48 மற்றும் netstandard2.0, CSS தீம்கள், MVVM, நடத்தை தணிக்கை, மற்றும் மேம்படுத்தல் குறிப்புகள்.</summary>
    <content type="html">&lt;p&gt;இங்கு வெளியான கடைசிப் பதிவு 26.0.30 ஐ அடிப்படையாகக் கொண்டு எழுதப்பட்டது. 2026-08-17 முதல் repository இல் 557 commits சேர்ந்துள்ளன; தற்போதைய வெளியீடு &lt;strong&gt;26.9.0&lt;/strong&gt;. இது ஏற்கனவே உள்ள பயனர்களுக்கும் மதிப்பீடு செய்பவர்களுக்குமான ஒரு தொகுப்பு: என்ன மாறியது, ஒவ்வொரு பகுதியும் எவ்வளவு முதிர்ச்சியடைந்துள்ளது, மேலும் மேம்படுத்தும்போது (upgrade) நீங்கள் கட்டாயம் செய்ய வேண்டிய ஒரு விஷயம்.&lt;/p&gt;&lt;h2 id=&quot;four-new-backends&quot;&gt;நான்கு புதிய பின்தளங்கள்&lt;/h2&gt;&lt;p&gt;மூன்று ஹோஸ்ட்கள் இருந்தன — Avalonia, Uno, Headless. இப்போது ஏழு உள்ளன; அனைத்தும் அதே கட்டுப்பாட்டுத் தொகுப்பை இயக்குகின்றன. வேறுபாடு, window ஐ யார் உருவாக்குகிறார்கள், Skia மேற்பரப்பை யார் காட்டுகிறார்கள் என்பதில் மட்டுமே.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;GTK 4&lt;/strong&gt; (&lt;code&gt;Majorsilence.Forms.Gtk4&lt;/code&gt;) என்பது gir.core மீது கட்டப்பட்ட, Linux ஐ முதன்மையாகக் கொண்ட ஒரு ஹோஸ்ட்: ஒவ்வொரு படிவத்துக்கும் ஒரு உண்மையான &lt;code&gt;Gtk.Window&lt;/code&gt;, GLib main loop; GTK 4 runtime உடன் Windows மற்றும் macOS இலும் பயன்படுத்தலாம். &lt;code&gt;Application.Run&lt;/code&gt; க்கு முன் &lt;code&gt;Gtk4Application.Use ();&lt;/code&gt; மூலம் இதை வெளிப்படையாகத் தேர்ந்தெடுங்கள். உட்பொதித்தல் (embedding) இரு திசைகளிலும் வேலை செய்கிறது (&lt;code&gt;ToGtkWidget()&lt;/code&gt;, &lt;code&gt;ToGtkWindow()&lt;/code&gt;); GTK 4 ஒரே render tree ஐ composite செய்வதால் &lt;code&gt;NativeControlHost&lt;/code&gt; க்கு “airspace” பிரச்சினை இல்லை; &lt;code&gt;WebBrowser&lt;/code&gt; WebKitGTK 6.0 மூலம் இயங்குகிறது. Wayland இல் சரிபார்க்கப்பட்டது. அறியப்பட்ட இடைவெளிகள்: திரை-நிலைக் கட்டுப்பாடு இல்லை (GTK 4 அந்த API ஐ நீக்கிவிட்டது), &lt;code&gt;SetIcon(byte[])&lt;/code&gt; ஒரு no-op (எதுவும் செய்யாது), native கோப்புத் தேர்விகள் (file pickers) வெறுமையாகத் திரும்புவதால் மாற்று (fallback) உரையாடல் சாளரங்கள் பயன்படுத்தப்படுகின்றன, முழு எண் அளவுக் காரணி (integer scale factor) மட்டுமே, AOT-பகுப்பாய்வு செய்யப்படவில்லை.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Terminal&lt;/strong&gt; (&lt;code&gt;Majorsilence.Forms.Terminal&lt;/code&gt;, 2026-10-04) ஒரு படிவத்தை console க்குள் ஒற்றைக் காட்சியாக (single view) host செய்கிறது — ஒரு தொலைபேசியைப் போல, படிவம் terminal ஐ நிரப்புகிறது, title bar இல்லை. கிடைக்கும் இடங்களில் உண்மையான pixel தெளிவுத்திறனில் Kitty graphics அல்லது Sixel ஐப் பயன்படுத்துகிறது; இல்லையெனில் Unicode block elements. Terminal ஐ வினவுவதன் மூலம் கண்டறிதல் நடைபெறுகிறது; &lt;code&gt;MF_TERMINAL_GRAPHICS=halfblock|kitty|sixel&lt;/code&gt; ஒரு பயன்முறையை நிலைப்படுத்துகிறது. Mouse மற்றும் keyboard வேலை செய்கின்றன; Ctrl+C எப்போதும் வெளியேறும். &lt;code&gt;TerminalApplication.Use (options);&lt;/code&gt; மூலம் தேர்ந்தெடுக்கப்படுகிறது. xterm மற்றும் WezTerm இல் மட்டுமே சரிபார்க்கப்பட்டது. Native தேர்விகள், &lt;code&gt;NativeControlHost&lt;/code&gt; அல்லது webview இல்லை.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;WinForms&lt;/strong&gt; (&lt;code&gt;Majorsilence.Forms.WinForms&lt;/code&gt;) என்பது Windows-மட்டும் இயங்கும் ஒரு &lt;em&gt;இடம்பெயர்த்தல்&lt;/em&gt; பின்தளம்: Win32 pump இல் உண்மையான &lt;code&gt;System.Windows.Forms&lt;/code&gt; windows, Skia ஒரு GDI bitmap மூலம் காட்டப்படுகிறது. ஏற்கனவே உள்ள ஒரு WinForms பயன்பாட்டில் Majorsilence.Forms கட்டுப்பாடுகளை ஒவ்வொன்றாக உட்பொதிக்க — &lt;code&gt;myMfControl.ToWinFormsControl()&lt;/code&gt;, &lt;code&gt;myForm.ToWinFormsForm()&lt;/code&gt;, &lt;code&gt;MajorsilenceFormsPresenter&lt;/code&gt; — பின்னர் அனைத்தும் port செய்யப்பட்டதும் ஹோஸ்டை Avalonia அல்லது Uno க்கு மாற்ற இது உள்ளது. Gestures இல்லை, &lt;code&gt;IWebViewFactory&lt;/code&gt; இல்லை. Avalonia ஹோஸ்டில் முழுப் படிவங்களை இணைக்கும் பழைய &lt;code&gt;WindowsFormsInterop&lt;/code&gt; இலிருந்து இது வேறுபட்டது.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;WPF&lt;/strong&gt; (&lt;code&gt;Majorsilence.Forms.Wpf&lt;/code&gt;) WPF பயன்பாடுகளுக்கு அதே வடிவத்தையும் நோக்கத்தையும் கொண்டுள்ளது: ஒரு உண்மையான WPF &lt;code&gt;Window&lt;/code&gt;, &lt;code&gt;WriteableBitmap&lt;/code&gt; மூலம் காட்சிப்படுத்தல், &lt;code&gt;ToWpfElement()&lt;/code&gt; மற்றும் &lt;code&gt;ToWpfWindow()&lt;/code&gt;. &lt;code&gt;Platform.Backend = new Majorsilence.Forms.Wpf.WpfPlatformBackend ();&lt;/code&gt; மூலம் இதைத் தேர்ந்தெடுங்கள்.&lt;/p&gt;&lt;p&gt;Avalonia, WinForms மற்றும் GTK 4 உண்மையான OS-மட்ட modal உரையாடல் சாளரங்களை வழங்குகின்றன; Uno ஒரு சுயாதீன window ஐத் திறக்கிறது, எனவே அங்கு &lt;code&gt;Form.ShowDialog(parent)&lt;/code&gt; ஐப் பயன்படுத்துங்கள்.&lt;/p&gt;&lt;h2 id=&quot;net-framework-48-and-netstandard20&quot;&gt;.NET Framework 4.8 மற்றும் netstandard2.0&lt;/h2&gt;&lt;p&gt;மைய packages — &lt;code&gt;Majorsilence.Forms&lt;/code&gt;, &lt;code&gt;.Drawing.Common&lt;/code&gt;, &lt;code&gt;.Telerik&lt;/code&gt; — இப்போது &lt;code&gt;net8.0&lt;/code&gt;, &lt;code&gt;net10.0&lt;/code&gt; &lt;strong&gt;மற்றும் &lt;code&gt;netstandard2.0&lt;/code&gt;&lt;/strong&gt; ஐ இலக்காகக் கொள்கின்றன; WinForms மற்றும் WPF பின்தளங்கள் &lt;code&gt;net48&lt;/code&gt; ஐயும் சேர்க்கின்றன. எனவே ஒரு .NET Framework 4.8 பயன்பாடு முதலில் நவீன .NET க்கு மாறாமலேயே Majorsilence.Forms கட்டுப்பாடுகளை host செய்ய முடியும்; இது பல இடம்பெயர்த்தல்களில் இருந்த ஒரு வரிசைப் பிரச்சினையை (ordering problem) நீக்குகிறது.&lt;/p&gt;&lt;h2 id=&quot;the-behaviour-gap-audit&quot;&gt;நடத்தை இடைவெளி தணிக்கை&lt;/h2&gt;&lt;p&gt;இரண்டு API-மேற்பரப்பு இடைவெளித் திட்டங்களும் (WinForms மற்றும் GDI+) &lt;strong&gt;பூஜ்ஜியத்தில்&lt;/strong&gt; உள்ளன: upstream இல் உள்ள ஒவ்வொரு member உம் அறிவிக்கப்பட்டுள்ளது. அது எப்போதுமே குறைவான சுவாரஸ்யமான பாதி. இருக்கும் ஆனால் யாரும் படிக்காத ஒரு மதிப்பைச் சேமிக்கும், அல்லது யாரும் தூண்டாத ஒரு நிகழ்வை வெளிப்படுத்தும் ஒரு member, உங்கள் இடம்பெயர்க்கப்பட்ட பயன்பாட்டை compile ஆக விடுகிறது, பின்னர் அமைதியாக எதுவும் செய்யாமல் இருக்கிறது.&lt;/p&gt;&lt;p&gt;எனவே 2026-08-25 அன்று, பன்னிரண்டு பகுதிகளிலான ஒரு தணிக்கை ஒவ்வொரு பகுதியையும் upstream செயலாக்கத்துடன் ஒப்பிட்டு, நடத்தை வேறுபட்ட &lt;strong&gt;483 கண்டுபிடிப்புகளைப்&lt;/strong&gt; பதிவு செய்தது. அதன் பின்னர் கட்டங்கள் 0–4 உம் பெரும்பாலான கட்டுப்பாட்டுக் குடும்பங்களுக்கான மாற்றங்களும் சேர்க்கப்பட்டுள்ளன. இப்போது உண்மையாகச் செயல்படும் உறுதியான விஷயங்கள்: &lt;code&gt;ProcessCmdKey&lt;/code&gt; முன்-செயலாக்கச் சங்கிலி, ஒற்றை focus/validation கட்டுப்பாட்டுப் புள்ளி, client area க்கு வெளியே title bar, &lt;code&gt;AutoScaleMode.Font&lt;/code&gt; உண்மையில் அளவிடுதல் (scaling), நேரடி data binding (&lt;code&gt;CurrencyManager&lt;/code&gt;, &lt;code&gt;BindingNavigator&lt;/code&gt;), &lt;code&gt;ListView.View = Details&lt;/code&gt;, upstream வரிசையில் படிவ வாழ்க்கைச் சுழற்சி (Load → VisibleChanged → Activated, Shown posted), DataGridView நெடுவரிசை மறுவரிசைப்படுத்தல், உரைக் கட்டுப்பாடுகளில் Ctrl+Z, system tray இல் &lt;code&gt;NotifyIcon&lt;/code&gt;, &lt;code&gt;Application.AddMessageFilter&lt;/code&gt;, மற்றும் ஒரு படிவத்தை dispose செய்யும்போது அதன் கட்டுப்பாடுகளும் dispose ஆகுதல்.&lt;/p&gt;&lt;p&gt;வெற்றுப் பகுதியும் (hollow surface) இப்போது &lt;em&gt;அளவிடப்படுகிறது&lt;/em&gt;: அறியப்பட்ட no-op methods, செயலற்ற நிகழ்வுகள் (inert events) மற்றும் சேமிப்பு-மட்டும் properties ஆகியவற்றை baseline கோப்புகள் நிலைப்படுத்துகின்றன; எனவே அவற்றில் சேர்ப்பது தற்செயலாக அல்லாமல் உணர்வுபூர்வமான செயலாகிறது. Stub கொள்கை மாறவில்லை — no-op அல்லது default ஐத் திருப்புதல், ஒருபோதும் &lt;code&gt;NotImplementedException&lt;/code&gt; இல்லை.&lt;/p&gt;&lt;h2 id=&quot;logical-units-the-one-thing-you-must-do&quot;&gt;தருக்க அலகுகள்: நீங்கள் கட்டாயம் செய்ய வேண்டிய ஒரு விஷயம்&lt;/h2&gt;&lt;p&gt;2026-10-01 அன்று &lt;code&gt;ClientRectangle&lt;/code&gt;, &lt;code&gt;ClientSize&lt;/code&gt; மற்றும் வரைதல் canvas (&lt;code&gt;OnPaint&lt;/code&gt;, &lt;code&gt;Paint&lt;/code&gt;, &lt;code&gt;e.ClipRectangle&lt;/code&gt;, &lt;code&gt;e.Canvas&lt;/code&gt;) ஆகியவை &lt;code&gt;Width&lt;/code&gt;/&lt;code&gt;Height&lt;/code&gt;/&lt;code&gt;Bounds&lt;/code&gt; மற்றும் &lt;code&gt;MouseEventArgs&lt;/code&gt; உடன் பொருந்தும் வகையில் &lt;strong&gt;தருக்க அலகுகளாக (logical units)&lt;/strong&gt; மாறின. Framework உங்களுக்காக canvas ஐக் காட்சித்திரைக்கு ஏற்ப அளவிடுகிறது.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ஒரு custom கட்டுப்பாடு &lt;code&gt;e.Graphics.ScaleTransform (e.Scaling, e.Scaling)&lt;/code&gt; ஐ அழைத்திருந்தால், அதை நீக்குங்கள்&lt;/strong&gt; — இல்லையெனில் வரைதல் இப்போது இரண்டு முறை அளவிடப்படும். சாதனப் பிக்சல்களை (device pixels) இன்னும் &lt;code&gt;Scaled*&lt;/code&gt; குடும்பம் (&lt;code&gt;ScaledWidth&lt;/code&gt;, &lt;code&gt;ScaledBounds&lt;/code&gt;, …), &lt;code&gt;PaintEventArgs.Scaling&lt;/code&gt; மற்றும் &lt;code&gt;LogicalToDeviceUnits&lt;/code&gt; மூலம் அணுகலாம். ஒரே விதிவிலக்கு owner-draw நிகழ்வுகள் (&lt;code&gt;DrawItem&lt;/code&gt;, &lt;code&gt;DrawNode&lt;/code&gt;, &lt;code&gt;CellPainting&lt;/code&gt;); அவை இன்னும் சாதனப்-பிக்சல் எல்லைகளையே தருகின்றன. பழைய நடத்தையைச் சார்ந்திருக்கும் எதையும் கண்டறிய உங்கள் சோதனைகளை &lt;code&gt;MF_HEADLESS_SCALE=2&lt;/code&gt; உடன் இயக்குங்கள்.&lt;/p&gt;&lt;h2 id=&quot;browser-and-mobile&quot;&gt;Browser மற்றும் mobile&lt;/h2&gt;&lt;p&gt;&lt;code&gt;net10.0-browser&lt;/code&gt;, &lt;code&gt;-android&lt;/code&gt; மற்றும் &lt;code&gt;-ios&lt;/code&gt; இல் Avalonia பின்தளம் &lt;code&gt;CanRunModalLoop = false&lt;/code&gt; எனத் தெரிவிக்கிறது; தடுக்கும் (blocking) அழைப்புகள் — &lt;code&gt;Form.ShowDialog&lt;/code&gt;, &lt;code&gt;MessageBox.Show&lt;/code&gt;, கோப்புத் தேர்விகள், &lt;code&gt;TaskDialog.ShowDialog&lt;/code&gt;, &lt;code&gt;VbInteraction.MsgBox&lt;/code&gt;/&lt;code&gt;InputBox&lt;/code&gt;, &lt;code&gt;RadMessageBox.Show&lt;/code&gt; — இப்போது hang ஆவதற்குப் பதிலாக, எதுவும் காட்டப்படுவதற்கு &lt;em&gt;முன்பே&lt;/em&gt; async இணையின் பெயரைக் குறிப்பிட்டு &lt;code&gt;PlatformNotSupportedException&lt;/code&gt; ஐ எறிகின்றன. Async வடிவங்கள் (&lt;code&gt;ShowDialogAsync&lt;/code&gt;, &lt;code&gt;MessageBox.ShowAsync&lt;/code&gt;, &lt;code&gt;FileDialog.ShowDialogAsync&lt;/code&gt;, …) ஒவ்வொரு ஹோஸ்டிலும் வேலை செய்கின்றன; எனவே பொதுவான வழக்கம் &lt;code&gt;await&lt;/code&gt; உடன் கூடிய ஒரு &lt;code&gt;async void&lt;/code&gt; handler. மைய package இல் உள்ள ஒரு Roslyn analyzer இவற்றை முன்கூட்டியே கண்டறிகிறது — &lt;code&gt;MFB001&lt;/code&gt; தடுக்கும் modal அழைப்பு, &lt;code&gt;MFB002&lt;/code&gt; ஒரு Task மீது ஒத்திசைவான (synchronous) காத்திருப்பு, &lt;code&gt;MFB003&lt;/code&gt; &lt;code&gt;Thread.Sleep&lt;/code&gt; — ஒவ்வொன்றுக்கும் ஒரு code fix உண்டு; browser TFMs களுக்கு அல்லது &lt;code&gt;.editorconfig&lt;/code&gt; இல் &lt;code&gt;majorsilence_forms.browser_target = true&lt;/code&gt; இருக்கும்போது செயல்படும்.&lt;/p&gt;&lt;p&gt;Browser இலக்கு canvas க்கு அருகில் ஒரு &lt;strong&gt;அணுகல்தன்மை DOM (accessibility DOM)&lt;/strong&gt; ஐயும் பராமரிக்கிறது: ஒவ்வொரு கட்டுப்பாட்டுக்கும் ARIA role, name, state மற்றும் bounds கொண்ட, ஒளிபுகும் (transparent), click-through ஆன ஒரு element; இது framework இன் சொந்தத் தானியக்க மரத்திலிருந்து (automation tree) கட்டப்படுகிறது. திரை வாசிப்பான்கள் (screen readers), பக்கத்தில் தேடல் (find-in-page) மற்றும் DOM அடிப்படையிலான சோதனைக் கருவிகள் இப்போது UI ஐப் பார்க்க முடியும்.&lt;/p&gt;&lt;p&gt;Android மற்றும் iOS இல் &lt;code&gt;TextBox&lt;/code&gt; focus பெறும்போது திரை keyboard எழுகிறது, &lt;code&gt;TextBoxBase.InputKind&lt;/code&gt; keyboard வகையைத் தேர்ந்தெடுக்கிறது, safe-area insets &lt;code&gt;Form.SafeAreaPadding&lt;/code&gt; மூலம் பொருந்துகின்றன, &lt;code&gt;WindowBase.BackRequested&lt;/code&gt; Android back பொத்தானைக் கையாளுகிறது. நேர்மையான நிலை: Android இல் ஓர் ஆரம்ப உண்மைச்-சாதனச் சோதனை நடந்துள்ளது (boot, taps, render scaling, touch scroll ஆகியவை hardware இல் உறுதிப்படுத்தப்பட்டன); keyboard, safe-area மற்றும் rotation ஆகியவை unit-test மட்டுமே செய்யப்பட்டுள்ளன. iOS CI உண்மையான head ஐ compile செய்து ஒரு simulator smoke check இல் தொடங்குகிறது; ஆனால் யாரும் அதை interactive ஆக இயக்கவில்லை, அந்த job இன்னும் &lt;code&gt;continue-on-error&lt;/code&gt; ஆகவே உள்ளது.&lt;/p&gt;&lt;p&gt;அதனுடன் தொலைபேசி-பாணி layout கட்டுப்பாடுகளும் வந்தன: &lt;code&gt;StackPanel&lt;/code&gt;, &lt;code&gt;Card&lt;/code&gt;, &lt;code&gt;RichListBox&lt;/code&gt; (பல-வரி templated வரிசைகள்) மற்றும் &lt;code&gt;NavigationHost&lt;/code&gt; (back பொத்தானுடன் கூடிய ஒரு page stack).&lt;/p&gt;&lt;h2 id=&quot;css-theming-and-theme-studio&quot;&gt;CSS தீம்கள் மற்றும் Theme Studio&lt;/h2&gt;&lt;p&gt;தீம்களை இப்போது கண்டிப்பான, ஆவணப்படுத்தப்பட்ட CSS துணைத்தொகுப்பாக எழுதலாம்: &lt;code&gt;@theme &quot;Ocean&quot; extends Dark;&lt;/code&gt;, ஒவ்வொரு &lt;code&gt;Theme&lt;/code&gt; property க்கும் ஒன்றாக &lt;code&gt;:root&lt;/code&gt; tokens, &lt;code&gt;Button:hover { … }&lt;/code&gt; போன்ற கட்டுப்பாட்டு-வகை விதிகள், &lt;code&gt;Type::part&lt;/code&gt; மூலம் பகுதிகள். Parser ஒருபோதும் அமைதியாகத் தோல்வியடைவதில்லை — &lt;code&gt;ThemeStyleSheet.Parse&lt;/code&gt; diagnostics ஐச் சேகரிக்கிறது. &lt;code&gt;Theme.LoadFromCssFile&lt;/code&gt; மூலம், அல்லது &lt;code&gt;Theme.RegisterThemeCssFromFile&lt;/code&gt; + &lt;code&gt;Theme.ApplyTheme (&quot;Ocean&quot;)&lt;/code&gt; மூலம் ஏற்றுங்கள்; &lt;code&gt;Theme.ExportCss&lt;/code&gt; மூலம் ஏற்றுமதி செய்யுங்கள். Telerik compat அடுக்கு உட்பட ஒவ்வொரு கட்டுப்பாட்டுக்கும் ஒரு selector உள்ளது; பழைய &lt;code&gt;&amp;lt;Theme&amp;gt;&lt;/code&gt; XML இன்னும் வேலை செய்கிறது.&lt;/p&gt;&lt;p&gt;இரண்டு துணை packages &lt;em&gt;அதே&lt;/em&gt; sheet ஐ மற்ற ஹோஸ்ட்களுக்கும் பொருத்துகின்றன: &lt;code&gt;Majorsilence.Forms.Theming.WinForms&lt;/code&gt; உண்மையான &lt;code&gt;System.Windows.Forms&lt;/code&gt; கட்டுப்பாடுகளுக்கு மீண்டும் பாணியிடுகிறது (Windows மட்டும்), &lt;code&gt;Majorsilence.Forms.Theming.Avalonia&lt;/code&gt; native Avalonia Fluent கட்டுப்பாடுகளுக்கு மீண்டும் பாணியிடுகிறது; எனவே ஒரே CSS கோப்பு, கலப்பு இடம்பெயர்த்தல் பயன்பாட்டுக்குத் தீம் அளிக்க முடியும். &lt;code&gt;samples/ThemeStudio&lt;/code&gt; முன்னோட்டமும் diagnostics உம் கொண்ட ஒரு நேரடி editor; முன்கூட்டியே build செய்யப்பட்ட binaries GitHub Releases இல் இணைக்கப்பட்டுள்ளன.&lt;/p&gt;&lt;h2 id=&quot;mvvm-essentials-animation&quot;&gt;MVVM, Essentials, animation&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Majorsilence.Forms.Mvvm&lt;/code&gt; என்பது &lt;code&gt;INotifyPropertyChanged&lt;/code&gt; மற்றும் &lt;code&gt;ICommand&lt;/code&gt; மீதான trim- மற்றும் AOT-பாதுகாப்பான இணைப்பு; reflection இல்லை, toolkit சார்பு இல்லை: &lt;code&gt;viewModel.Observe (nameof (VM.Count), vm =&amp;gt; vm.Count, …)&lt;/code&gt;, இருவழி &lt;code&gt;BindText&lt;/code&gt;/&lt;code&gt;BindChecked&lt;/code&gt;/&lt;code&gt;BindSelectedIndex&lt;/code&gt;/&lt;code&gt;BindValue&lt;/code&gt;, &lt;code&gt;BindCommand&lt;/code&gt;, மேலும் அனைத்தையும் dispose செய்ய ஒரு &lt;code&gt;BindingScope&lt;/code&gt;. இது CommunityToolkit.Mvvm உடன் இணைந்து வேலை செய்கிறது.&lt;/p&gt;&lt;p&gt;&lt;code&gt;Majorsilence.Forms.Essentials&lt;/code&gt; தளம்-சார்ந்த திறன்களை மையத்துக்கு வெளியே வைக்கிறது: &lt;code&gt;SecureStorage&lt;/code&gt;, &lt;code&gt;Speech&lt;/code&gt; உரையிலிருந்து-பேச்சு (text-to-speech), &lt;code&gt;Launcher.OpenAsync&lt;/code&gt; (http/https/mailto/tel/sms) மற்றும் &lt;code&gt;FileSystem.OpenAppPackageFileAsync&lt;/code&gt;. அனைத்தும் no-op ஆகத் தரம் குறைகின்றன; &lt;code&gt;IsSupported&lt;/code&gt; ஐச் சரிபாருங்கள்.&lt;/p&gt;&lt;p&gt;&lt;code&gt;control.RequestAnimationFrame&lt;/code&gt; உம் &lt;code&gt;Majorsilence.Forms.Animation&lt;/code&gt; உம் (&lt;code&gt;Tween&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;Easing&lt;/code&gt;, &lt;code&gt;Animator&lt;/code&gt;) Avalonia இல் காட்சித்திரையுடன் ஒத்திசைந்த animation ஐயும், Headless இல் கைமுறைக் கடிகாரத்தையும் (manual clock) வழங்குகின்றன.&lt;/p&gt;&lt;h2 id=&quot;tooling&quot;&gt;கருவிகள்&lt;/h2&gt;&lt;ul&gt;  &lt;li&gt;MCP server ஒரு வெளியிடப்பட்ட dotnet tool: &lt;code&gt;dotnet tool install -g Majorsilence.Forms.Mcp&lt;/code&gt;, பின்னர் &lt;code&gt;claude mcp add majorsilence-ui -- majorsilence-mcp --port 4444&lt;/code&gt;. இது &lt;code&gt;ui_snapshot&lt;/code&gt;, &lt;code&gt;ui_find&lt;/code&gt;, &lt;code&gt;ui_click&lt;/code&gt;, &lt;code&gt;ui_type&lt;/code&gt;, &lt;code&gt;ui_wait_for&lt;/code&gt; மற்றும் &lt;code&gt;ui_screenshot&lt;/code&gt; ஐ வெளிப்படுத்துகிறது; உங்கள் பயன்பாட்டின் &lt;code&gt;WebDriverServer&lt;/code&gt; உடன் தொடர்பு கொள்கிறது.&lt;/li&gt;  &lt;li&gt;&lt;code&gt;samples/AutomationTarget&lt;/code&gt; என்பது கருவிகளைக் கற்றுக்கொள்வதற்காக வேண்டுமென்றே சிக்கலாக்கப்பட்ட ஒரு சிறிய பயன்பாடு (clicks ஐ மறுக்கும் கட்டுப்பாடுகள், பெயரிடப்படாத ஒன்று). Custom-painted கட்டுப்பாடுகள் &lt;code&gt;IAutomationStateProvider&lt;/code&gt; மூலம் மதிப்பையும் நிலையையும் வெளியிடுகின்றன.&lt;/li&gt;  &lt;li&gt;Migrator இப்போது dotnet tool ஆக &lt;strong&gt;மட்டுமே&lt;/strong&gt; வழங்கப்படுகிறது (&lt;code&gt;dotnet tool install -g Majorsilence.Forms.Migrator&lt;/code&gt;); self-contained binaries இனி வெளியீடுகளுடன் இணைக்கப்படுவதில்லை. புதிய switches: &lt;code&gt;--map&lt;/code&gt;, &lt;code&gt;--dual-build&lt;/code&gt;, &lt;code&gt;--strict&lt;/code&gt;, &lt;code&gt;--dry-run --diff&lt;/code&gt;.&lt;/li&gt;  &lt;li&gt;&lt;code&gt;Majorsilence.Forms.WinFormsShims.Compat&lt;/code&gt; என்பது Majorsilence.Forms ஐ அடிப்படையாகக் கொண்ட &lt;code&gt;System.Windows.Forms&lt;/code&gt; மற்றும் &lt;code&gt;System.Drawing&lt;/code&gt; namespaces ஐ உருவாக்கும் ஒரு proof-of-concept source generator; இதனால் மாற்றப்படாத WinForms மூலக் குறியீடு — &lt;code&gt;Designer.cs&lt;/code&gt; உட்பட — compile ஆகிறது. பொது API WinForms types ஐப் பயன்படுத்தும் கட்டுப்பாட்டு நூலகங்களுக்கானது. PoC நிலை; &lt;code&gt;samples/WinFormsCompatDemo&lt;/code&gt; ஐப் பாருங்கள்.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;upgrade-notes&quot;&gt;மேம்படுத்தல் குறிப்புகள்&lt;/h2&gt;&lt;ul&gt;  &lt;li&gt;&lt;strong&gt;26.9.0&lt;/strong&gt; இல் பதிப்பை நிலைப்படுத்துங்கள். இந்தத் திட்டம் இன்னும் பீட்டா நிலையில் உள்ளது; இன்னும் visual designer இல்லை.&lt;/li&gt;  &lt;li&gt;Custom paint குறியீட்டில் உள்ள எந்த &lt;code&gt;ScaleTransform (e.Scaling, e.Scaling)&lt;/code&gt; ஐயும் நீக்குங்கள் (மேலே பாருங்கள்).&lt;/li&gt;  &lt;li&gt;வார்ப்புரு package id &lt;code&gt;Majorsilence.Forms.Templates&lt;/code&gt;; &lt;code&gt;dotnet new install Majorsilence.Forms.Templates&lt;/code&gt; மூலம் நிறுவப்படுகிறது. &lt;code&gt;dotnet new majorsilenceforms&lt;/code&gt; இப்போது பகிரப்பட்ட UI நூலகம் மற்றும் ஒரு desktop head உடன் கூடிய solution ஐ உருவாக்குகிறது; &lt;code&gt;--IncludeAndroid&lt;/code&gt;, &lt;code&gt;--IncludeiOS&lt;/code&gt; மற்றும் &lt;code&gt;--IncludeWasm&lt;/code&gt; heads ஐச் சேர்க்கின்றன.&lt;/li&gt;  &lt;li&gt;உடைக்கும் மாற்றங்கள் (breaking changes) &lt;code&gt;MIGRATION.md&lt;/code&gt; இல் பட்டியலிடப்பட்டுள்ளன: &lt;code&gt;SplitContainer.Orientation&lt;/code&gt;, &lt;code&gt;TreeViewDrawMode.OwnerDrawContent&lt;/code&gt;, நிகழ்வு delegate types இப்போது WinForms உடன் பொருந்துகின்றன, மேலும் gradient/hatch brushes GDI+ உடன் பொருந்தும்படி நகர்த்தப்பட்டன.&lt;/li&gt;  &lt;li&gt;Browser, Android மற்றும் iOS இல், தடுக்கும் உரையாடல் சாளர அழைப்புகளை அவற்றின் async இணைகளால் மாற்றுங்கள்; அவற்றைக் கண்டறிய &lt;code&gt;MFB001&lt;/code&gt;–&lt;code&gt;MFB003&lt;/code&gt; ஐப் பயன்படுத்துங்கள்.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;where-to-read-more&quot;&gt;மேலும் எங்கே படிக்கலாம்&lt;/h2&gt;&lt;ul&gt;  &lt;li&gt;&lt;a href=&quot;/ta/backends/&quot;&gt;Platform பின்தளங்கள்&lt;/a&gt; மற்றும் &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/docs/backends.md&quot;&gt;&lt;code&gt;docs/backends.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;/ta/getting-started/&quot;&gt;தொடங்குதல்&lt;/a&gt; மற்றும் &lt;a href=&quot;/ta/migration/&quot;&gt;இடம்பெயர்த்தல்&lt;/a&gt; / &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/MIGRATION.md&quot;&gt;&lt;code&gt;MIGRATION.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/docs/theming.md&quot;&gt;&lt;code&gt;docs/theming.md&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/docs/mvvm.md&quot;&gt;&lt;code&gt;docs/mvvm.md&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/docs/mobile-layout.md&quot;&gt;&lt;code&gt;docs/mobile-layout.md&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/docs/animation.md&quot;&gt;&lt;code&gt;docs/animation.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/docs/behaviour-gap-plan.md&quot;&gt;&lt;code&gt;docs/behaviour-gap-plan.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;/ta/automation/&quot;&gt;தானியக்கம் (Automation)&lt;/a&gt; மற்றும் &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/docs/automation.md&quot;&gt;&lt;code&gt;docs/automation.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;/ta/samples/&quot;&gt;மாதிரிகள்&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content>
    <author><name>Majorsilence</name></author>
  </entry>
  <entry>
    <title>Majorsilence.Forms அறிமுகம்</title>
    <id>https://forms.majorsilence.com/ta/blog/2026/07/21/introducing-majorsilence-forms/</id>
    <link href="https://forms.majorsilence.com/ta/blog/2026/07/21/introducing-majorsilence-forms/" rel="alternate" type="text/html"/>
    <published>2026-07-21T15:00:00+00:00</published>
    <updated>2026-07-21T15:00:00+00:00</updated>
    <summary type="text">Majorsilence.Forms அறிமுகம் — .NET க்கான திறந்த மூல பல்தள WinForms நூலகம்: உங்கள் படிவங்கள் (Forms), கட்டுப்பாடுகள் (controls) மற்றும் Designer கோப்புகளை அப்படியே வைத்துக்கொண்டு, அதே பயன்பாட்டை மீண்டும் எழுதாமல் Windows, macOS மற்றும் Linux இல் இயக்குங்கள்.</summary>
    <content type="html">&lt;p&gt;ஒரு WinForms பயன்பாட்டை Windows-மட்டும் desktop இலிருந்து வெளியே கொண்டுசெல்வது என்பது பாரம்பரியமாக அடியிலிருந்து முழுமையாக மீண்டும் எழுதுவதையே (rewrite) குறித்தது: XAML, கட்டாய MVVM மறுசீரமைப்பு, அல்லது web. அது செலவு மிக்கது, ஆபத்தானது; பெரும்பாலும் ஒரு புதிய தோற்றம் மட்டுமே தேவைப்படும் codebase க்காக, பல ஆண்டுகளாகச் சரியாக இயங்கும் வணிகத் தர்க்கத்தையும் (business logic) UX ஐயும் அது தூக்கி எறிகிறது.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Majorsilence.Forms&lt;/strong&gt; வேறுபட்ட அணுகுமுறையை எடுக்கிறது: அது WinForms API மேற்பரப்பைப் பிரதிபலிக்கிறது — &lt;code&gt;Form&lt;/code&gt;கள், கட்டுப்பாடுகள், நிகழ்வு கையாளிகள் (event handlers), &lt;code&gt;*.Designer.cs&lt;/code&gt; code-behind கூட — மேலும் ஒரு இணக்க அடுக்கையும் (compatibility layer) வழங்குகிறது; இதனால் ஏற்கனவே உள்ள படிவங்களும் கட்டுப்பாடுகளும் மிகக் குறைந்த மாற்றங்களுடன் இடம்பெயர்கின்றன. நிரலாக்க மாதிரி (programming model) மாறுவதில்லை; அது இயங்கும் இடம் மட்டுமே மாறுகிறது.&lt;/p&gt;&lt;h2 id=&quot;how-its-built&quot;&gt;இது எவ்வாறு கட்டமைக்கப்பட்டுள்ளது&lt;/h2&gt;&lt;p&gt;ஒவ்வொரு கட்டுப்பாடும் &lt;a href=&quot;https://github.com/mono/SkiaSharp&quot;&gt;SkiaSharp&lt;/a&gt; மூலம் ஒரு &lt;code&gt;SKSurface&lt;/code&gt; இல் வரையப்படுகிறது (rendering); அது மாற்றக்கூடிய ஒரு ஹோஸ்ட் பின்தளத்தின் (host backend) மேல் அமர்ந்துள்ளது:&lt;/p&gt;&lt;ul&gt;  &lt;li&gt;&lt;strong&gt;Avalonia&lt;/strong&gt; (இயல்புநிலை) — Windows, macOS, Linux desktop ஐ நேரடியாக ஆதரிக்கிறது; அதனுடைய சொந்த Android, iOS மற்றும் Browser (WebAssembly) இலக்குகள் mobile மற்றும் web க்கும் ஒரு பாதையாக உள்ளன.&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;Uno Platform&lt;/strong&gt; — மிகப் பரந்த எட்டல்: desktop, iOS, Android மற்றும் WebAssembly.&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;Headless&lt;/strong&gt; — CI மற்றும் தானியங்கிச் சோதனைகளுக்கான, எந்தச் சார்புகளும் இல்லாத offscreen வரைதல்.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;மைய &lt;code&gt;Majorsilence.Forms&lt;/code&gt; assembly எந்த windowing toolkit ஐயும் குறிப்பிடுவதில்லை — SkiaSharp ஐ மட்டுமே. பின்தளங்கள் தனித்தனி assemblies; அவை &lt;code&gt;IPlatformBackend&lt;/code&gt; மற்றும் &lt;code&gt;IWindowBackend&lt;/code&gt; என்ற இரண்டு சிறிய interfaces இல் இணைகின்றன. அந்த இணைப்புக்கோடுதான் (seam), பயன்பாட்டுக் குறியீட்டில் எந்த மாற்றமும் இல்லாமல், அதே பயன்பாடு இன்று Avalonia வையும் நாளை Uno வையும் இலக்காகக் கொள்ள அனுமதிக்கிறது. மேலும் அறிய &lt;a href=&quot;/ta/backends/&quot;&gt;Platform பின்தளங்கள்&lt;/a&gt; பக்கத்தைப் பாருங்கள்.&lt;/p&gt;&lt;h2 id=&quot;who-its-for&quot;&gt;இது யாருக்கானது&lt;/h2&gt;&lt;p&gt;இன்று Windows-மட்டும் இயங்கும் ஒரு WinForms codebase உங்களிடம் இருந்து, பல ஆண்டு நீளும் மீண்டும் எழுதுதலைத் தொடங்குவதற்குப் பதிலாக வேகத்தைத் தக்கவைத்துக்கொள்ள — உங்கள் கட்டுப்பாடுகள், உங்கள் குழுவின் பழக்கப்பட்ட அனுபவம், உங்கள் வணிகத் தர்க்கம் ஆகியவற்றை மீண்டும் பயன்படுத்த — விரும்பினால், இது உங்களுக்காகவே உருவாக்கப்பட்டது.&lt;/p&gt;&lt;p&gt;இந்தத் திட்டம் ஆரம்ப நிலையில் உள்ளது: API நிலைப்பட்டு வருகிறது; WinForms இன் ஒவ்வொரு மூலையும் இன்னும் உள்ளடக்கப்படவில்லை. புதிய பல்தள வணிக (LOB) பயன்பாடுகளுக்கு இது ஏற்கனவே உறுதியான தேர்வு; நீங்கள் பதிப்பை நிலைப்படுத்தினால் (pin your version), உண்மையான production பயன்பாடுகளை இடம்பெயர்த்தலுக்கும் பொருத்தமானது. இன்று எவை செயல்படுத்தப்பட்டுள்ளன, எவை stub ஆக உள்ளன என்பதைத் துல்லியமாக அறிய &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/COMPATIBILITY_MATRIX.md&quot;&gt;இணக்க அட்டவணையைப்&lt;/a&gt; பாருங்கள்.&lt;/p&gt;&lt;h2 id=&quot;try-it&quot;&gt;முயன்று பாருங்கள்&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;dotnet new --install MajorsilenceForms.Templatesdotnet new majorsilenceformsdotnet run&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;அல்லது ஒரு உண்மையான பயன்பாட்டை ஆராயுங்கள் — &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/tree/main/samples/Explorer&quot;&gt;&lt;code&gt;samples/Explorer&lt;/code&gt;&lt;/a&gt; ஒரு முழுமையான Windows Explorer நகல்; &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/tree/main/samples/Outlaw&quot;&gt;&lt;code&gt;samples/Outlaw&lt;/code&gt;&lt;/a&gt; ஒரு Outlook நகல். இரண்டும் அதே கட்டுப்பாட்டுத் தொகுப்பில், எந்த மாற்றமும் இல்லாமல், பல தளங்களில் இயங்குகின்றன.&lt;/p&gt;&lt;p&gt;உங்கள் முதல் பயன்பாட்டை உருவாக்க &lt;a href=&quot;/ta/getting-started/&quot;&gt;தொடங்குதல்&lt;/a&gt; பக்கத்தைப் பாருங்கள்.&lt;/p&gt;</content>
    <author><name>Majorsilence</name></author>
  </entry>
  <entry>
    <title>Platform பின்தளங்கள்: Avalonia, Uno மற்றும் Headless</title>
    <id>https://forms.majorsilence.com/ta/blog/2026/07/21/platform-backends-avalonia-uno-headless/</id>
    <link href="https://forms.majorsilence.com/ta/blog/2026/07/21/platform-backends-avalonia-uno-headless/" rel="alternate" type="text/html"/>
    <published>2026-07-21T11:00:00+00:00</published>
    <updated>2026-07-21T11:00:00+00:00</updated>
    <summary type="text">பல்தள WinForms எவ்வாறு Avalonia, Uno Platform மற்றும் ஒரு headless Skia மேற்பரப்பில் இயங்குகிறது: ஒவ்வொரு கட்டுப்பாடும் SkiaSharp மூலம் வரையப்படுகிறது; அடியில் உள்ள windowing toolkit மாற்றக்கூடிய ஒரு ஹோஸ்ட் மட்டுமே.</summary>
    <content type="html">&lt;p&gt;Majorsilence.Forms &lt;strong&gt;தனக்குத் தேவையான அனைத்து வரைதலையும் தானே&lt;/strong&gt; SkiaSharp மூலம் செய்கிறது. ஒவ்வொரு கட்டுப்பாடும் (control) ஒரு &lt;code&gt;SKSurface&lt;/code&gt;/&lt;code&gt;SKCanvas&lt;/code&gt; இல் வரைகிறது; அடியில் உள்ள windowing toolkit ஒரு &lt;em&gt;ஹோஸ்ட் (host)&lt;/em&gt; மட்டுமே — அது native windows ஐ உருவாக்குகிறது, message loop ஐ இயக்குகிறது, உள்ளீட்டை (input) வழங்குகிறது, மேலும் Skia மேற்பரப்பைத் திரையில் காட்டுகிறது. அந்தப் பிரிப்புதான், இன்று மிகவும் வேறுபட்ட மூன்று toolkits இல் அதே கட்டுப்பாட்டுத் தொகுப்பை இயங்க அனுமதிக்கிறது.&lt;/p&gt;&lt;h2 id=&quot;the-seam&quot;&gt;இணைப்புக்கோடு (seam)&lt;/h2&gt;&lt;p&gt;ஒரு ஹோஸ்ட் வழங்க வேண்டிய அனைத்தையும் இரண்டு interfaces வரையறுக்கின்றன:&lt;/p&gt;&lt;p&gt;&lt;code&gt;IPlatformBackend&lt;/code&gt; பயன்பாட்டு மட்ட சேவைகளை உள்ளடக்குகிறது — dispatcher (&lt;code&gt;Post&lt;/code&gt;/&lt;code&gt;Invoke&lt;/code&gt;), timers, clipboard, திரைகளைப் பட்டியலிடுதல் (screen enumeration), மற்றும் modal loop. &lt;code&gt;IWindowBackend&lt;/code&gt; ஒரு தனி native window ஐ உள்ளடக்குகிறது — அளவும் நிலையும், show/hide/close, cursor, decorations, கோப்பு உரையாடல் சாளரங்கள் (file dialogs). உள்ளீடும் வரைதல் கோரிக்கைகளும் &lt;em&gt;எதிர்&lt;/em&gt; திசையில் பாய்கின்றன: பின்தளம் window இன் நடுநிலையான &lt;code&gt;RenderFrame(SKCanvas, …)&lt;/code&gt; மற்றும் &lt;code&gt;Handle*&lt;/code&gt; methods ஐ நேரடியாக அழைக்கிறது. எந்த platform type உம் — Avalonia type இல்லை, WinUI type இல்லை — மைய Majorsilence.Forms குறியீட்டுக்குள் ஒருபோதும் நுழைவதில்லை.&lt;/p&gt;&lt;h2 id=&quot;three-backends-today&quot;&gt;இன்று மூன்று பின்தளங்கள்&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;Majorsilence.Forms.Avalonia&lt;/code&gt;&lt;/strong&gt; இயல்புநிலை — Avalonia 12, எந்த அமைப்பும் இல்லாமல் Windows, macOS மற்றும் Linux desktop ஐ வழங்குகிறது. அதைக் குறிப்பிடுங்கள் (reference), &lt;code&gt;Application.Run(new MyForm())&lt;/code&gt; அப்படியே வேலை செய்யும். இது desktop க்கு மட்டும் வரையறுக்கப்படவில்லை: Avalonia அதனுடைய சொந்த Android, iOS மற்றும் Browser (WASM) இலக்குகளை வழங்குகிறது; எனவே கீழே உள்ள பிரத்யேக Uno பின்தளத்துடன் சேர்த்து, இதே பின்தளம் mobile மற்றும் web க்கான இரண்டாவது பாதையாகும்.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;Majorsilence.Forms.Headless&lt;/code&gt;&lt;/strong&gt; சாத்தியமான மிக எளிய பின்தளம்; புதிய ஒன்றை எழுதுவதற்கான மேற்கோள் வார்ப்புருவாகவும் (reference template) இது செயல்படுகிறது: work-queue message loop, நினைவகத்திலான (in-memory) clipboard, மெய்நிகர் திரை, மற்றும் offscreen வரைதல். இதற்குக் காட்சித்திரை (display) தேவையில்லை; எனவே unit test தொகுப்பு இதிலேயே இயங்குகிறது, மேலும் CI pixel-diffing க்காக ControlGallery மாதிரியை நேரடியாக ஒரு PNG ஆக வரைய முடியும்:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;dotnet run --project samples/ControlGallery -- --render-headless out.png 1100 750 --select-row 0&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;Majorsilence.Forms.Uno&lt;/code&gt;&lt;/strong&gt; Uno Platform இன் Skia renderer ஐ இலக்காகக் கொள்கிறது; ஒரு &lt;code&gt;SKXamlCanvas&lt;/code&gt; ஐ host செய்து desktop, iOS, Android மற்றும் WebAssembly ஐ எட்டுகிறது. இது macOS இல் முழுமையாக (end-to-end) சரிபார்க்கப்பட்டுள்ளது: Uno ஹோஸ்ட் தொடங்குகிறது, பின்தளம் window ஐ உருவாக்குகிறது, ControlGallery இன் முழு &lt;code&gt;MainForm&lt;/code&gt; canvas இல் வரையப்படுகிறது. இதற்கு ஒரு interactive session தேவைப்படுவதால், headless CI build மூலம் அல்லாமல், ஒரு பிரத்யேக head திட்டம் (app head) மூலம் இயங்குகிறது — &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/tree/main/samples/Gallery.Uno&quot;&gt;&lt;code&gt;samples/Gallery.Uno&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;குறிப்பிடத்தக்க ஒரு விவரம்: Uno இல் “window இழுத்தலைத் தொடங்கு” (begin a window drag) என்ற programmatic API இல்லை; எனவே Majorsilence.Forms தானே வரையும் window chrome இன் நகர்த்தல்/அளவு மாற்றம் அதற்குப் பதிலாக declarative முறையில் கையாளப்படுகிறது — ஒரு borderless presenter OS இன் resize ஓரங்களை இலவசமாகத் தக்கவைக்கிறது; Windows desktop head இல் title-bar இழுத்தல் WinUI இன் caption-region API மூலம் செயல்படுகிறது. macOS இல், அதற்குப் பதிலாக native decorations இழுத்தல்/அளவு மாற்றத்தைக் கையாளுகின்றன.&lt;/p&gt;&lt;h2 id=&quot;adding-your-own&quot;&gt;உங்கள் சொந்தப் பின்தளத்தைச் சேர்த்தல்&lt;/h2&gt;&lt;p&gt;ஒரு புதிய பின்தளம் இன்னொரு assembly மட்டுமே: மைய &lt;code&gt;Majorsilence.Forms&lt;/code&gt; ஐயும் உங்கள் toolkit ஐயும் குறிப்பிடுங்கள், &lt;code&gt;IPlatformBackend&lt;/code&gt; மற்றும் &lt;code&gt;IWindowBackend&lt;/code&gt; ஐச் செயல்படுத்துங்கள், Avalonia/Headless/Uno மூவரையும் பின்பற்றுங்கள் — platform பின்தளத்தில் dispatcher ஐ இயக்குங்கள், window பின்தளத்தில் ஒரு Skia மேற்பரப்பைக் காட்டி உள்ளீட்டை மொழிபெயருங்கள். முழு interface பட்டியலுக்கு &lt;a href=&quot;/ta/backends/&quot;&gt;Platform பின்தளங்கள்&lt;/a&gt; பக்கத்தைப் பாருங்கள்.&lt;/p&gt;</content>
    <author><name>Majorsilence</name></author>
  </entry>
  <entry>
    <title>majorsilence-migrate மூலம் ஒரு WinForms பயன்பாட்டை இடம்பெயர்த்தல்</title>
    <id>https://forms.majorsilence.com/ta/blog/2026/07/21/migrating-with-majorsilence-migrate/</id>
    <link href="https://forms.majorsilence.com/ta/blog/2026/07/21/migrating-with-majorsilence-migrate/" rel="alternate" type="text/html"/>
    <published>2026-07-21T08:00:00+00:00</published>
    <updated>2026-07-21T08:00:00+00:00</updated>
    <summary type="text">ஒரு WinForms solution ஐ பல்தள .NET க்கு இடம்பெயர்த்தலை majorsilence-migrate எவ்வாறு தானியக்கமாக்குகிறது — தற்போது compile ஆகாத கோப்புகள் உட்பட ஆயிரக்கணக்கான கோப்புகளில் சில வினாடிகளில் இயங்கும், வேண்டுமென்றே உரை அடிப்படையிலான ஒரு மீள்எழுதி.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;majorsilence-migrate&lt;/code&gt; என்பது ஒரு WinForms solution ஐ Majorsilence.Forms க்கு நகர்த்துவதைத் தானியக்கமாக்கும் CLI கருவி. அதன் மைய வடிவமைப்பு முடிவு எளிதில் கவனிக்கப்படாமல் போகக்கூடியது; எனவே அதை வெளிப்படையாகக் குறிப்பிடுவது பயனுள்ளது: அது syntax tree ஐ parse செய்வதும் &lt;strong&gt;இல்லை&lt;/strong&gt;, symbols ஐத் தீர்ப்பதும் &lt;strong&gt;இல்லை&lt;/strong&gt;. அது மூல உரையின் (raw source text) மீது பல சுற்றுகளில் இயங்கும் ஒரு &lt;strong&gt;உரை/regex மீள்எழுதி (rewriter)&lt;/strong&gt; — அது வேண்டுமென்றே அவ்வாறு உருவாக்கப்பட்டது.&lt;/p&gt;&lt;h2 id=&quot;why-textual-not-roslyn&quot;&gt;ஏன் உரை அடிப்படை, Roslyn அல்ல&lt;/h2&gt;&lt;p&gt;கருவியின் சொந்த மூலக் குறியீட்டுக் குறிப்பிலிருந்து (source comment): &lt;em&gt;“இது வேண்டுமென்றே உரை அடிப்படையிலான மாற்றம் — இது syntax tree ஐ parse செய்வதில்லை — இதனால் இது வேகமாகவும், தற்போது compile ஆகாத கோப்புகளைப் பொறுத்துக்கொள்வதாகவும் இருக்கிறது.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;அந்தச் சமரசம், symbol-அறிவு கொண்ட ஒரு கருவி வழங்க முடியாத இரண்டு விஷயங்களைத் தருகிறது:&lt;/p&gt;&lt;ul&gt;  &lt;li&gt;&lt;strong&gt;உடைந்த குறியீட்டிலும் இது வேலை செய்கிறது.&lt;/strong&gt; பாதி இடம்பெயர்க்கப்பட்ட solution, யாரும் இன்னும் port செய்யாத ஒரு type ஐக் குறிப்பிடும் கோப்பு, ஒரு reference விடுபட்ட project — இவற்றில் எதுவும் மீள்எழுதியை நிறுத்தாது; ஏனெனில் குறியீடு compile ஆக வேண்டிய அல்லது முழுமையாக parse ஆக வேண்டிய அவசியம் அதற்கு ஒருபோதும் இல்லை. உண்மையான symbol resolution கொண்ட Roslyn அடிப்படையிலான கருவி, ஒரு project build ஆகும் வரை அதைத் தொடவே மறுக்கும்; அது ஒரு பழைய (legacy) codebase மீதான &lt;em&gt;முதல் சுற்றின்&lt;/em&gt; நோக்கத்தையே தோற்கடிக்கிறது.&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;இது வேகமானது.&lt;/strong&gt; compilation இல்லை, &lt;code&gt;MSBuildWorkspace&lt;/code&gt; இல்லை, project graph ஏற்றுதல் இல்லை — இது ஆயிரக்கணக்கான கோப்புகளில் சில வினாடிகளில் இயங்குகிறது.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;விலை: projects களுக்கு இடையிலான உண்மையான symbol resolution இல்லை. ஒரு வெறும் &lt;code&gt;Panel&lt;/code&gt; குறிப்பு &lt;code&gt;System.Windows.Forms.Panel&lt;/code&gt; ஐக் குறிக்கிறதா அல்லது அதே பெயருடைய உங்கள் சொந்த class ஐக் குறிக்கிறதா என்பதை மீள்எழுதியால் எப்போதும் கூற முடியாது — அதற்குப் பதிலாக அது namespace-prefix மற்றும் &lt;code&gt;using&lt;/code&gt;/&lt;code&gt;Imports&lt;/code&gt; சூழலைச் சார்ந்திருக்கிறது. நடைமுறையில் இது அரிதாகவே தெளிவற்றதாக இருக்கும் (WinForms மற்றும் Telerik type பெயர்கள் தனித்துவமானவை); அது அடையாளம் காணாத எதுவும் அமைதியாக ஊகிக்கப்படுவதற்குப் பதிலாக, கைமுறை மதிப்பாய்வுக்காகக் குறிக்கப்படுகிறது.&lt;/p&gt;&lt;h2 id=&quot;the-optional-roslyn-engine&quot;&gt;விருப்பத்தேர்வான Roslyn இயந்திரம்&lt;/h2&gt;&lt;p&gt;உண்மையிலேயே தெளிவற்ற சந்தர்ப்பத்துக்கு — அதே கோப்பில் ஒரு WinForms/GDI+ type உடன் அதே வெறும் பெயரைப் பகிரும் ஒரு custom type — விருப்பத்தின் பேரில் இயக்கக்கூடிய இரண்டாவது இயந்திரம் உள்ளது: &lt;code&gt;--engine roslyn&lt;/code&gt;. இது regexes க்குப் பதிலாக &lt;code&gt;MSBuildWorkspace&lt;/code&gt; ஐயும் உண்மையான symbol resolution ஐயும் பயன்படுத்துகிறது; உரை இயந்திரத்தை மாற்றீடு செய்யாமல் அதன் &lt;em&gt;மேல்&lt;/em&gt; அடுக்கப்படுகிறது. Roslyn பயன்முறையிலும் பல சுற்றுகள் உரை அடிப்படையிலேயே இருக்கின்றன, ஏனெனில் அவை ஆரம்பத்திலிருந்தே symbol-resolution பிரச்சினைகள் அல்ல.&lt;/p&gt;&lt;p&gt;சமரசங்கள் இயல்புநிலை இயந்திரத்துக்கு நேர் எதிராக உள்ளன: MSBuild மூலம் உண்மையில் ஏற்றப்படும் ஒரு solution அல்லது project இதற்குத் தேவை (ஒரு வெறும் directory அல்லது தனிக் கோப்பு எச்சரிக்கையுடன் உரை இயந்திரத்துக்குத் திரும்பும்); MSBuild மதிப்பீடே இயக்க நேரத்தை ஆக்கிரமிப்பதால் இது பல மடங்கு (orders of magnitude) மெதுவானது; ஒரு project ஏற்றத் தவறினால், அந்த project இன் கோப்புகள் மட்டுமே உரை இயந்திரத்துக்குத் திரும்பும் — இயக்கம் நிறுத்தப்படாது. MSBuild ஐயே கண்டுபிடிக்க முடியாவிட்டால், அமைதியாகத் தரம் குறைவதற்குப் பதிலாக முழு இயக்கமும் கடுமையாகத் தோல்வியடையும்.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;எப்போது இதைப் பயன்படுத்துவது:&lt;/strong&gt; இயல்புநிலை &lt;code&gt;--engine text&lt;/code&gt; உடனான முதல் சுற்றுக்குப் பிறகு, ஏற்கனவே சுத்தமாக ஏற்றப்படும் ஒரு project இல், diff இல் குறிப்பிட்ட, உறுதிப்படுத்தப்பட்ட பெயர் மோதல் (name-collision) சந்தர்ப்பத்தைக் காணும்போது. பெரிய, ஒருவேளை பாதி உடைந்த legacy codebase மீதான ஆரம்பச் சுற்றுக்கு, இயல்புநிலை உரை இயந்திரமே இன்னும் சரியான கருவி.&lt;/p&gt;&lt;h2 id=&quot;whats-next&quot;&gt;அடுத்தது என்ன&lt;/h2&gt;&lt;p&gt;ஒவ்வொரு சுற்றின் முழு விவரத்துக்கும் repository இல் உள்ள &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/MIGRATION.md&quot;&gt;&lt;code&gt;MIGRATION.md&lt;/code&gt;&lt;/a&gt; ஐயும், உங்கள் இடம்பெயர்க்கப்பட்ட குறியீடு compile ஆனதும் உண்மையில் எவை செயல்படுத்தப்பட்டுள்ளன என்பதற்கு &lt;a href=&quot;https://github.com/majorsilence/Majorsilence.Forms/blob/main/COMPATIBILITY_MATRIX.md&quot;&gt;&lt;code&gt;COMPATIBILITY_MATRIX.md&lt;/code&gt;&lt;/a&gt; ஐயும் பாருங்கள்.&lt;/p&gt;</content>
    <author><name>Majorsilence</name></author>
  </entry>
</feed>
