Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление sCheckListBox, мерцает 
V
    Опции темы
neweraser
Дата 14.6.2018, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 594
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Всем привет! Имеется такая процедура:
Код

procedure TDModule.AdvQueryAfterScroll(DataSet: TDataSet);
var
  i: Integer;
  Skills, CurSkill: String;
begin
  Skills:= AdvQuery.FieldByName('SKILLS').AsString;
  for i:= 0 to MainForm.SkillsSCheckListBox.Items.Count - 1 do
  begin
    CurSkill:= '"' + MainForm.SkillsSCheckListBox.Items[i] + '";';
    if AnsiPos(CurSkill, Skills) <> 0 then
      MainForm.SkillsSCheckListBox.Checked[i]:= True
    else
      MainForm.SkillsSCheckListBox.Checked[i]:= False;
  end;
end;

В которой я пробегаюсь по списку SkillsSCheckListBox и, если текущая запись найдена в поле датасета SKILLS - отмечаю чекбокс. Т.е. приходится так извращаться после каждого перехода по датасету, из-за чего список уж очень неприятно моргает. Можно ли как-то убрать мерцание или переписать прорисовывание, чтобы менялись только сами чекбоксы без текста после них? 
Надеюсь правильно донёс  smile 
DoubleBuffered пробовал - не помогает


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Romikgy
Дата 14.6.2018, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7273
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 25
Всего: 143



как часто вызывается AdvQueryAfterScroll ?

Добавлено @ 20:28
Код

procedure TDModule.AdvQueryAfterScroll(DataSet: TDataSet);
var
  i: Integer;
  Skills, CurSkill: String;
begin
  Skills:= AdvQuery.FieldByName('SKILLS').AsString;
SendMessage(MainForm.SkillsSCheckListBox.Handle, WM_SETREDRAW, 0, 0);
  for i:= 0 to MainForm.SkillsSCheckListBox.Items.Count - 1 do
  begin
    CurSkill:= '"' + MainForm.SkillsSCheckListBox.Items[i] + '";';
    if AnsiPos(CurSkill, Skills) <> 0 then
      MainForm.SkillsSCheckListBox.Checked[i]:= True
    else
      MainForm.SkillsSCheckListBox.Checked[i]:= False;
  end;
SendMessage(MainForm.SkillsSCheckListBox.Handle, WM_SETREDRAW, 1, 0);
MainForm.SkillsSCheckListBox.Refresh; // надо или нет не уверен.....
end;


Это сообщение отредактировал(а) Romikgy - 14.6.2018, 20:30


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
neweraser
Дата 15.6.2018, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 594
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Цитата(Romikgy @  14.6.2018,  20:21 Найти цитируемый пост)
как часто вызывается AdvQueryAfterScroll ?

По мере того, как пользователь выбирает записи в датасете, т.е. может крутить колесиком мыши, перебирая их довольно быстро, а может по одной тыкать мышкой.

Цитата(Romikgy @  14.6.2018,  20:21 Найти цитируемый пост)
MainForm.SkillsSCheckListBox.Refresh; // надо или нет не уверен.....

Не надо, с рефрешем мерцает)

Но в общем-то заметно меньше стало мерцать, не пойму от чего зависит, иногда чекбоксы отрисовываются красиво, а иногда моргают. Тему наверное закрываю, если есть еще идеи - напишите плз, буду пробовать, но и на этом большущее спасибо!  smile 

Да, может кому пригодится, в uses нужно добавить Messages и WinProcs, если их там нет.


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Romikgy
Дата 15.6.2018, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7273
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 25
Всего: 143



Цитата(neweraser @  15.6.2018,  07:57 Найти цитируемый пост)
если есть еще идеи 

я так понимаю состояния Checked[i] меняется редко .... я бы хранил отдельно список всех состояний и только в случае , если хоть один поменял статус перерисовывал все....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
neweraser
Дата 15.6.2018, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 594
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Цитата(Romikgy @  15.6.2018,  09:32 Найти цитируемый пост)
состояния Checked[i] меняется редко

Там более 30 чекбоксов, при выборе строки в датасете часть из них (от 2-х до 15) перерисовывается. Если только как-то перерисовывать отдельно взятые чекбоксы, но я думаю так дольше будет работать, или я не правильно понимаю)))

хм... Отключил DoubleBuffered и все заработало как надо  smile 

Это сообщение отредактировал(а) neweraser - 25.6.2018, 14:45


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Google
  Дата 24.5.2019, 12:01 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.