|
|
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Font назначить канвасу можно так oldfont := selectobject(canvas.handle,MyFont.handle); В OldFont вернется при этом Handle замененного Font, который можно ему тем же макаром вернуть взад после употребления. Но почему тогда canvas.font показывает старые значения? Казалось бы, должен показать значения нового фонта, его имя, его размер... Хотя, если попросить canvas нарисовать чего-нибудь, рисует новым фонтом. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 20:09 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
canvas.font ничего не знает о ваших манипуляциях с WinAPI напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 20:51 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 12:05 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Код: pascal 1. 2. Уверены в коде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 14:23 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Как уже верно сказали - нежелательно смешивать WinAPI и VCL. Обычно будут только глюки. Максимум что можно попробовать: Код: pascal 1. Но об старом/бывшем думаю можно уже забыть. А почему вы не хотите хранить нужные экземпляры в виде объектов TFont? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 15:24 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
LoneFastА почему вы не хотите хранить нужные экземпляры в виде объектов TFont? Я не сказал, что не хочу. Я лишь спросил, почему так, как есть. Ответ насчет смешивания - вполне устраивает. VCL и API не надо путать и ожидать от них синхронизации. Смешивать-то можно, но надо понимать последствия. В отдельных случаях использую сейчас первый вариант, SelectObject, так как он максимально быстро решает задачу замещения и сохранения старого варианта, а во всех остальных - уже через VCL, через canvas.font :=. Пример с OldFont некорректен, так как Tfont - это объект, поэтому, если после работы хотим вернуться к старому объекту, то надо сначала обеспечить объект-приемник, а потом присваивать через Assign его свойствам свойства сохраняемого, потом - обратно. Поэтому canvas.font := не всегда удобен с точки зрения скорости. Само по себе присваивание ничем не медленнее, но если требуется восстановить предыдущее, то накладные расходы слишком велики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 15:53 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
эм... У меня не так: Код: pascal 1. 2. 3. а вот так: Код: pascal 1. 2. 3. Можете попытаться даже так: Код: pascal 1. 2. 3. 4. 5. 6. Но тут уже без гарантий, не могу просчитать - вдруг VCL некстати полностью очистит Old... А накладных расходов там практически нету. Кстати, ещё бывает SaveDC() . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 16:05 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
V.Borzov_Vasilisk_ Код: pascal 1. 2. Уверены в коде?У программиста не должно возникнуть сложностей, чтобы переписать _Vasilisk_ Код: pascal 1. на Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 16:48 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_У программиста не должно возникнуть сложностей, чтобы переписать _Vasilisk_ Код: pascal 1. на Код: pascal 1. 2. 3. 4. 5. 6. Конечно, сложностей нет. Сложности со скоростью, скорость такой функции падает в полтора раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 16:56 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
V.BorzovКонечно, сложностей нет. Сложности со скоростью, скорость такой функции падает в полтора раза. Если так принципиально важна скорость, то имеет смысл вообще отказаться от Canvas и рисовать всё через WinApi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 17:31 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
alekcvpЕсли так принципиально важна скорость, то имеет смысл вообще отказаться от Canvas и рисовать всё через WinApi. Отказаться от canvas? Что предлагаете конкретно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 17:36 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
V.BorzovalekcvpЕсли так принципиально важна скорость, то имеет смысл вообще отказаться от Canvas и рисовать всё через WinApi. Отказаться от canvas? Что предлагаете конкретно? Что может быть конкретнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 17:51 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
YuRockV.Borzovпропущено... Отказаться от canvas? Что предлагаете конкретно? Что может быть конкретнее? Здесь непонятно, как значит "отказаться от canvas". SelectObject - это как раз и есть функция API, и она задействована для максимальной скорости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 18:34 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
LoneFastКстати, ещё бывает SaveDC() . Она для других целей, инструментами холста не оперирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 18:45 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисLoneFastКстати, ещё бывает SaveDC() . Она для других целей, инструментами холста не оперирует. Ну так она сохраняет состояние сразу всех инструментов. Чтобы, после того, как что-то там поменяли, всё восстановить функцией RestoreDC. Не так? Только зачем сохранять все инструменты, если нам нужен только один Font, поэтому чаще всего это излишне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 18:51 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
V.BorzovЗдесь непонятно, как значит "отказаться от canvas".Это значит не использовать Canvas. WM_PAINT, BeginPaint... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 18:54 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
V.BorzovСоколинский Бориспропущено... Она для других целей, инструментами холста не оперирует. Ну так она сохраняет состояние сразу всех инструментов. Чтобы, после того, как что-то там поменяли, всё восстановить функцией RestoreDC. Не так? Не так. Иногда полезно читать доки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:01 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисV.Borzovпропущено... Ну так она сохраняет состояние сразу всех инструментов. Чтобы, после того, как что-то там поменяли, всё восстановить функцией RestoreDC. Не так? Не так. Иногда полезно читать доки. "Функция SaveDC сохраняет текущее состояние указанного контекста устройства (DC) путем копирования данных, описывающих выбранные объекты и графические режимы (например, растровое изображение, кисть, палитру, шрифт, ручку, область, режим рисования и режим отображения) в контекст стек." Что здесь не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:04 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
YuRockV.BorzovЗдесь непонятно, как значит "отказаться от canvas".Это значит не использовать Canvas. WM_PAINT, BeginPaint... Раскрыть-то мысль свою можете? Непонятно всё равно, как это "не использовать canvas и рисовать всё через winapi". winapi не пользуется canvas? та же selectobject? или это не функция winapi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:07 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
V.Borzovwinapi не пользуется canvas?Конечно не пользуется. Это canvas пользуется winapi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:08 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
YuRockV.Borzovwinapi не пользуется canvas?Конечно не пользуется. Это canvas пользуется winapi. Хорошо, тогда конкретно: функция function DrawText(hDC: HDC; lpString: PWideChar; nCount: Integer; var lpRect: TRect; uFormat: UINT): Integer; external user32 name 'DrawTextW'; использует canvas или не использует? или это не функция winapi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:17 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Ты где-то там видишь в параметрах TCanvas? Вот и ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:23 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
rgreatТы где-то там видишь в параметрах TCanvas? Вот и ответ. а первый параметр этой функции? туда же передается canvas.handle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:29 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Ты уж определись, у канваса есть хендл или у хендла есть канвас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:32 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
rgreatТы уж определись, у канваса есть хендл или у хендла есть канвас. Функции DrawText в любом случае придется передать хендл какого-нибудь канваса, поэтому не понимаю, как можно обойтись тут без канваса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:42 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
V.BorzovrgreatТы уж определись, у канваса есть хендл или у хендла есть канвас. Функции DrawText в любом случае придется передать хендл какого-нибудь канваса, поэтому не понимаю, как можно обойтись тут без канваса. То что вашего кота зовут Василий не означает, что "Василий" - это кошачье имя. Т.е. то что Canvas в качестве Handle использует HDC не означает что WinApi про него что-нибудь вообще знает. Это просто фантик над функциями WinApi. И фраза "отказаться от Canvas" подразумевает что вы в своих OnDrawЧтотоТам() просто делаете что-то вроде PaintDC := Canvas.Handle и далее забываете о существовании такого свойста/параметра (Canvas), а рисуете используя только функции WinApi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:49 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Пациент глубоко засел в танке и заварил люки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 19:57 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
[quot alekcvp]V.BorzovИ фраза "отказаться от Canvas" подразумевает что вы в своих OnDrawЧтотоТам() просто делаете что-то вроде PaintDC := Canvas.Handle и далее забываете о существовании такого свойста/параметра (Canvas), а рисуете используя только функции WinApi. Тогда непонятно, что вы там выше вообще имели ввиду, ибо речь и шла как раз о функции SelectObject, в которую передается хендл канваса. О функции api, которая была задействована для увеличения скорости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 20:02 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Блин, у меня такое ощущение, что тут кто-то троллит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 20:26 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
На всякий случай, если действительно танк: V.Borzov Но почему тогда canvas.font показывает старые значения? Казалось бы, должен показать значения нового фонта, его имя, его размер... Хотя, если попросить canvas нарисовать чего-нибудь, рисует новым фонтом.alekcvpИ фраза "отказаться от Canvas" подразумевает что вы в своих OnDrawЧтотоТам() просто делаете что-то вроде PaintDC := Canvas.Handle и далее забываете о существовании такого свойста/параметра (Canvas) , а рисуете используя только функции WinApi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 20:32 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
alekcvpБлин, у меня такое ощущение, что тут кто-то троллит... Так у меня точно такое же чувство.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 20:40 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
С таким уровнем знаний, полезнее почитать книжки про WinApi с примерами и msdn, чем на форумах флудильню устраивать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2018, 00:22 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
white_niggerС таким уровнем знаний, полезнее почитать книжки про WinApi с примерами и msdn, чем на форумах флудильню устраивать Ну, так зачем флудите-то? Тут флудильщиков с грамотными советами и так хватает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2018, 00:55 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
Что-то тема съехала во флудильню. Завязываем. :) V.BorzovСложности со скоростью, скорость такой функции падает в полтора раза.амм... Полтора?? Что-то совсем не верится... Вы уверены что именно из-за этого, а не в каком-то другом месте? Рисуется на само окно или на битмап? Как замеряете? Сколько и каких элементов рисуется (длины строк и какие символы)? Размер/шрифт? Количество смен шрифтов? Можете повторить на пустом проекте и выложить сюда? Тогда подумаем, а на словах скорее всего не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2018, 02:22 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
LoneFastмм... Полтора?? Что-то совсем не верится... хм.. я наврал. Мои тесты были некорректны. Вот этот пример показывает, что скорость практически одинаковая, и TFont.Create практически ничего не замедляет. Ошибка была в содержимом выводимого текста. Ну, если я опять чего не напутал: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Получается, можно не заморачиваться с SelectObject. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2018, 14:15 |
|
||
|
Как работает функция SelectObject?
|
|||
|---|---|---|---|
|
#18+
1. Сохранение/восстановление каких либо значений должно всегда происходить по схеме Код: pascal 1. 2. 3. 4. 5. 6. 2. Зачем миллион раз создавать/уничтожать объект TFont, если это можно сделать только один раз? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2018, 11:20 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041035]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 554ms |

| 0 / 0 |
