Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление кол-ва строк и столбцов на листе, Лист - Canvas. 
:(
    Опции темы
ЧеловекБорща
  Дата 13.7.2013, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



Доброго времени суток!

Была задача, заполнять шаблоны данными, и вводить на лист в принтере в указанном количестве колонок и столбцов. 
С учетом отступа от краев листа и расстоянием между картинками. Получился такой код: 
Код

var
  iRow, iCol, // Счетчики
  iBorderSize, // Размер отступа отступа от края
  iImgDistance, // Дистанция между картинками
  iRows, // Кол-во строк
  iColumns, // Кол-во изображений в строке
  iLeft, iTop: Integer; // Для удобства расчетов
  bmp: TBitmap;
begin
  iBorderSize := StrToInt(BorderSizeEdit.Text);
  iImgDistance := StrToInt(ImgsDistanceEdit.Text);
  iRows := StrToInt(RowsCountEdit.Text);
  iColumns := StrToInt(ColCountEdit.Text);
  iRow := 0;
  iCol := 0;
  // Начальные значения координат рисования
  iLeft := iBorderSize;
  iTop := iBorderSize;
  bmp := TBitmap.Create;
  try
    bmp.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Source.bmp');
    with Img.Canvas do
    begin
      // Чищу Canvas
      Brush.Color := clWhite;
      FillRect(Img.BoundsRect);

      for iRow := 1 to iRows do
      begin
        // Кальк. позицию строки
        if (iRow = 1) then
          iTop := iBorderSize
        else
          iTop := iBorderSize + (iImgDistance * (iRow - 1)) +
            (bmp.Height * (iRow - 1));

        // Кальк. позиции картинок в строке
        for iCol := 1 to iColumns do
        begin
          if (iCol = 1) then
            iLeft := iBorderSize
          else
            iLeft := iBorderSize + (iImgDistance * (iCol - 1)) +
              (bmp.Width * (iCol - 1));
          Draw(iLeft, iTop, bmp);
        end;
      end;
    end;
  finally
    FreeAndNil(bmp);
  end;
end;


Работает на ура!


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

Как это сделать? 
Я пробовал переворачивать код, т.е. ставил while true и увеличивал iCol,iRow пока те не выходили за пределы ширины, высоты листа. Но результат отличается от реаьности, 
т.е. на листе 800x1000 px реально влезает сетка 3 на 3(картишка 200x420 px , отсуп от края 1 px, от картинки 3 px) а мне выдает 5 столбцов и 6 строк.


Пожалуйста, помогите с проблемой.


Это сообщение отредактировал(а) ЧеловекБорща - 13.7.2013, 18:17
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.