Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2015, 22:13   #21
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Обычно принято - каждый участок кода, который собирается что-то нарисовать, просто ставит свойства как ему нужно, после рисует. И не думает что кто-то будет рисовать после него.
Мне этот подход тоже не особо нравится. Но почему через стек?

Можно при создании окна создавать массивы TPen и TBrush. Перед рисованием Assign'ить нужные. Например по ID, али ещё как.
Или хранить массив из 4-х или сколько там параметров Integer. Хотя в VCL эти классы работают не особо продумано...
ResourceSpace вне форума Ответить с цитированием
Старый 31.07.2015, 22:29   #22
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
массивы TPen и TBrush
массивы - это перебор.
Цитата:
Но почему через стек?
Выше я выложил свой альтернативный вариант без стека (пост #16). Как думаешь, что будет менее жирным и более шустрым - твой вариант или мой?

Админы, перенесите тему куда-нить, она перестала относиться к ассемблеру.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 31.07.2015 в 22:34.
min@y™ вне форума Ответить с цитированием
Старый 31.07.2015, 23:29   #23
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

А у вас что получается? Массив свойств в формате "4байта", только в стеке или в незнакомом мне TStack<>.
Не в курсе сильно ли изменилась реализация TPen и TBrush, но в Д7 при каждом Set%PROPERTY_NAME%() выполняется столько кода, что через Assign должно быть быстрее, как минимум не медленнее. Сомневаюсь что Эмбасы это как-то сильно оптимизировали.
Насчёт жирности - не вижу ничего жирного в паре строк вида:
Код:
with Canvas do
  begin
    Brush.Assign(Brushes[3]); Pen.Assign(Pens[5]);
    // Или // SetBrush(Brush, 3); SetPen(Pen, 5);
    // Или // SetBrushAndPen(Brush, 3, Pen, 5);
    // куча вызовов всяких методов Canvas
  end;
В конце концов можно просто на практике сравнить что шустрее или жирнее. :3
ResourceSpace вне форума Ответить с цитированием
Старый 31.07.2015, 23:44   #24
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А у вас что получается? Массив свойств в формате "4байта"
Правильно. Массив из масксимум 7 DWORD-ячеек. А у тебя - массив размером максимум

(размер_области_памяти_под_TPen + размер_области_памяти_под_TBrush) / 7.

Причём, естественно,

размер_области_памяти_под_Txxx SizeOf(Txxx) = 4 байта.

Прикинь, сколько вешать в граммах?

Цитата:
только в стеке
Нет там стека, список там.
Цитата:
или в незнакомом мне TStack<>
TStack<тип> - это TStack, где Items[Index]: тип, а не Items[Index]: Pointer.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось Stilet; 01.08.2015 в 09:03.
min@y™ вне форума Ответить с цитированием
Старый 31.07.2015, 23:51   #25
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Ну и что? Оперативка нынче не в граммах меряется. Вы сперва скорость оптимизировали, теперь почему-то память считаете? Бывает что-то одно.
А сколько у вас планируется разных кистей и ручек? При Create окна создали по 10-20 штук и хватит, пусть живут до Destroy.

Я в курсе что есть <T>, я про ваш предыдущий вариант.
ResourceSpace вне форума Ответить с цитированием
Старый 01.08.2015, 00:12   #26
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Ну и что? Оперативка нынче не в граммах меряется.
Ооооооо! Ну началось!
Цитата:
Вы сперва скорость оптимизировали, теперь почему-то память считаете? Бывает что-то одно.
Хочу оптимальный баланс. Мне этот подход интересен как профессионалу (for experience only) и может пригодиться на практике в боевых проектах и совсем в других масштабах! Спорить будешь?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.08.2015, 00:21   #27
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Вы первый сказали мол сколько вешать.

Посмотрите что делается при выполнении "P.Width:=...", "P.Color:=..." и прочих вызовах. Может в вашей версии Делфи там не через одно место...
А я бы просто сравнил шустрость в RunTime.
ResourceSpace вне форума Ответить с цитированием
Старый 01.08.2015, 02:50   #28
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А я бы просто сравнил шустрость в RunTime.
Отпишусь-ка от темы, пока не началось. Ты меня устал.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.08.2015, 07:40   #29
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Есть системные вызовы SaveDC() / RestoreDC()
waleri вне форума Ответить с цитированием
Старый 01.08.2015, 09:03   #30
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Темку перенес.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плагины OllyDump для OllyDbg- какой из плагинов круче? Dimka-novitsek Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 29.08.2014 23:46
давайте вместе игру зделаем круче варкрафта Coel Свободное общение 24 27.02.2010 16:05
надо чтобы комп автоматически перезагружался, а ещё круче чтоб вырубался steck Общие вопросы Delphi 3 01.04.2007 15:52