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

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

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

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

Купить рекламу на форуме 85 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2022, 18:16   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию := или assing

Есть два FontDialog
Нужно скопировать значения Font одного в другой.

Как лучше это делать? И есть ли вообще разница?
Код:
FontDialog2.Font:=FontDialog1.Font
Код:
FontDialog2.Font.Assing(FontDialog1.Font)
Kronos913 вне форума Ответить с цитированием
Старый 23.09.2022, 18:45   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,219
По умолчанию

В первом случае вы уничтожаете использовавшийся класс Font и присваиваете ссылку на новый (создаваемый по образу FontDialog.Font заново через конструктор копирования) свойству объекта.
Во втором случае существующий класс Font копирует из другого класса FontDialog.Font значения и ничего не пересобирается/копируется целиком.

С точки зрения скорости второй должен быть быстрее. Хотя однозначно утверждать нельзя. Все зависит от процессора, версии компилятора и операционной системы (в конце концов Font это объект GDI, а класс лишь интерфейс для работы с ним).

P.S. опечатку исправьте - Assign
macomics вне форума Ответить с цитированием
Старый 23.09.2022, 21:45   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
В первом случае вы уничтожаете использовавшийся класс Font и присваиваете ссылку на новый (создаваемый по образу FontDialog.Font заново через конструктор копирования) свойству объекта.
Во втором случае существующий класс Font копирует из другого класса FontDialog.Font значения и ничего не пересобирается/копируется целиком.

С точки зрения скорости второй должен быть быстрее. Хотя однозначно утверждать нельзя. Все зависит от процессора, версии компилятора и операционной системы (в конце концов Font это объект GDI, а класс лишь интерфейс для работы с ним).
И это актуально для любого типа объектов?
Kronos913 вне форума Ответить с цитированием
Старый 23.09.2022, 22:27   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,219
По умолчанию

Если предусмотрен метод копирования данных из подобного экземпляра класса, тогда он точно будет быстрее чем создание и удаление подобных объектов. Но Assign предусмотрен не везде.
macomics вне форума Ответить с цитированием
Старый 23.09.2022, 22:32   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Если предусмотрен метод копирования данных из подобного экземпляра класса, тогда он точно будет быстрее чем создание и удаление подобных объектов. Но Assign предусмотрен не везде.
Но мусор их памяти ж удаляется при этом?
Kronos913 вне форума Ответить с цитированием
Старый 23.09.2022, 22:38   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,219
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Но мусор их памяти ж удаляется при этом?
Какой именно мусор. Эти же операции копирования будут происходить при использовании конструктора копирования. Только при этом перед этим необходимо дополнительно выполнить манипуляции по высвобождению старого объекта и созданию нового. А копирование данных так и так будет выполнено.
macomics вне форума Ответить с цитированием
Старый 24.09.2022, 02:52   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,811
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Есть два FontDialog
Нужно скопировать значения Font одного в другой.

Как лучше это делать? И есть ли вообще разница?
А для чего это вам нужно?
northener на форуме Ответить с цитированием
Старый 29.09.2022, 15:41   #8
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
А для чего это вам нужно?
Нужно несколько FontDialog с одинаковым изначальным Font, но которые могут уже независимо друг от друга меняться при выполнении программы

Ну и замысел - создается один FontDialog на форме, он настраивается под изначальные параметры, а дальше, при запуске программы создаются другие FontDialog, в которые копируются параметры Font
Kronos913 вне форума Ответить с цитированием
Старый 29.09.2022, 20:30   #9
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,219
По умолчанию

А нафига вам несколько FontDialog? Если вам нужны разные копии Font, то и создавайте копии Font выбираемые через один и тот же FontDialog. Несколько окон вам зачем?
macomics вне форума Ответить с цитированием