Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Пересоздание контролов на панели  [new]
alekcvp
Member

Откуда:
Сообщений: 1142
Добрый день.

Имеется FlowPanel, на которой лежат несколько кнопок (от 1 до 16). Так же имеется некая процедура, которая пересоздаёт эти кнопки при изменениях связанных с ними объектов (можно было бы изменять кнопки, конечно, но пересоздать проще, т.к. меняться может не только состав и название, но и их порядок). При этом иногда при пересоздании кнопок видно как они исчезают и снова появляются (мелькает очень быстро, но всё равно раздражает).

Вопрос: можно ли как-нибудь заблокировать отрисовку панели с кнопками, пока они все не обновятся. Что-то вроде BeginUpdate/EndUpdate у всяких TListBox.Items.

Сейчас я просто показываю/скрываю панель, но это не лучший вариант, потому что над ней ListBox с Align = caClient.
Пробовал делать Enabled := False как самой панели, так и всей форме, но не помогает.
+ код
var
  Group: PGroup;
  Index: Integer;
begin
  fpFilters.Visible := False;
  try
    for Index := fpFilters.ControlCount - 1 downto 0 do
      if fpFilters.Controls[Index] is TButton then
        fpFilters.Controls[Index].Free;
    miGroups.Clear;
    CreateButton(NO_GROUP_ID, 'Все');
    for Group in FGroups do 
    begin
      CreateButton(Group.ID, Group.Name);
      CreateSubmenuItem(Group.ID, Group.Name);
    end;
    CreateSubmenuItem(NO_GROUP_ID, '-');
    CreateSubmenuItem(NO_GROUP_ID, 'Сбросить все');
  finally
    fpFilters.Visible := True;
  end;
end;
8 ноя 18, 11:25    [21727886]     Ответить | Цитировать Сообщить модератору
 Re: Пересоздание контролов на панели  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3479
alekcvp,

DisableAlign\EnableAlign

или что-то убойное вроде WM_SETREDRAW
8 ноя 18, 11:33    [21727894]     Ответить | Цитировать Сообщить модератору
 Re: Пересоздание контролов на панели  [new]
alekcvp
Member

Откуда:
Сообщений: 1142
kealon(Ruslan)
или что-то убойное вроде WM_SETREDRAW

То что доктор прописал, спасибо.
8 ноя 18, 11:39    [21727904]     Ответить | Цитировать Сообщить модератору
 Re: Пересоздание контролов на панели  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
alekcvp
можно ли как-нибудь заблокировать отрисовку панели с кнопками

Отправь панели сообщение, чтобы она не обновлялась: https://docs.microsoft.com/en-us/windows/desktop/gdi/wm-setredraw
8 ноя 18, 11:48    [21727936]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить