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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2024, 18:17   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Задать сразу оба параметра BitMap

Для объектов есть процедура SetBounds, которая сразу задаёт все четыре параметра
А есть ли для BitMap возможность одной процедурой задать и высоту и ширину?
Kronos913 вне форума Ответить с цитированием
Старый 14.04.2024, 19:36   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
procedure SetSize(AWidth, AHeight: Integer); override;
Но этого метода, похоже, нет в Дельфи 7.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.04.2024 в 19:42.
BDA на форуме Ответить с цитированием
Старый 14.04.2024, 21:14   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Не даёт такого. То есть, нужно только самому делать процедуру?
Изображения
Тип файла: png изображение_2024-04-14_211411485.png (14.8 Кб, 35 просмотров)
Тип файла: png изображение_2024-04-14_211430558.png (6.8 Кб, 34 просмотров)
Kronos913 вне форума Ответить с цитированием
Старый 14.04.2024, 21:24   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Присвоение размера даже ссылается на непонятно что...
Изображения
Тип файла: png изображение_2024-04-14_211910959.png (14.4 Кб, 34 просмотров)
Kronos913 вне форума Ответить с цитированием
Старый 14.04.2024, 21:25   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

В оригинальных ресурсах я нашел вот это:
Код:
unit Graphics;
Код:
procedure TBitmap.SetHeight(Value: Integer);
var
  DIB: TDIBSection;
begin
  with FImage do
    if FDIB.dsbm.bmHeight <> Value then
    begin
      HandleNeeded;
      DIB := FDIB;
      DIB.dsbm.bmHeight := Value;
      DIB.dsbmih.biHeight := Value;
      CopyImage(FHandle, FPalette, DIB);
      Changed(Self);
    end;
end;
Код:
procedure TBitmap.SetWidth(Value: Integer);
var
  DIB: TDIBSection;
begin
  with FImage do
    if FDIB.dsbm.bmWidth <> Value then
    begin
      HandleNeeded;
      DIB := FDIB;
      DIB.dsbm.bmWidth := Value;
      DIB.dsbmih.biWidth := Value;
      CopyImage(FHandle, FPalette, DIB);
      Changed(Self);
    end;
end;
И вот вопрос - если я попробую на основе этого собрать процедуру - насколько велик риск того, что что-то пойдёт не так?
Kronos913 вне форума Ответить с цитированием
Старый 14.04.2024, 21:45   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
И вот вопрос - если я попробую на основе этого собрать процедуру - насколько велик риск того, что что-то пойдёт не так?
Вы бы лучше сформулировали ответ на вопрос: зачем это вам нужно? Опять попытка сделать оптимизацию там, где ею в принципе и не пахнет? Для решения ваших задач надо отказаться от VCL и GDI для начала...
Arigato вне форума Ответить с цитированием
Старый 14.04.2024, 23:26   #7
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Присвоение размера даже ссылается на непонятно что...
Это вызовы виртуальных методов через VMT.

Цитата:
Сообщение от Arigato Посмотреть сообщение
Опять попытка сделать оптимизацию там, где ею в принципе и не пахнет?
По всей видимости, это попытка последовать моему совету о минимизации обращения к процедурным свойствам.
Vapaamies вне форума Ответить с цитированием
Старый 15.04.2024, 14:11   #8
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Вы бы лучше сформулировали ответ на вопрос: зачем это вам нужно?
Ок, объясню с самого начала. Вообще я работаю в совершенно другой сфере. Но знания по программированию определенные у меня есть. И я сделал себе программу, которая ощутимо упростила процесс работы. То на что раньше уходило часов 10, сейчас делаю за 2.

Подобным образом знания по программированию я и ранее в другой деятельности применял.

В свободное время между проектами я где-то дорабатываю программу. Все вопросы которые я задаю в целом сводятся к таким вещам

1. Добавление новых функций в программу.

2. Исправление ошибок, которые внезапно выскакивают в процессе работы

3. Ускорение программы. После некоторых сеансов оптимизации программа действительно ускорялась, когда находился более прямой способ что-то сделать.

4. Создание наработок, которые могут понадобиться для других программ. Большую часть процедур я вынес в отдельный юнит.

5. Расширение знаний Delphi. Потому что мало ли как сложится жизнь и возможно со временем я и подрабатывать буду в этой сфере. Сильно на это не надеюсь, но не скидываю со счетов такой вариант.

6. Периодически я занимаюсь оптимизаций просто для некоего полезное развлечение.

7. Чтобы перед всеми понтоваться "у меня моя полноценная рабочая программа занимает меньше мегайта" (текущий размер - 990 208 байт)

К слову говоря, как-то раз был случай, когда моя 900килобайтная программа перегрузила оперативку, когда внутрь было загружено 40 больших фотографий. Пришлось переделывать процедуру загрузки - если загружаемая графика больше размеров экрана - то сжимать картинку перед загрузкой в TImage
Kronos913 вне форума Ответить с цитированием
Старый 15.04.2024, 14:20   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Чтобы перед всеми понтоваться "у меня моя полноценная рабочая программа занимает меньше мегайта" (текущий размер - 990 208 байт)
Это совершенно неважный параметр. Или у вас место на диске заканчивается? Оптимизировать в первую очередь надо алгоритмы и используемые библиотеки.

GDI для отрисовки годится лишь частично, так как он очень медленный. И что-то оптимизировать в его рамках смысла не имеет. В зависимости от конкретного применения, можно подобрать более подходящую библиотеку.

Аналогично VCL, он прекрасно справляется со своими задачами, но заниматься поиском способов сэкономить пару байт в рамках данной библиотеки совершенно лишено смысла. Есть альтернатива - библиотека KOL, она лишена особенности VCL резко раздувать размеры EXE. Уверен, то с KOL у вас было бы не 1 Мб, а раза в два меньше. Только остается вопрос: зачем? Нет никакой проблемы, если ЕХЕ весит хоть 10 Мб...
Arigato вне форума Ответить с цитированием
Старый 15.04.2024, 14:37   #10
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Я пытался загуглить что такое GDI и VCL но ничего относящегося к теме не нашел.
По запросу GDI вообще выпали статьи про автомобильные двигатели
Kronos913 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделить все рисунки-фото и для всех сразу задать одинаковый формат. АННА-ЕАО Microsoft Office Word 13 20.12.2016 22:20
Image processing toolbox matlab задать для обработки сразу несколько картинок irchick Помощь студентам 0 28.07.2016 10:55
из-за чего появляется полоса (на скрине) при вставке BitMap в TImage? - Проблема с Bitmap Grey@2009 Мультимедиа в Delphi 2 02.01.2010 20:23
Народ помогите !!Сразу последовательность чтоб выдавала и задать начальное чило Алексей_xXx Помощь студентам 4 24.05.2009 17:57
задать печать одной кнопкой, но сразу нужное кол-во копий Kisunya2104 Microsoft Office Excel 1 09.08.2007 22:07