Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Allius25
14 / 14 / 5
Регистрация: 17.06.2013
Сообщений: 208
#1

Определение количества пробелов для Печати - Delphi

03.07.2013, 16:43. Просмотров 432. Ответов 2
Метки нет (Все метки)

Всем приятного времени суток!


Есть строка для вывода на печать с шапкой Параметр-Значение_1-Значение_2-Значение_3
Для каждого заголовка свой архив со значениями и длины строк у каждого значения персональны. Если выводить на печать, то выводится каждая строка с фиксированным количеством пробелов.

Предполагаю следующий вид решения:


1)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function TForm1.MostLength;
var i,j:integer;
    str:string;
begin
Str:='';
    for i:=0 to length(Archiv) do
      begin
        if (length(Archiv[i].Name)>Archiv[i].MaxWord)
           then Archiv[i].PrtMaxWord:=length(Archiv[i].Name)
           else Archiv[i].BetweenWord:=(Archiv[i].PrtMaxWord-length(Archiv[i].Name));
 
        for j:=0 to (Archiv[i].PrtBetweenWord-1) do Str:=Str+' ';
      end;
  Result:=Str+'  '; // 2 пробела


2)
Delphi
1
2
3
St:='                  ' + Archiv[k].Name + MostLength + '  '+ Archiv[k].Value
                  +'  '+ Archiv[k].Date +'  '+ Archiv[k].SampleDate;
  WriteLn(prn,St);

Функцию MostLength необходимо (по моему предположению) вписать подобным образом в строку, для того что бы был такой вариант:


Параметр Значение Дата анализа Дата отбора

Ванадий 23 03.07.2013 03.07.2013
Оксид титана 55 28.02.2013 03.07.2013

Сейчас получается такой только:

Параметр Значение Дата анализа Дата отбора
Ванадий 23 03.07.2013 03.07.2013
Оксид титана 55 28.02.2013 03.07.2013


Очень рассчитываю на поддержку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 16:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение количества пробелов для Печати (Delphi):

Разработать программу подсчета общего количества символов в строке, не считая пробелов - Delphi
Разработать программу подсчета общего количества символов в строке не считая пробелов.

Разработать программу подсчета общего количества символов в строке не считая пробелов - Delphi
Дорогие формачане я вас всех приветствую и помогите пожалуйста написать прогу Во всех вариантах задания исходные данные вводить с помощью...

Определение количества календарных дней с разбиением на 30, 31, 28 и 29 - Delphi
Доброго времени суток! Ребят, требуется помощь. Имеется 2 дататаймпикера и кнопка. Соответственно, после нажатия кнопки, необходимо...

Определение количества дней между двумя датами! - Delphi
Здравствуйте! помогите написать программу определяющую количество дней между двумя датами! Но с одним условием написать с использованием...

Сортировка двумерного массива и определение количества длинных слов - Delphi
Здравствуйте!!! Помогите с решением, если возможно подробнее Нужно решить 2 не сложные задачи: 1) Упорядочить двумерный массив по...

Определение и удаление количества повторяющихся слов в строке (Delphi, form) - Delphi
Здравствуйте, нужно срочно написать программу (в виде формы) Задача состоит в следующем: В строке символов определить количество...

2
Скандербег
878 / 837 / 196
Регистрация: 07.08.2012
Сообщений: 2,336
03.07.2013, 17:23 #2
Мало чего понятно.
Особенно выразительны слова: "строка для вывода на печать с шапкой"...
Какая там у строки шапка? Обычно под "шапкой" понимают заголовок таблицы. А здесь что?

Вы в самом деле думаете, что народ здесь будет догадываться что скрывается под загадочными именами переменных: PrtMaxWord, BetweenWord и прочих?

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

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

Даже без таблицы никому в голову не придет "вытягивать" строку. Каждое значение печатается по
определенным горизонтальным (и вертикальным, разумеется) координатам.
Благо, для этого в Дельфи возможности существуют.
1
Cyborg Drone
Модератор
4715 / 2882 / 1123
Регистрация: 17.08.2012
Сообщений: 9,183
03.07.2013, 23:25 #3
В дополнение к Скандербегу. Allius25, похоже, Вы ошиблись веткой... От Ваших фрагментов кода за версту несёт Паскалем... А в Дельфи... в Дельфи множество компонентов, позволяющих решить Вашу задачу. Но! Если Вы всё-таки уверены, что Вы написали своё сообщение в правильную ветку, то вот несколько советов:

- определитесь с максимальной шириной (в печатаемых символах) каждого столбца Вашей таблицы;
- чтобы не было сложностей с подгонкой по вертикальным линиям, используйте моноширинный шрифт, из распространённых подойдёт с гарнитурой курье, например,
Courier New, который выглядит вот так.
Обратите внимание, ширина букв одинакова.

А вот Times New Roman. Видно невооружённым глазом,
что ширина букв разная. Такой шрифт плохо подходит для таблиц.

- выясняете ширину текущего поля и свободное место заполняете пробелами.
- для Вашей цели подойдёт компонент Memo или RichEdit.

Успехов.

Добавлено через 3 часа 6 минут
Вот эскиз Вашей таблицы на Паскале:
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
37
38
program Tab;
 
type d = record
p, v, a, s: string;
end;
 
var i, j, k: integer;
    a: array [1..20] of d;
 
begin
  writeln('Enter records, <= 20, Parameter = 0 for exit and type.');
  k := 20;
  for i := 1 to 20 do
    begin
      write('Parameter = '); readln(a[i].p);
      if a[i].p = '0' then begin
                             k := i - 1;
                             break;
                           end;
      write('Value = '); readln(a[i].v);
      write('Analysis date = '); readln(a[i].a);
      write('Selection date = '); readln(a[i].s);
    end;
  writeln('Parameter           Value       Analysis date      Selection date');
  for i := 1 to k do
    begin
      if length(a[i].p) > 20 then for j := 1 to 20 do write(a[i].p[j])
                             else begin
                               write(a[i].p);
                               for j := (length(a[i].p) + 1) to 20 do write(' ');
                             end;
      for j := 1 to (5 - length(a[i].v)) do write(' '); write(a[i].v);
      for j := 1 to (20 - length(a[i].a)) do write(' '); write(a[i].a);
      for j := 1 to (20 - length(a[i].s)) do write(' '); write(a[i].s);
      writeln;
    end;
  readln;
end.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 23:25
Привет! Вот еще темы с ответами:

Процедуры и функции: определение простоты числа, подсчет количества простых чисел - Delphi
Вводить с клавиатуры числа или задавать их случайным образом в диапазоне от 1 до 99999. Определять - является ли это число простым,...

Программа для проверки скорости печати - Delphi
Доброго времени суток. Народ, пишу программу для проверки скорости печати. Уже несколько раз по разным косякам писал сюда, но сейчас косяк...

Форма для печати + заполнения на ходу в Medoc - Delphi
подскажите пожалуйста, есть ли какие-то компоненты типа FastReport, чтобы форму можно было построить как в FastReport, но чтобы можно было...

Создание программы для печати вкладышей дипломов - Delphi
В общем ситуация у меня плачевная,заставили в delphi создать программу для печати вкладышей дипломов,в общем я знаю как все можно оформить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru