Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2008-09-24 15:52:38 ЛС | профиль | цитата
nesco, немного дописал IndexManager на предмет динамической обработки индексов во время выполнения программы(идея сделать его именно отдельным менеджером, а не св-ом элемента все же оправдала себя). Пример работы с ним:
code_10058.txt

какие есть соображения: во время операции Write на массиве Indexes(кнопка "to 0") по хорошему наверно стоило бы автоматически вызывать Invalidate на ListBox, что приводит нас к необходимости как-то хранить в самом менеджере списки всех элементов, его использующих. Скажем так:

#pas
TIIndexManager = record
outidx:function(inidx:integer): integer of object;
addControl:procedure (obj:PControl);
removeControl:procedure (obj:PControl);
end;
...
procedure TMyClass.Init;
begin
...
if assigned(_prop_IndexManager) then _prop_IndexManager.AddControl(Control);
...
end;

------------ Дoбавленo:

и еще: может это только у меня так, но при запуске примера выше вот такая наблюдается картинка:

------------ Дoбавленo:

этот артифакт появляется при получение фокуса элементом и исчезает при потере фокуса. При добавление хотя бы одного пункта эффект так же пропадает
карма: 27
0
файлы: 2code_10058.txt [2.3KB] [265], managers_bug.png [4.9KB] [332]
Разработчик
Ответов: 26170
Рейтинг: 2127
#2: 2008-09-24 16:25:37 ЛС | профиль | цитата
Dilma писал(а):
по хорошему наверно стоило бы автоматически вызывать Invalidate на ListBox

Не обязательно. При добавлении пункта, для контрола автоматически вызывается OnDrawItem.

Dilma писал(а):
и еще: может это только у меня так

У меня нормально, никаких артефактов

Да, а почему бы не сделать то же самое и для ComboBox'a
------------ Дoбавленo:

Честно, я тоже хотел это сделать, но... банально забыл
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2008-09-24 16:32:21 ЛС | профиль | цитата
nesco писал(а):
При добавлении пункта, для контрола автоматически вызывается OnDrawItem.

не совсем понимаю как связано изменение индекса с добавление нового пункта? Ты кнопку "to 0" нажимал? Там добавления никакого нет - по ней всего лишь меняется индекс выбранного пункта на 0, но элемент не обновляется пока там мышкой не поводишь

nesco писал(а):
Да, а почему бы не сделать то же самое и для ComboBox'a

тоже самое что? В описанных правках ListBox или иной какой-то элемент не участвовал
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#4: 2008-09-24 16:46:38 ЛС | профиль | цитата
Просто я не понял, что это относится к индексу, тогда, действительно, надо перерисовать все. Ты предложил все ListBox'ы хранить в менеджере, а может проще чего придумать можно

Dilma писал(а):
В описанных правках ListBox

В ListBox'e немного изменен код, там Result на функцию добавлен.
карма: 22

0
Ответов: 3655
Рейтинг: 69
#5: 2008-09-24 16:48:08 ЛС | профиль | цитата
Dilma писал(а):
может это только у меня так, но при запуске примера выше вот такая наблюдается картинка:

У меня тоже


карма: 0

0
файлы: 1164604.jpg [8.6KB] [352]
Разработчик
Ответов: 26170
Рейтинг: 2127
#6: 2008-09-24 17:08:46 ЛС | профиль | цитата
Может сказывается KOL от Galkov'a, но у меня при запуске такого артефакта нет.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2008-09-24 17:25:53 ЛС | профиль | цитата
nesco писал(а):
В ListBox'e немного изменен код, там Result на функцию добавлен.

это давно было исправлено и к данной теме отношения не имеет
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#8: 2008-09-24 17:31:11 ЛС | профиль | цитата
Dilma писал(а):
это давно было исправлено и к данной теме отношения не имеет

Ну, может быть, но исправления оказались сегодня.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2008-09-24 17:35:34 ЛС | профиль | цитата
nesco, ты на этом так акцентируешь внимание, что можно подумать будто корретный возврат значения в _OnDrawItem имеет хоть какое-то отношение к работе элемента IndexManager. Хотелось бы знать какое
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#10: 2008-09-24 17:39:35 ЛС | профиль | цитата
Dilma, тут с твоей структурой пытаюсь разобраться. Когда собирается вызываться removeControl, при уничтожении контрола в destructore, или когда
------------ Дoбавленo:

Dilma писал(а):
Можно подумать будто корретный возврат значения в _OnDrawItem имеет хоть какое-то отношение к работе элемента IndexManager

Да никакого, я уже понял, когда полез разбираться, а вот обратное хотелось бы иметь
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2008-09-24 18:00:03 ЛС | профиль | цитата
nesco писал(а):
Когда собирается вызываться removeControl, при уничтожении контрола в destructore

да


карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#12: 2008-09-24 18:03:29 ЛС | профиль | цитата
Dilma, а не проще будет дать команду на перерисовку всех дочерних окон формы из менеджера
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#13: 2008-09-24 21:15:56 ЛС | профиль | цитата
nesco, т.е. сделать еще одну мину типа MouseEnter-MouseLeave

а проблема с появлением артифакта от того, что в _OnDrawItem приходит команда на отрисовку элемента с индексом -1, и вот в этой строке

#pas
DrawText(DC, PChar(Items[ItemIdx]), -1, ARect, _Flags);
у тебя выводится элемент Items[-1], который мы с Вячеслав, ом и наблюдаем. Вероятно событие сделано для очистки или еще для чего, но в менеджер свой надо вставить проверочку.
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#14: 2008-09-25 14:16:40 ЛС | профиль | цитата
Dilma писал(а):
который мы с Вячеслав, ом и наблюдаем

Млин, а у меня его почему нет А, припоминаю, что Galkov что-то творил в KOL'e с индексами Box'ов

Dilma писал(а):
но в менеджер свой надо вставить проверочку

Запретить отрисовку текста по Items[-1], так что ли



------------ Дoбавленo:


Исправлено

------------ Дoбавленo:


Dilma, поэкспериментировал со списком контролов, но нифига не понял, что контролам послать для перерисовки, на WM_PAINT у них никаких эмоций не возникает

------------ Дoбавленo:


Все, только что допер -- Invalidate

------------ Дoбавленo:


Добавлено
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#15: 2008-09-25 17:08:19 ЛС | профиль | цитата
nesco, только же недавно в параллельной теме мигание окон обсуждали
карма: 27
0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)