TWinControl.LockDrawing a TWinControl.UnlockDrawing

vložil Radek Červinka 6. dubna 2022 10:31

Při představení Delphi 11 jsem prakticky vynechal přidání TWinControl.LockDrawing a TWinControl.UnlockDrawing, což ovlivňuje provádění windows zprávy WM_SETREDRAW.

V What's New se píše:

  • metoda TWinControl.LockDrawing zakazuje control updating
  • metoda TWinControl.UnlockDrawing povoluje control updating
  • property TWinControl.IsDrawingLocked vrací True pokud LockDrawing byl volán (a UnlockDrawing ne)
  • property TWinControl.RedrawDisabled vrací True když Win32 control drawing je disabled

Některé kontejnery komponent mají zdřívějška BeginUpdate/EndUpdate, ale to nebyl případ obecného TWinControl.

Test

Mějme formulář s panelem, dvěma tlačítky, které volají následující metodu s rozdílným parametrem:

procedure TForm47.DoRecreate(bDisable: Boolean);
var
  iCnt: Int64;
  x: Integer;
  btn: TButton;
begin
  iCnt := GetTickCount64;
  if bDisable then
    Panel1.LockDrawing;
  try
    while panel1.ControlCount > 0 do
      Panel1.Controls[0].Free;
    for x := 1 to 100 do
    begin
      btn := TButton.Create(Panel1);
      btn.Caption := IntToStr(x);
      btn.SetBounds(x*3, x*3, 70, 20);
      btn.Parent := Panel1;
    end;

  finally
    if bDisable then
      Panel1.UnlockDrawing;
    Label1.Caption := IntToStr(GetTickCount64 - iCnt);
  end;

end;

Výsledkem programu je 100 přidaných tlačítek (případně vyčištění předtím). Výsledek je lepší samozřejmě s LockDrawing a UnlockDrawing, ale jak? Nejmenší rozdíl je na monitoru s DPI, s kterým to je navrženo (v tomto případě 62 x 80 ms pokud byl panel prázdný, resp. 80 x 125ms pokud se předtim provádí uvolňování) . Pokud se DPI liší tak mi to vyšlo 110 x 234 ms včetně čištění.

Osobně přikládám největší význam při provozování aplikace na vzdáleného připojení, což byl i důvod proč jsem se s tím začal zabývat. Přijde mi, že tam je benefit velmi významný.

Tagy: ,

Novinky v Delphi

Komentáře

6.4.2022 13:33:35 #

Stanislav Hruška

Myslím si, že mi to pomôže v mojom prípade.
Mám 5 panelov. Na každom panely 30 komponentov. Tie zobrazujem a skrývam podľa potreby. Odozva je značná.
Snáď si takto pomôžem.

Stanislav Hruška

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců