🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
4 messages
4 total messages Started by Bartłomiej Sosenko Fri, 19 Aug 2016 07:54
Optymalizacja wyświetlania tworzonych komponentów
#345087
Author: Bartłomiej Sosenko
Date: Fri, 19 Aug 2016 07:54
7 lines
1745 bytes
W momencie otwierania okna doczytywana jest dynamicznie lista pól edycji która ma się pojawić.

Jeśli bym to robił standardowo to dość brzydko widać jak obiekty się kolejno rysują (jest ich kilkanaście)
Jeśli wyłączę widoczność panelu na którym się to rysuje i włączę po utworzeniu wszystkich elementów to efekt jest zadowalający ale jakoś mam wrażenie że jest na to bardziej sensowne rozwiązanie na które niestety się nie natknąłem.

Możecie podpowiedzieć gdzie szukać?
Dzięki!
Re: Optymalizacja wyświetlania tworzonych komponentów
#345088
Author: m
Date: Fri, 19 Aug 2016 08:21
45 lines
2438 bytes
W dniu 2016-08-19 o 09:54, Bartłomiej Sosenko pisze:
> W momencie otwierania okna doczytywana jest dynamicznie lista pól edycji która ma się pojawić.
>
> Jeśli bym to robił standardowo to dość brzydko widać jak obiekty się kolejno rysują (jest ich kilkanaście)
> Jeśli wyłączę widoczność panelu na którym się to rysuje i włączę po utworzeniu wszystkich elementów to efekt jest zadowalający ale jakoś mam wrażenie że jest na to bardziej sensowne rozwiązanie na które niestety się nie natknąłem.
>
> Możecie podpowiedzieć gdzie szukać?
> Dzięki!
>
Dziwne że dla kilkunastu komponentów jest to problem moze podczas 
dodawania cos sie musi policzyc ?

U mnie 1000 TEdit dodaje sie w 890ms. 100 sztuk w 94ms


procedure TForm28.Button1Click(Sender: TObject);
var
   e: Tedit;
   I: Integer;
   dw: Dword;
   WindowLocked: Boolean;
begin
   AllocConsole;
   dw := GetTickCount;
   WindowLocked := LockWindowUpdate(Application.MainForm.Handle);
   try
     for I := 0 to 100 - 1 do
     begin
       e := Tedit.Create(Self);
       e.Top := Random(Width);
       e.Left := Random(Height);
       e.Width := Random(255);
       e.Height := Random(64);
       e.Text := IntToStr(Random( High(Integer)));
       e.Parent := Self;
     end;
   finally
     if WindowLocked then
       LockWindowUpdate(0);
   end;
   Writeln('Czas=', GetTickCount - dw);
end;


M
Re: Optymalizacja wyświetlania tworzonych komponentów
#345089
Author: Bartłomiej Sosenko
Date: Fri, 19 Aug 2016 10:44
18 lines
2784 bytes
W dniu piątek, 19 sierpnia 2016 10:21:40 UTC+2 użytkownik m napisał:
> W dniu 2016-08-19 o 09:54, Bartłomiej Sosenko pisze:
> > W momencie otwierania okna doczytywana jest dynamicznie lista pól edycji która ma się pojawić.
> >
> > Jeśli bym to robił standardowo to dość brzydko widać jak obiekty się kolejno rysują (jest ich kilkanaście)
> > Jeśli wyłączę widoczność panelu na którym się to rysuje i włączę po utworzeniu wszystkich elementów to efekt jest zadowalający ale jakoś mam wrażenie że jest na to bardziej sensowne rozwiązanie na które niestety się nie natknąłem.
> >
> > Możecie podpowiedzieć gdzie szukać?
> > Dzięki!
> >
> Dziwne że dla kilkunastu komponentów jest to problem moze podczas 
> dodawania cos sie musi policzyc ?

Nie, nic się nie liczy ale parametry tworzonych komponentów wczytywane są z kolejnych rekordów bazy danych więc może to powoduje opóźnienie. U mnie przy kilkunastu elementach zajmuje mu to około sekundy ale właściwie nie ma różnicy czy jest ich kilka czy kilkadziesiąt... muszę jeszcze poszperać w kodzie co dokładnie powoduje opóźnienie.

Tak czy inaczej właśnie tego szukałem: LockWindowUpdate ;)
Wrzuciłem - działa.
Dzięki za pomoc!
Re: Optymalizacja wyświetlania tworzonych komponentów
#345090
Author: J-23
Date: Fri, 19 Aug 2016 16:48
21 lines
2546 bytes
W dniu 19.08.2016 o 12:44, Bartłomiej Sosenko pisze:
> W dniu piątek, 19 sierpnia 2016 10:21:40 UTC+2 użytkownik m napisał:
>> W dniu 2016-08-19 o 09:54, Bartłomiej Sosenko pisze:
>>> W momencie otwierania okna doczytywana jest dynamicznie lista pól edycji która ma się pojawić.
>>>
>>> Jeśli bym to robił standardowo to dość brzydko widać jak obiekty się kolejno rysują (jest ich kilkanaście)
>>> Jeśli wyłączę widoczność panelu na którym się to rysuje i włączę po utworzeniu wszystkich elementów to efekt jest zadowalający ale jakoś mam wrażenie że jest na to bardziej sensowne rozwiązanie na które niestety się nie natknąłem.
>>>
>>> Możecie podpowiedzieć gdzie szukać?
>>> Dzięki!
>>>
>> Dziwne że dla kilkunastu komponentów jest to problem moze podczas
>> dodawania cos sie musi policzyc ?
>
> Nie, nic się nie liczy ale parametry tworzonych komponentów wczytywane są z kolejnych rekordów bazy danych więc może to powoduje opóźnienie. U mnie przy kilkunastu elementach zajmuje mu to około sekundy ale właściwie nie ma różnicy czy jest ich kilka czy kilkadziesiąt... muszę jeszcze poszperać w kodzie co dokładnie powoduje opóźnienie.

Wątpię by to było przyczyną ale dla wszystkie zawsze możesz zrobić 
prosty test te same dane wczytaj z pamięci i zobaczysz jak się będzie to 
zachowywać

Pozdrawiam
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads