powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работает функция SelectObject?
11 сообщений из 36, страница 2 из 2
Как работает функция SelectObject?
    #39627010
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovrgreatТы уж определись, у канваса есть хендл или у хендла есть канвас.
Функции DrawText в любом случае придется передать хендл какого-нибудь канваса, поэтому не понимаю, как можно обойтись тут без канваса.

То что вашего кота зовут Василий не означает, что "Василий" - это кошачье имя. Т.е. то что Canvas в качестве Handle использует HDC не означает что WinApi про него что-нибудь вообще знает. Это просто фантик над функциями WinApi. И фраза "отказаться от Canvas" подразумевает что вы в своих OnDrawЧтотоТам() просто делаете что-то вроде PaintDC := Canvas.Handle и далее забываете о существовании такого свойста/параметра (Canvas), а рисуете используя только функции WinApi.
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627011
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пациент глубоко засел в танке и заварил люки.
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627014
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot alekcvp]V.BorzovИ фраза "отказаться от Canvas" подразумевает что вы в своих OnDrawЧтотоТам() просто делаете что-то вроде PaintDC := Canvas.Handle и далее забываете о существовании такого свойста/параметра (Canvas), а рисуете используя только функции WinApi.
Тогда непонятно, что вы там выше вообще имели ввиду, ибо речь и шла как раз о функции SelectObject, в которую передается хендл канваса. О функции api, которая была задействована для увеличения скорости.
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627018
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, у меня такое ощущение, что тут кто-то троллит...
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627021
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай, если действительно танк:

V.Borzov Но почему тогда canvas.font показывает старые значения? Казалось бы, должен показать значения нового фонта, его имя, его размер... Хотя, если попросить canvas нарисовать чего-нибудь, рисует новым фонтом.alekcvpИ фраза "отказаться от Canvas" подразумевает что вы в своих OnDrawЧтотоТам() просто делаете что-то вроде PaintDC := Canvas.Handle и далее забываете о существовании такого свойста/параметра (Canvas) , а рисуете используя только функции WinApi.
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627028
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpБлин, у меня такое ощущение, что тут кто-то троллит...
Так у меня точно такое же чувство....
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627072
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С таким уровнем знаний, полезнее почитать книжки про WinApi с примерами и msdn, чем на форумах флудильню устраивать
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627074
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerС таким уровнем знаний, полезнее почитать книжки про WinApi с примерами и msdn, чем на форумах флудильню устраивать
Ну, так зачем флудите-то? Тут флудильщиков с грамотными советами и так хватает :)
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627077
LoneFast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то тема съехала во флудильню. Завязываем. :)
V.BorzovСложности со скоростью, скорость такой функции падает в полтора раза.амм... Полтора?? Что-то совсем не верится...
Вы уверены что именно из-за этого, а не в каком-то другом месте? Рисуется на само окно или на битмап?
Как замеряете? Сколько и каких элементов рисуется (длины строк и какие символы)? Размер/шрифт? Количество смен шрифтов?

Можете повторить на пустом проекте и выложить сюда? Тогда подумаем, а на словах скорее всего не получится.
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627129
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
procedure TForm31.Button1Click(Sender: TObject);
var TC :cardinal;
    i: integer;
    FONT1 :HFONT;
begin
  tc := gettickcount;
  for i := 1 to 1000000 do
  begin
    FONT1 := SelectObject(self.canvas.handle,button1.font.handle);
    try
      self.canvas.TextOut(0,0,formatfloat('тест тест тест 000',(gettickcount-tc) div 1000));
    finally
      selectobject(self.canvas.handle,FONT1);
    end
  end;
end;

procedure TForm31.Button2Click(Sender: TObject);
var TC :cardinal;
    i: integer;
    Font1 :TFont;
begin
  tc := gettickcount;
  for i := 1 to 1000000 do
  begin
    Font1 := tFont.create;
    try
      font1.assign(self.canvas.font);
      self.canvas.font := button1.font;
      self.canvas.TextOut(0,0,formatfloat('тест тест тест 000',(gettickcount-tc) div 1000));
      self.canvas.font := font1;
    finally
      Font1.free;
    end;
  end;
end;



Получается, можно не заморачиваться с SelectObject.

Всем спасибо!
...
Рейтинг: 0 / 0
Как работает функция SelectObject?
    #39627268
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Сохранение/восстановление каких либо значений должно всегда происходить по схеме
Код: pascal
1.
2.
3.
4.
5.
6.
сохранили;
try
  поработали
finally
  восстановили
end;


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.
procedure TForm31.Button3Click(Sender: TObject);
var TC :cardinal;
    i: integer;
    Font1 :TFont;
begin
  tc := gettickcount;
  Font1 := tFont.create;
  try
    for i := 1 to 1000000 do
    begin
      font1.assign(self.canvas.font);
      try
        self.canvas.font := button1.font;
        self.canvas.TextOut(0,0,formatfloat('тест тест тест 000',(gettickcount-tc) div 1000));
      finally
        self.canvas.font := font1;
      end;
    end;
  finally
    Font1.free;
  end;
end;
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работает функция SelectObject?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]