Net-Base Maġazin

18.08.2026

VCL High-DPI: Iskala l-ikoni waqt il-ħin tal-eżekuzzjoni u tevita pixels imblurrjati fil-TImageList

High-DPI fil-VCL mhuwiex biss checkbox; huwa katena ta' setup tal-ImageList, eventi ta' bidla tal-DPI u rendering nadif. Dan l-artiklu prattiku juri kif tista' tiskala l-ikoni fil-ħin tal-eżekuzzjoni, tevita artefatti u twettaq id-debugging b'mod riproduċibbli tal-fallijiet tipċi ta' TImageList.

18.08.2026

Minn suġġett tar-rivista għall-prattika tal-proġett

Paġni ta' servizz u paġni tekniċi relevanti għall-artiklu

Min jaħdem b’applikazzjonijiet VCL fuq klijenti moderni Windows, qabel jew wara jiltaqa ma‘ l-istess simptomu: l-ikoni jidhruna imblurdjati f’125%/150%/200%, bil-kantunieri mxarrbin jew b’kontorn griz. Hawnhekk is-suett tal-VCL High-DPI Icons isir praktiku: mhux għax il-High-DPI hu ġdid, imma għax il-problemi normalment jidhru biss fil-prattika — fuq terminal servers, waqt il-bidla bejn notebook u dock, jew meta kull monitor għandu DPI differenti.

Is-suett ewlieni kważi qatt m’huwiex li „il-PNG hu imkissir“, imma l-pipeline: minn fejn jasal l-ikon (riorsa, fajl, SVG, font), f’liema daqs jiġi provdut, kif jintemm fis-TImageList u min u meta jwettaq l-iskaljar. Fil-VCL jidiedu diversi termini li jridu jiu ddisambigwati: DPI-Awareness (jekk Windows jew l-applikazzjoni hija dik li tasskala), Per-Monitor-DPI (kull monitor jista‘ jkun differenti) u ImageList-Strategie (żomm diversi rioluzzjonijiet jew rasterizza waqt il-ħin tal-eekuzzjoni).

Dan l-artiklu ma jmurx fil-debatti dwar id-disinn tal-UI; hu mmirat għal approċċ nadif u operattivament sigur: li jiskala l-ikoni waqt il-ħin tal-eekuzzjoni, imma b’mod li ma jsirx mush tal-pikseli, li l-kanali Alpha jibqgħu intatti u li t-tranizzjonijiet ta‘ DPI jaħdmu mingħajr blikks jew daqsijiet ta‘ immani żbaljati. Jidiedu wkoll falli, pariri għad-debugging u stima onesta meta jiswa l-isforz żejjed.

Għaliex jinħoloq pixelmatsch: nifhmu l-katina ta‘ skaljar fil-VCL

Grafik zur Icon-Skalierung: Master-Icon wird in mehrere Zielgrf6dfen gerastert, doppelte Skalierung ffchrt zu Unsche4rfe
Skaljar wieħed minn sors master huwa kontrollabbli doppji passi ta‘ resampling jwasslu malajr għal nuqqas ta‘ ċarezza viżibbli.

Ir-raġuni l-aktar komuni għal ikoni mhux ċari hija down-/upscaling waħda f’żmien ħażin. Fl-Workflow klassiku tal-Legacy-VCL:

  • L-applikazzjoni tipprovdi l-ikoni biss f’16×16 jew 24×24.
  • Windows jew il-VCL jiskalaw għal 20×20 / 32×32 / 48×48.
  • Is-skalatur juża interpolazzjoni li tikkonvenjeni għal ritratti, iżda li tħawwad il-kantunieri f’ġrafika ta‘ pixel.
  • Barra minn hekk, it-trasparenza (Alpha) titqiegħed f’loġika ta‘ maska jew tiġi kkonvertita diversi drabi.

Jġib l-agħar effett meta jseħħu diversi passi ta‘ skaljar konsekuttivi: per eżempju meta l-ImageList dià tipprovdi bitmap skalat u Windows minħabba li mhuwiex DPI-aware jew minħabba System-DPI jerġa‘ jiskala fuqha. Riżultat: telf ċarezza darbtejn.

Punt ieħor, li f’ħafna proġetti jiġri li jinqis inqas, hu l-mument ta‘ skaljar. F’Per-Monitor-DPI (Per-Monitor-DPI-Awareness v2) l-DPI effettiv jista‘ jinbidel meta tieqa tgħaddi minn monitor għal ieħor jew meta klient Remote Desktop jadatta l-DPI b’mod dinamiku. Jekk f’dak il-mument TImageList jew cache ma jkunx mibni mill-ġdid korrettament, tidher tiba ta‘ ikoni f’daqs żbaljat jew b’grilja mhux korretta.

TImageList taħt High-DPI: trappoli tipici f’applikazzjonijiet reali

It-TImageList hija storikament maħsuba għal bitmaps żgħar, b’dimensjonijiet stabbiliti, indici u loġika ta‘ ħażna relattivament stabbli. Fil-High-DPI jinqalgħu falli pratikaċi:

1) Width/Height imwaħħla

Ħafna formoli VCL jisettjaw ImageList.Width/Height waqt id-disinn u jgħaddux aktar. F’150% Windows spiss ikun meħtieġ, pereżempju, li minn 16 tagħmel 24. Jekk il-lista tibqa‘ fuq 16, jew jiġu kklippjati ritratti jew jiġu skalat f’post ieħor — uż-żewġ affarijiet mhux desirabbli.

2) PNG-Alpha und Maskenlogik

Skont il-verżjoni ta‘ Delphi u l-controls VCL, faċilment issib ruħek f’operazzjoni mħallta: PNGs b’alpha spiss jiġu immaġinati internament parti bħala 32-bit Bitmap u parti bħala Mask+Color. Ladarba tagħmel konverżjonijiet ripetuti (PNG -> Bitmap -> ImageList -> Draw), jidhru halos griżi jew kantunieri ħorox. L-effett spiss jiddependi fuq il-background: fuq toolbar skur jidher agħar milli fuq panel ċar.

3) DPI-Wechsel zur Laufzeit: Caches, Handles, OwnerDraw

Xi controls jaħżnu (cache) il-preżentazzjoni tal-immaġni jew jieħdu ImageList-handles f’mument meta l-DPI għadu mhux finali. Speċjalment f’Toolbars, TreeViews/ListViews u scenarji OwnerDraw, wara bidliet DPI jidhru sporadiċament daqsijiet tal-immaġni żbaljati jew icons vojt, sakemm ma jsirx Repaint jew RecreateWnd.

4) Terminalserver und Remote-Desktop als Realitätstest

Jekk l-app tintuża permezz ta‘ RDP, bidliet DPI u session-reconnects mhumiex eċċezzjoni. Eżatt f’dawk is-sitwazzjonijiet strategija mhux robusta tal-ImageList tista‘ tpoġġi problemi serji: l-utent jista‘ jara icons imxarrba jew toolbars skalat ħażin wara r-reconnect, anke jekk lokalment kollox kien OK.

Aproċċ nadif: diversi riżoluzzjonijiet ipprovduti minflok upscaling brutali

Id-deċiżjoni l-iktar importanti hija konseptwali:
Tixtieq tgħolli l-iskala tal-icons waqt il-ħin tal-eżekuzzjoni minn bażi grafika waħda (eż. 16 -> 32), jew
tipprovdi diversi riżoluzzjonijiet nattivi u tagħżel skont il-DPI dak li jaqbel?

Fil-prattika kważi dejjem jitla‘ vantaġġ għall-approċċ tal-„diversi riżoluzzjonijiet“. Upscaling jintuża b’mod ġustifikat jekk is-sors huwa bbażat fuq vektor (SVG, Icon-Font) jew jekk dejjem għandek bżonn biss fatturi moderati. Meta tgħolli b’mod qawwi immaġni raster żgħira, titlef kwalità fil-kantunieri — u dan jidher immedjatament fuq displays moderni.

Fil-qasam tal-VCL, għal dan l-approċċ illum hemm żewġ komponenti rilevanti:

  • TImageCollection: kontenitur għal ritratti f’diversi daqsijiet/varjanti.
  • TVirtualImageList: jinħoloq minn dan waqt il-ħin tal-eżekuzzjoni ImageList fid-daqs meħtieġ u jirreaġixxi għal bidliet DPI.

Dan ma jsolvix il-problemi kollha, iżda jimxi l-problema lejn il-post korrett: tiddisinja s-sorsi tal-immaġni b’mod nadif, u s-skala/selezzjoni jiġru b’mod konsistenti.

VCL High-DPI Icons waqt il-ħin tal-eżekuzzjoni: meta hu sensat (u meta mhux)

Hemm raġunijiet legittimi biex skaliċi icons waqt il-ħin tal-eżekuzzjoni:

  • Tniżżel icons dinamikament (eż. minn folder tal-plugin, pakketti ta‘ branding speċifiċi għall-klijent, pakketti ta‘ konfigurazzjoni).
  • Tixtieq pipeline uniformi għal sorsi differenti (ICO, PNG, SVG) u ma tridx tiffissa l-varjanti kollha waqt il-Build-Zeit.
  • Tiġġenera icons b’mod programmattiku (status-badges, overlays, simboli komposti).

Skalazzjoni runtime mhix sensata jekk fil-fatt għandek biss ikoni klassiċi tal-toolbar minn sett fiss. F’dak il-każ it-triq l-inqas għall-manutenzjoni hija: jagħtu diversi riżoluzzjonijiet b’mod nadif u ħalli l-VCL tagħżel.

Jekk tagħmel skalazzjoni runtime, agħmilha b’regoli ċari:

  • Qatt tisskala mill-ġdid minn bitmap li diġà ġiet skalata. Dejjem ibda minn sors master (preferibbilment vektorjat jew b’riżoluzzjoni għolja).
  • Cache għal kull daqs tal-mira u DPI, inkella tkun qed tiskala mill-ġdid f’kull Paint — dan jikkonsma CPU u jista‘ jikkawża stuttering.
  • Żomm il-alpha: minimizza l-konverżjonijiet, uża 32-bit RGBA, u evita r-rastrizzazzjoni tal-isfond.

Arkitettonika pragmatika: Icon-Pipeline bħala komponent separati

F’applikazzjonijiet iktar kbar il-valur hu li ma tiffurkax it-tema f’kull post, iżda toħloq pipeline żgħira. Mhux neċessarjament framework — aktar sett ċar ta‘ responsabilità:

  • Sors tal-ikoni: Minn fejn jiġu l-master-assets (risorsijiet, fajls, database, API)?
  • Rasterizer/Scaler: Kif jinħoloq il-pixel tal-mira mis-sors master (interpolazzjoni, u kif x’jagħmel render ta‘ SVG jekk meħtieġ)?
  • Cache: ċavetta (Icon-ID, pixel tal-mira, DPI, Theme) u ċiklu tal-ħajja (invalidazzjoni waqt bidla ta‘ DPI, bidla tat-Theme, bidla tal-pakkett).
  • Consumer-Adapter: Kif jasal ir-riżultat fl-istrutturi tal-VCL (TImageList/TVirtualImageList, OwnerDraw, PaintBox)?

Vantaġġ: Tista‘ tdebuggja DPI-Bugs b’mod riproduċibbli f’post wieħed, minflok tfittex f’40 Forms fejn jerġa‘ jsir scaling.

DPI-Wechsel korrekt behandeln: Ereignisse, Rebuild, Repaint

Notebook mit zwei Monitoren unterschiedlicher DPI, Fensterwechsel zeigt unterschiedliche Icon-Größen in einer Desktop-App
Per-monitor-DPI huwa t-test tal-realità: meta jinbidel il-monitor il-pipeline tal-ikoni trid tirrastra mill-ġdid, mhux biss terġa‘ tiddawwar.

Taħt Windows huma l-bidliet DPI ċiklu tal-ħajja separat. Fil-VCL, skont il-verżjoni u l-DPI-awareness, hemm diversi avvenimenti/meccanismi, imma l-prinċipju bażiku jibqa‘:

  • Meta tinbidel id-DPI tat-tieqa, ir-riżorsi bbażati fuq immaġni li jridu jkunu pixel-preċiżi għandhom jiġu pprovduti mill-ġdid.
  • Jekk timla ImageLists dinamikament, spiss inqas ma‘ bloßes Invalidate mhux biżżejjed — għandek bżonn Rebuild tal-Images fil-ġdida daqs tal-mira.

Mudell prattiku: fuq bidla ta‘ DPI (eż. Form-Scale/Monitorwechsel) invalida l-Icon-Cache għal dik id-DPI u ebda l-ImageLists affettwati mill-ġdid. Huwa importanti li ma tiskalax fi Paint-Events, imma fil-bqija ta‘ aġġornament kontrollat (Toolbar.BeginUpdate/EndUpdate, ListView-Redraw off, imbagħad lura on). B’dan il-mod tevita flicker u stati ta‘ UI nofshom.

Għaliex TImageList spiss issir mhux ċara: Interpolazzjoni, DPI-Rundung, Kanten

Ladarba tifhem li mhux id-DPI huwa l-problema, iżda l-interpolazzjoni plus rounding, ħafna effetti jistgħu jiġu spjegati:

  • Arrotondament tal-DPI: 125% ist kein sauberer Verdoppler. Aus 16 px werden 20 px (16 * 1,25). Aus 24 px werden 30 px. Das sind krumme Zahlen, die Pixelkanten erschweren.
  • Filtri ta‘ resampling: Bilinear/Bicubic macht Kanten weicher. Das ist für Fotos ok, für Icons oft nicht.
  • Effetti subpixel: Windows kann je nach Renderpfad Subpixel-Antialiasing nutzen oder nicht. Bei Icons willst du kontrollierte Kanten — und möglichst keine mehrfachen Filterstufen.

Wenn du Raster-Icons hast, ist es in vielen Teams gängige Praxis, pro Zielgröße eigene PNGs zu liefern (16/20/24/32/40/48). Klingt nach viel, ist aber oft weniger Aufwand als jahrelang ‚warum sieht das auf diesem Monitor komisch aus‘ zu debuggen.

Debugging: Pixelmatsch reproduzierbar machen statt nach Bauchgefühl zu fixen

Arbeitsplatz mit Debug-Notizen ffcr Icon-Skalierung und Hintergrundtests zur Alpha-Kante
Rutini tajbin ta‘ DPI-Debugging testen Größen, Hintergründe und Rebuild-Zeitpunkte — nicht nur den ersten Screenshot.

High-DPI-Bugs wirken oft zufällig. Mit ein paar Checks werden sie deterministisch:

1) Logġġja DPI und ImageList-Größen zur Laufzeit

Logge bei Start und bei DPI-Wechsel: CurrentPPI des Forms, Screen.PixelsPerInch (Achtung: das kann System-DPI sein), sowie ImageList.Width/Height der betroffenen Listen. Wenn du nach einem Monitorwechsel noch 16 siehst, obwohl du 32 erwartest, ist die Ursache klar: Rebuild fehlt oder kommt zu spät.

2) Icons sichtbar vergrößern

Ein schneller Test ist, die Toolbar-Icons temporär auf 48 px zu setzen. Schlechte Skalierung springt dann sofort ins Auge. Gute Pipelines bleiben auch bei 48 px scharf, weil sie aus einer passenden Quelle rastern.

3) Theme- und Hintergrundwechsel testen

Halos am Rand sind oft Alpha-/Premultiply-Probleme. Teste auf hell/dunkel und auf Flächen mit Farbverlauf. Wenn die Kante je nach Hintergrund anders aussieht, stimmt die Transparenzbehandlung nicht.

4) Remote Desktop / Monitorwechsel als Testskript

Erstelle ein kurzes Testskript für die QS: App starten auf Monitor A (100%), Fenster auf Monitor B (150%), zurück, dann RDP reconnect. Wenn das stabil ist, sind viele Kundenprobleme bereits gelöst.

Migration in bestehenden Anwendungen: Schrittweise statt Big Bang

In gewachsenen Delphi-VCL-Anwendungen steckt die Icon-Logik oft an vielen Stellen: Menüs, Toolbars, ActionLists, TreeViews, Statusanzeigen. Ein Big-Bang-Umbau bringt Risiko. Bewährt hat sich ein schrittweises Vorgehen:

  • Inventur: Welche ImageLists gibt es? Welche Controls nutzen sie? Welche Größen werden erwartet?
  • Priorisieren: Zuerst die prominentesten Flächen (Haupttoolbar, Navigation, Kontextmenüs).
  • Einheitliche Quelle: Icons zentralisieren (ImageCollection oder eigener Loader), statt pro Form Einzeldateien zu laden.
  • DPI-Wechsel testen: Ab dem ersten umgebauten Modul konsequent DPI-Wechsel-Tests fahren.

Importanti: Jekk tmexxi simultanjament pipeline qodma u ġdida, iddokumenta regoli ċari. Inġinerija mingħajr regolazzjoni twassal għal paesagg miksi fejn xi ikonki jkunu ċari u oħrajn jidher li huma ċari inqas (blurry).

Prestazzjoni u Memorja: Skaljar waqt il-ħin tal-eżekuzzjoni mingħajr effetti sekondarji

Is-skaljar jiswew CPU u memorja. F’softwer ta’ business dan spiss ma jidhirx fil-waqfien, imma meta tbiegħed it-tieqa fuq monitor ġdid jew fil-bidu ma’ ħafna Forms jista’ jikkawża stutter. Tliet linji gwida prattiċi:

  • Limitja d-dimensjonijiet tal-cache: Mhux meħtieġ iżżomm kull pass intermedju għal dejjem. Jekk għandek bżonn biss 100% u 150%, cache biss dawk il-valuri.
  • Lazy Build: Rasterizza l-ikonki biss meta s-screen jeħtieġhom verament. F’menù kbar dan inaqqas iċ-ċiklu tal-istartjar.
  • Batch-Rebuild: F’cambi DPI m’għandekx tħaddem kull control b’mod individwali. Rebuild ċentrali jipprevjeni skaljar ridondanti.

Jekk taħdem ma’ TVirtualImageList, ħafna minn dawn il-kunċetti diġà ġew inklużi, imma trid tibqa’ attenta biex ma tibnix fuqha skaljar addizzjonali proprju fuq il-quċċata.

Strategiji ta’ fallback: X’għandek tagħmel meta mhux l-ikoni kollha jkunu disponibbli f’dawk id-dimensjonijiet?

Fir-realtà m’hemmx dejjem l-assets f’kull dimensjoni. F’dak il-każ għandek bżonn strategija ta’ fallback ċara biex tevita riżultati każwali jew inkonsekwenti:

  • Preferi downscale: Aħjar tnaqqas minn 64 px għal 32 px milli tissaħħaħ minn 16 px għal 32 px.
  • Definixxi livelli: Stabbilixxi liema daqsijiet tal-mira tassew tappoġġja (eż. 16/20/24/32/40/48) u mapa DPI b’mod preċiż fuqhom.
  • Ittesta trasparenza: Fil-fallbacks ibqa’ speċjalment attent lejn il-kanal alfa — hemm il-ħolijiet (halos) li jirriduċu laħaq il-kwalità.

Żball tipiku hu li tieħu “xi” l-aktar daqs viċin. Dan jagħmel li s-sogħla viżwali tal-ikkoni tinbidel skont l-ikona. Aħjar għandek pjan ta’ mapping strett u ddoċumentat.

Meta verament jiswa l-isforz?

Hemm tlett indikaturi ċari li juru li jiswa t-tmexxija ta’ pipeline ta’ ikoni High-DPI nadifa:

  • Il-utenti tiegħek jaħdmu b’monitors miksija (laptop + ekstern) jew jużaw ħafna RDP.
  • L-applikazzjoni hija fit-tul u tinżamm fuq snin — il-perċezzjoni tal-UI hija parti mill-adozzjoni.
  • Tħares lejn passi ta’ modernizzazzjoni (tgħolli DPI-awareness, tissostitwixxi controls, tirrevedi layout tal-toolbar).

Jekk l-app tinżamm biss fuq sistema kiosk fissa b’risoluzzjoni identika, tista’ tżomm il-kwistjoni minimal: provdi daqs ikoniku xieraq, issettja DPI-awareness b’mod korrett, u konklużi.

Konklużjoni: High-DPI mhuwiex dettall kosmetiku, iżda deċiżjoni ta’ rendering

Ikoni mhux ċari fil-VCL rari jkunu żball isolat; normalment huma sinjal ta’ katena mhux ċara ta’ sorsi, skaljar u caching. L-approċċ aktar robust huwa li tipprovdi ikoni f’diversi risoluzzjonijiet u tiġbidhom konsistentament permezz ta’ pipeline ċentrali (eż. ImageCollection/VirtualImageList jew saqaf proprju tal-ikoni). Is-skaljar waqt il-ħin tal-eżekuzzjoni huwa raġonevoli meta għandek sorsi dinamici jew simboli komposti, iżda biss meta jkun hemm sors master, cache ibbażat fuq DPI u regoli ċari ta’ rebuild.

Jekk għandek sintomi konkreti (bidla ta’ DPI ttaffi l-ikoni, halos fuq il-kantunieri, daqsijiet żbaljati wara RDP), jiswa li tiddetermina l-problema u tittrattaha bħala komponent arkitettoniku żgħir minflok ma tapplika workaround għal kull form. Jekk trid appoġġ għall-debugging jew għal modernizzazzjoni gradwali, issib hawn l-aċċess: Kontakt zur Net-Base Software GmbH.

Għal dan is-suġġett huma importanti wkoll Timagelist High Dpi u Delphi Vcl Dpi-Awareness. Il-kontenut jpoġġi dawn l-aspett f’kuntest b’mod ċar u juri x’inhuma l-punti prattiċi rilevanti fil-ħidma ta’ kuljum.

Diskuti proġett jew skema ta’ modernizzazzjoni ma’ Net-Base.

Pass li jmiss

Meta suġġett jiġi mwettaq bħala proġett reali, l-arkitettura, is-sistema eżistenti u l-operat għandhom jiġu kkunsidrati flimkien kmieni.

Aħna nappoġġjaw mhux biss f'kwistjonijiet puntwali, iżda wkoll meta biċċiet ta' kodiċi sors, temi legacy jew ideat għal portali jridu jsiru proġett korporattiv stabbli u affidabbli.

  • L-istat attwali, l-istat tal-mira u r-riskji tekniċi jiġu vvalutati flimkien.
  • REST, aċċess tad-dejta, portalijiet u rollout ma jiġu posposti bħala konsegwenzi tardivi.
  • Tara kmieni liema triq hija ekonomika u operattivament sostenibbli.

Aqsam il-post

Aqsam dan il-post direttament

LinkedIn, X, XING, Facebook, WhatsApp u E-Mail huma disponibbli immedjatament. Għal Instagram nippreparaw il-link u test qasir direttament.

Imejl

Instagram jiftaħ f'tab ġdid. Il-link u t-test qasir jiġu kkopjati qabel fil-clipboard.