![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Timer vs ListBox [D7]
Наталья © (2013-01-21 11:06:00)Здравствуйте. При прокрутке ListBox колесом мыши (именно при прокрутке колесом) Работа таймера в программе приостанавливается. Как можно обойти этот не желательный эффект?
brother (2013-01-22 06:17:00) [21][48] не получится так...
NoUser (2013-01-22 04:12:00) [22]
procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
ListBox1.ItemIndex:= ListBox1.ItemIndex+1;
Handled:=True;
end;
procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
if ListBox1.ItemIndex>0 then
ListBox1.ItemIndex:=ListBox1.ItemIndex-1;
Handled:=True;
end;
> QAZ10 (21.01.13 11:58) [9]
>
+1
знайка (2013-01-21 20:15:00) [23]
> а 1% на чем?
ScrollBox & PaintBox
aka (2013-01-21 19:33:00) [24]
> AZ10 (21.01.13 19:31) [45]
>
> странно :)
> 99% плейлистов на нем и сделаны
Это кто вам такую информацию слил?
а 1% на чем?
QAZ10 (2013-01-21 19:31:00) [25]странно :)
99% плейлистов на нем и сделаны
Наталья (2013-01-21 18:43:00) [26]
> listview
Вообще не подходит,
QAZ10 (2013-01-21 16:56:00) [27]
> Ну и чем же заменить?
listview
aka (2013-01-21 16:37:00) [28]
> Sha © (21.01.13 16:34) [40]
Это переливание из пустого в порожнее, давайте больше не развивать эту тему.
aka (2013-01-21 16:35:00) [29]
> QAZ10 (21.01.13 11:58) [9]
>
>
> > Как можно обойти этот не желательный эффект?
>
> отключить в винде "плавную прокрутку списков"
> либо не использовать соотв. компоненты
Ну читали, и что?
1) Отключить программно или вручную.
и то и другое это большие в сто раз ивращение чем моя замена на ScrollBox & PaintBox.
2) Ну и чем же заменить?
Sha (2013-01-21 16:34:00) [30]> aka (21.01.13 16:29) [38]
Во-первых, сделать.
Во-вторых, есть другое окно.
В третьих, фокус внимания пользователя не может быть одновременно на всем: и на ползунке, и на спектре, и на списке. Решите, с чем он работает, все остальное не важно.
QAZ10 (2013-01-21 16:30:00) [31]
> brother © (21.01.13 15:28) [26]
а читал ли кто вообще что написано в [9] ???!!!
aka (2013-01-21 16:29:00) [32]
> Sha © (21.01.13 16:15) [35]
А если прятать прийдется все на свете, ну хотя бы ползунок прогресса проигрывание, ведь его передвижения окромя как таймером не сделать.
aka (2013-01-21 16:23:00) [33]
> Sha © (21.01.13 16:15) [35]
Кто же спорит. Но если нужно вывести только список, то можно и в PaintBox. Я там еще и процентное выделение текущей песни другим цветом делал в зависимости от времени проигрывания.
Плохиш (2013-01-21 16:20:00) [34]Из основ программирования под виндовс: События таймеров имеют наинизший приоритет, соответственно выполняются после обработки всех имеющихся/появляющихся в системе событий. Т.ч. прекращайте заниматься онанизмом.
Sha (2013-01-21 16:15:00) [35]А если, скажем, для отображения списка используется TListView, который во многом ведет себя аналогично TListBox, то придется реализовать весь его функционал вручную?
Гораздо проще применить другое интерфейсное решение, например, сдвиг отображалки спектра за пределы окна на время работы со списком.
aka (2013-01-21 16:04:00) [36]
> Sha © (21.01.13 15:59) [33]
Я не знаю что визуализирует автор вопроса. Лично у меня это был спектр частот
И действительно получается не красиво, когда крутишь колесо, а отрисовка останавливается. В идеале этого не должно быть.
Чититать данные для этого можно только таймером, который виснет.
Sha (2013-01-21 15:59:00) [37]> aka (21.01.13 15:55) [31]
Мне не совсем ясно, зачем нужна визуализация плеера в момент прокрутки.
aka (2013-01-21 15:58:00) [38]А сам выводил из в StringList.
aka (2013-01-21 15:55:00) [39]Уважаемые, я сталкивался с подобной проблемой (кстати тоже писал когда то плеер).
Может я извращенец, но проблему решил заменой ListBox на
ScrollBox и PaintBox.
Я все рано собирался в ListBox через OnDrawItem, рисовать по своему, а в PaintBox это получилось даже как то удобней.
только для прокрутки колесом нужно:
procedure TForm1.ScrollBoxMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Handled := True;
TScrollBox(Sender).VertScrollBar.Position := TScrollBox(Sender).VertScrollBar.Position - WheelDelta;
end;
и учтите, что в ScrollBox нет фокуса. Нужно мудрить самостоятельно, ну хотя бы так
procedure TForm1.ScrollBoxClick(Sender: TObject);
begin
TScrollBox(Sender).SetFocus;
end;
Sha (2013-01-21 15:34:00) [40]> Наталья (21.01.13 15:29) [28]
> Application.ProcessMessages;
Пристрелите того гада, который вам это показал.