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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать из Memo, формирования отчетов 
:(
    Опции темы
Lonley
Дата 29.10.2003, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 7.10.2003
Где: северные ворота М урманск

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



Привет
вот бьюсь над формированием отчета
из Memo
вот надо так:
======================
| 3 |3333 | 3 |
======================
| gg | gg | ggg |
| 4 | 4 | 4 |
| 77 |______|______|
| | | |
| | | |
, а получается так:
=====================
| 3 |3333 | 3 | почемуто криво менял шрифиы Char Set но тут промблема с кодировкой
===================== на экране по русски а на принтере в БРЕДЕ
| gg | gg | ggg | подскажите как от этого избавится
| 4 | 4 | 4 __|
| 77| ___- |_____ |
| | | ____ |
| | | |
=========================
У Вас почему-то пробелы съедаются

Это сообщение отредактировал(а) Lonley - 29.10.2003, 18:48


--------------------
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
PM MAIL ICQ   Вверх
<Spawn>
Дата 30.10.2003, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Lonley Ты покажи как ты это делаешь, может у тебя в коде ошибка.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
cot
Дата 31.10.2003, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Var Y,dY,k: integer;
begin
try
if PrintDialog1.Execute then
begin
if Memo1.Lines.Count=0 then Exit;
Screen.Cursor:=crHourGlass;
with Printer do begin
beginDoc;
with Printer.Canvas do
begin
Font:=Memo1.Font; dY:=TextHeight('1');
y:=2*dY;
for k:=0 to Memo1.Lines.Count-1 do
begin
TextOut(0,Y,Memo1.Lines[k]);
inc(y,dy);
if PageHeight-Y<2*dY then
begin
NewPage;
TextOut(0,0,'c.'+IntToStr(PageNumber));
Y:=2*dY
end;
end;
end;
EndDoc;
end;
Screen.Cursor:= crDefault;
end
except
on EPrinter do
MessageDlg ('Принтер не включен, или бумаги в нем нет.',mtError,[mbOK],0);
end;
end;
Всю дорогу пользуюсь никогда не было проблем.
PM MAIL   Вверх
Lonley
Дата 31.10.2003, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 7.10.2003
Где: северные ворота М урманск

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



Цитата
Lonley Ты покажи как ты это делаешь, может у тебя в коде ошибка.

procedure PrintStrings(Strings: TLMDMemoStrings);
Var
Prn: TextFile;
i: word;
begin
AssignPrn(Prn);
try
Rewrite(Prn);
try
Printer.Canvas.Font:=Form1.Memo1.Font;
for i := 0 to Strings.Count - 1 do
writeln(Prn, Strings.Strings[i]);
finally
CloseFile(Prn);
end;
except
on EInOutError do
MessageDlg('Ошибка печати текста.', mtError, [mbOk], 0);
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
//ghh
PrintStrings(Memo1.Lines);
end;

end.
===================
Делаю так взял из форума непомню откуда
===================
Самое забавное что когда копируешь текст из MEMO в блокнот
то все встает нормально и шрифт и выравнивание
=================== withstupid.gif


--------------------
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 31.10.2003, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А может лучше пользоваться QReport-ом?
PM   Вверх
<Spawn>
Дата 31.10.2003, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Lonley Попробуй то, что дал cot.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Lonley
Дата 31.10.2003, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 7.10.2003
Где: северные ворота М урманск

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



smile.gif
-=-=-=-=
Оке Я попробую,
----
но Я собственно выкрутился
из положения путем сохранения его в файл
и вызовом ассоциированой с TXT файлами прогой
-=-=-=-=-=



--------------------
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
PM MAIL ICQ   Вверх
remax
Дата 1.11.2003, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



Есть два принципиально разных способа вывода на печать:

1) writeln(Prn, Strings.Strings[i]); - Печатает на принтер в текстовой моде

2) TextOut(0,Y,Memo1.Lines[k]); - Печатает на принтер в графике

Большинство современных принтеров в текстовом режиме работают коряво (Если вообще работает).

Кстати, я вообще удивлен что при работе с принтером в текстовом режиме у Вас используется установка шрифта принтера
Цитата
Printer.Canvas.Font:=Form1.Memo1.Font;
- Наверное, это не имело никакого эффекта?



--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Lonley
Дата 1.11.2003, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 7.10.2003
Где: северные ворота М урманск

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



Цитата(remax @ 1.11.2003, 14:52)

Кстати, я вообще удивлен что при работе с принтером в текстовом режиме у Вас используется установка шрифта принтера
Цитата
Printer.Canvas.Font:=Form1.Memo1.Font;
- Наверное, это не имело никакого эффекта?

smile.gif
-=-=
Это остатки от прошлого кода
просто можно было - то читать настройки принтера и его харки
и потом уже регилировать печать
=-=
Но ето долго и мне не нужна графика, а просто
печать колоночек и строчек с посчитаными данными
=-=-
notify.gif


--------------------
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
PM MAIL ICQ   Вверх
remax
Дата 2.11.2003, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



Цитата
печать колоночек и строчек с посчитаными данными


Если надо выводить только цифры (т.е. нет проблем с кодировкой) то можно попробывать и через Writeln(Prn) Числа выводить в форматированом виде (Используя ":" ) и/или Tab (#9) По умолчанию выравнивает на столбцы кратные 8 символам.


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Lonley
Дата 2.11.2003, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 7.10.2003
Где: северные ворота М урманск

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



smile.gif
====
Ну естественнно с названиями данных
например:
===============
|№|Тип|Количество|
===============
Вот код генератора можно в файл можно в Memo
тут создано в файл
до этого Я делал в Memo, но...
Код

     FileName:=('c:\othc_mar_cable.txt');
     AssignFile(Fil,FileName); {$I-}
     Rewrite(Fil);
     Writeln(Fil,'                ');
     Writeln(Fil,#32+#32+#32+#32+#32+#32+#32+'Подсчет марок линий');
     Writeln(Fil,'                ');
     Writeln(Fil,'                                          ');
     Writeln(Fil,#32+#32+#32+#32+#32+#32+#32+'===================================');
     WriteLn(Fil,#32+#32+#32+#32+#32+#32+#32+'|'+#32+'№'+#32+#32+'|Уч|'+#32+#32+#32+'Марка'+#32+#32+#32'|Сечение|'+'Сумма'+#32'|');
     Writeln(Fil,#32+#32+#32+#32+#32+#32+#32+'===================================');


For Str_Col:=1 to Form3.Query1.RecordCount do
begin
{
*******************************
Корректор длинны первой колонки
*******************************
}
    N:=IntToStr(Str_Col);
    L:=Length(N);
    case L of
    1 : begin
         N:='   ';
        end;
    2 : begin
         N:='  ';
        end;
    3 : begin
         N:=' ';
        end;
         end;
{
     sql.Add ('group by uch, marka, sechen');
}
Typs:=Form3.Query1.FieldByName('marka').AsString;
L:=Length(Typs);
case L of
0 : begin
      T:='   Н/Д     ';
    end;
1 : begin
      T:='          ';
    end;
2 : begin
      T:='         ';
    end;
3 : begin
      T:='        ';
    end;
4 : begin
      T:='       ';
    end;
5 : begin
      T:='      ';
    end;
6 : begin
      T:='     ';
    end;
7 : begin
      T:='    ';
    end;
8 : begin
      T:='   ';
    end;
9 : begin
      T:='  ';
    end;
10 : begin
      T:=' ';
    end;
11 : begin
      T:='';
    end;
       end;

Con:=Form3.Query1.FieldByName('sechen').AsString;
L:=Length(Con);
case L of
0 : begin
     C:='  Н/Д  ';
    end;
1 : begin
     C:='      ';
    end;
2 : begin
     C:='     ';
    end;
3 : begin
     C:='    ';
    end;
4 : begin
     C:='   ';
    end;
5 : begin
     C:='  ';
    end;
6 : begin
     C:=' ';
    end;
7 : begin
     C:='';
    end;
     end;

Sum:=Form3.Query1.FieldByName('summa').AsString;
L:=Length(Sum);
Case L of
0: begin
    Sum1:='  Н/Д ';
   end;
1: begin
    Sum1:='     ';
   end;
2: begin
    Sum1:='    ';
   end;
3: begin
    Sum1:='   ';
   end;
4: begin
    Sum1:='  ';
   end;
5: begin
    Sum1:=' ';
   end;
6: begin
    Sum1:='';
   end;
      end;

   
    WriteLn(fil,#32+#32+#32+#32+#32+#32+#32+'|'+IntToStr(Str_Col)+N+'|'+Form3.Query1.FieldByName('uch').AsString+#32+'|'+Form3.Query1.FieldByName('marka').AsString+T+'|'+Form3.Query1.FieldByName('sechen').AsString+C+'|'+Form3.Query1.FieldByName('summa').AsString+sum1+'|');
    Form3.Query1.Next;

    Str_Col1:=Str_Col1+1;
end;

     CloseFile(Fil);

ShellExecute(Form3.Handle, 'open', 'c:\othc_mar_cable.txt', nil, nil, SW_SHOW);
 Form10.Visible:=True;
end;

end.


Это сообщение отредактировал(а) Lonley - 2.11.2003, 18:25


--------------------
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
PM MAIL ICQ   Вверх
remax
Дата 2.11.2003, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



1)
Вместо Case length(s) of + куча строчек, наверное проще сделать так:


if length(s) = 0
then s1:='н/д'
else s1:=copy('________',1,8-length(s))+s; /*В кавычках 8 пробелов*/


2) #32+#32+#32+#32... Можно записывать без знаков "+" - мелочь, а приятно.
Но я бы использовал #9 - это еще красивее. Ведь тогда Вы должны следить только за тем, чтобы
общий размер поля не выходил за 8 символов (или 16,24 ... как Вы выберите)
т.е. тогда вместо п1) и п2) получится компактная запись типа

if length(s) = 0
then s1:='н/д'
else s1:=s;
writeln(fil,#9'|'#9,Str_Col:7,#9'|',s1,#9'|');



3) Если Ваш принтер неправильно поддерживает печать кирилицы в текстовом режиме то все остальное не имеет смысла.


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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