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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2021, 14:13   #1
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию Разбираем mspaint на составляющие

Кто-нибудь знает при помощи каких компонентов Delphi можно реализовать:
1) область рисования (холст) как в программе mspaint?
2) текстовую надпись как в программе mspaint?
3) возможность изменения размера холста и рамки тестовой надписи при помощи мыши как в программе mspaint?
ichi вне форума Ответить с цитированием
Старый 15.07.2021, 16:19   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

http://www.delphi-manual.ru/drawing.php
digitalis вне форума Ответить с цитированием
Старый 15.07.2021, 17:18   #3
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Спасибо за ссылку. Буду изучать.
ichi вне форума Ответить с цитированием
Старый 15.07.2021, 18:13   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Ставите Delphi 7 открываете папку с примерами там будет такая рисовалка наподобие патента. Изучаете код получаете профит.
А вот векторный редактор можете у меня подсмотреть https://gitlab.com/pavia00/veditor/t...BD%D0%B8%D1%8F
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 16.07.2021, 12:25   #5
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Ставите Delphi 7 открываете папку с примерами там будет такая рисовалка наподобие патента. Изучаете код получаете профит.
А вот векторный редактор можете у меня подсмотреть https://gitlab.com/pavia00/veditor/t...BD%D0%B8%D1%8F
Спасибо за ответ. Попробую разобраться.
ichi вне форума Ответить с цитированием
Старый 25.08.2021, 18:24   #6
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Я использую компонент Paintbox для создания холста. Если мне нужно чтобы размер холста соответствовал размеру бумаги А4 (210х297мм) или А5 (148х210мм), то как правильно перевести миллиметры в пиксели, т.к. свойства height и width компонента Paintbox задаются в пикселях?
ichi вне форума Ответить с цитированием
Старый 25.08.2021, 20:07   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

На мой взгляд нужно отталкиваться от требуемого DPI (https://ru.wikipedia.org/wiki/Dots_per_inch).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.08.2021, 21:37   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от ichi Посмотреть сообщение
Я использую компонент Paintbox для создания холста. Если мне нужно чтобы размер холста соответствовал размеру бумаги А4 (210х297мм) или А5 (148х210мм), то как правильно перевести миллиметры в пиксели, т.к. свойства height и width компонента Paintbox задаются в пикселях?
DPI - количество точек на дюйм. Тут точки это синоним к слову пиксели. Дюйм мера длины 1 дюйм = 25.4 мм
Понятие DPI это виртуальное понятие. Иногда оно равно 96 иногда 72 иногда 300 и даже 3600.

Для печати вам надо открыт принтер и он вернёт своё значение DPI а так же размеры листа.
Обычно когда создают картинку DPI холста приравнивают 96.
Если вы загружаете картинку из файла, то у неё будет свой DPI отличны от 96. А потом её выводят на принтер отмасштабировав под нужные размеры.

Как это сделано можно подсмотреть к примеру здесь:
https://github.com/BerndGabriel/Html...ce/vwPrint.pas
Код:
 FPPIX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  FPPIY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  FPaperWidth := GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
  FPaperHeight := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
  FOffsetX := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
  FOffsetY := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
  FPgHeight := Printer.PageHeight;
  FPgWidth := Printer.PageWidth;

А ещё к примеру у Word есть фича если установить масштаб=100% и приложить лист бумаги то они совпадут. Там тоже делают масштабирование под нужные размеры DPI монитора. Только получить его DPI сложнее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 25.08.2021, 22:21   #9
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
А ещё к примеру у Word есть фича если установить масштаб=100% и приложить лист бумаги то они совпадут.
Не всегда. Сейчас, когда мониторы 2К, 4K, а может и 8K, то многие делают увеличение экрана.
У меня например 125% и стандартный лист гораздо меньше того, что показывает Word на 100%
kvitaliy вне форума Ответить с цитированием
Старый 26.08.2021, 16:44   #10
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
На мой взгляд нужно отталкиваться от требуемого DPI
Цитата:
Сообщение от Pavia Посмотреть сообщение
Обычно когда создают картинку DPI холста приравнивают 96.
Если я правильно рассчитал, то холст равный размеру бумаги А4 будет 794х1123 пикселей и А5 будет 559х794 пикселей при условии что DPI = 96.

Цитата:
Сообщение от Pavia Посмотреть сообщение
Для печати вам надо открыт принтер и он вернёт своё значение DPI а так же размеры листа.
Цитата:
Сообщение от Pavia Посмотреть сообщение
Если вы загружаете картинку из файла, то у неё будет свой DPI отличны от 96. А потом её выводят на принтер отмасштабировав под нужные размеры.

Как это сделано можно подсмотреть к примеру здесь:
https://github.com/BerndGabriel/Html...ce/vwPrint.pas
Код:
Код:
 FPPIX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  FPPIY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  FPaperWidth := GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
  FPaperHeight := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
  FOffsetX := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
  FOffsetY := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
  FPgHeight := Printer.PageHeight;
  FPgWidth := Printer.PageWidth;
С выводом холста на печать принтера буду разбираться. За информацию спасибо.

Всем спасибо за ответы.
ichi вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбираем программу по частям! Hac Свободное общение 2 20.10.2018 23:44
Разбираем программу . Kirill01 Софт 2 17.08.2013 21:21
Составляющие COM кабеля. ImmortalAlexSan Компьютерное железо 2 16.08.2010 18:50
Составляющие строки V@mpir Общие вопросы Delphi 12 06.10.2009 00:48