Am descoperit mesajul WM_SETREDRAW. Acesta permite de ceva timp pentru a opri redesena controlul (box), astfel scuti utilizatorul de bucla inutile efect flicker, și altele asemenea. Aplicată în separatorul său. acum cu o schimbare în dimensiune - frumusețe. Comparați cele două animații (deoarece acest lucru este gif - salvat în nuanțe de gri, în caz contrar există artefacte de culoare).
Înainte de a aplica WM_SETREDRAW:
Este perfect clar că panoul din stânga separatorului nu are timp să atragă (și cel din dreapta să rămână în urmă).
Și aceasta este după încadrarea codului pentru a schimba lățimea lui AlignControl în WM_SETREDRAW:
Încadrarea în cod arată astfel:
Observ că, dacă vopsi doar mamă (în raport cu splitter) de control, cum ar fi apelarea Parent.Repaint - pene, de asemenea, nu va fi, dar există o pâlpâire care mult mai încărcate (decât exemplu) cazuri de control.
Această tehnică poate fi utilizată în acele cazuri când într-o singură fereastră este necesară repoziționarea mai multor controale. Ei bine, ca exemplu, atunci când IDE se schimbă în Layout (Desktop speedsetting) - fără a bloca desenul, utilizatorul vede pâlpâirea neplăcută.
Și un punct mai important: WM_SETREDRAW schimba vizibilitatea ferestrei (ca și în cazul în care este ascunsă, dar zona de sub fereastra - nu este redesenată). Și dacă fereastra a fost deja ascunsă, atunci poate fi afișată eronat (și invers), deci nu uitați să verificați acest punct.
Da, mulțumesc. Acest truc face cu TForm - în general, periculoase (sub forma unui utilizator care dă clic mouse-ul devine „sub“ formă și pierde se concentreze). Prin urmare, este mai bine să puneți deja toate comenzile pe TPanel și să "jucați" cu el.
Cu toate acestea, într-un caz specific cu un splitter, această operație este imposibilă, deoarece acest cod funcționează cu mouse-ul deja capturat
Deși dacă încerci cu adevărat - poți :)
(Există posibilitatea de a seta în mod programatic proprietatea IsSnapped). Acum mă gândesc ce să fac.
Bine, o las așa cum e. Toată lumea este sfătuită să folosească panouri sau cadre.