BG Development


Страници: (5) « първа ... 3 4 [5]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Delphi разни питания., Въпроси от начинаещ.
Pavlov
Публикувано на: 17-03-2017, 16:52
Quote Post



Име: Вълкан Павлов
Група: Потребител
Ранг: Новопостъпил

Мнения: 28
Регистриран на: 21.12.16



Важен въпрос. В случая точно не, но в други сигурно да. При тези гридове обаче може би е по-важно да се направи автоматичното побиране чрез пренасяне на текста, в клетката, с предварително зададен размер. Лично аз ги ползвам само за схематично показване на списък, а правя отделни форми за цялостно визуализиране на съдържанието.В конректния случай просто чета една книга и правя примерите.

Това обаче ми напомни за друг проблем, който от известно време стои без разрешение. В общи линии ситуацията е следната.

1) Текст
2) Стринг или ДБ Грид
3) Текст

Това е за създаване на документ, който съдържа списък. Проблемът е че списъкът може да бъде произволно голям. Как да подходя, за да принтирам формата на колкото страници е нужно? Знам, че мога да обвържа дължината на формата с височината на грида, същото и за позицията на текста под него. Но ако го принтирам, какво ще се случи? Съжалявам че нямам принтер за да тествам, но в обджект инспектора имам една настройка PrintScale. Ако я сложа на poProportional ще се раздели ли формата на повече от една страница? Въобще правилно ли подхождам, опитвайки се да принтирам цялата форма?
PMEmail PosterUsers Website
Top
r4nd0m
Публикувано на: 17-03-2017, 18:48
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 947
Регистриран на: 05.09.07



нещо като Crystal Reports?


--------------------
"Happiness only real when shared."
PMEmail Poster
Top
enf
Публикувано на: 18-03-2017, 09:47
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 39
Регистриран на: 01.08.14



QUOTE

Съжалявам че нямам принтер за да тествам


Не ти трябва физически принтер. Можеш да си дръпнеш виртуален. Пишеш нещо от рода на "print to pdf" в гугъл и си избираш. Ако си с виндовс 10, той си има "вграден" -
Microsoft Print to PDF.

QUOTE
Ако я сложа на poProportional ще се раздели ли формата на повече от една страница? Въобще правилно ли подхождам, опитвайки се да принтирам цялата форма?


Ако си с pro или arch версия на делфи, най-вероятно имаш достъп до сорса на vcl-a. Та,

CODE

procedure TCustomForm.Print;
begin
 Printer.BeginDoc;
 try
   FormImage := GetFormImage;
   Canvas.Lock;
   try
     { Paint bitmap to the printer }
     with Printer, Canvas do
     begin
       Bits := FormImage.Handle;
       
       ...

     end;
   finally
     Canvas.Unlock;
     FormImage.Free;
   end;
 finally
   Printer.EndDoc;
 end;
end;

function TCustomForm.GetFormImage: TBitmap;
begin
 Result := TBitmap.Create;
 try
   Result.Width := ClientWidth;
   Result.Height := ClientHeight;
 ....  
end;


И съответният извод - ще се принтира само *видимата* част от формата. Механизмът е много подобен и при самото визуализирана на формата на екран.

Това, което искаш е т.н. репорт. По-бързият вариант е да използваш готово решение (както предлага r4nd0m). Делфи обикновено върви с някаква "лайт" версия на такива компоненти. Ако си с XE3 или нагоре, трябва да имаш FastReport, иначе - RaveReport. Като цяло са доста бъгави, но вършат работа.

Но при положение, че всичко го правиш за упражнение, ти препоръчвам сам да си направиш печата. Така ще се разбереш що е Canvas и как въобще можеш да рисуваш.

Пример:

CODE

uses
 System.Types,
 Vcl.Printers;

procedure Print;
begin
 Printer.BeginDoc;  // "Printer" е глобална функция, която ти връща default принтера
 try
   Printer.Canvas.Font.Color := $0000FF;
   Printer.Canvas.TextOut(0, 0, 'test test test');
   Printer.Canvas.Font.Color := $000000;
   Printer.Canvas.TextRect(TRect.Create(100, 100, 200, 200), 0, 0, 'another test');
 finally
   Printer.EndDoc;
 end;
end;


Трябва да си извъртиш един цикъл, за да обиколиш всички редове/клетки (в твоя случай - дейтасета, който си вързал с грида) и да ги изведеш на съответните координати. Вече по-нататък, ако разгледаш документацията, ще видиш как можеш да форматираш текст, да рисуваш изображения и т.н.
PMEmail Poster
Top
Pavlov
Публикувано на: 21-03-2017, 14:15
Quote Post



Име: Вълкан Павлов
Група: Потребител
Ранг: Новопостъпил

Мнения: 28
Регистриран на: 21.12.16



Здравейте Enf и r4nd0m

Извинявам се за закъснението, но нямах достъп до компютър няколко дни.
Ще ми трябва и малко време да проуча новите неща. Иначе не е само за упражнение, мъча се да правя една програма, която да ми улесни живота на работа.

Благодаря за включванията!
PMEmail PosterUsers Website
Top
Pavlov
Публикувано на: 23-03-2017, 14:12
Quote Post



Име: Вълкан Павлов
Група: Потребител
Ранг: Новопостъпил

Мнения: 28
Регистриран на: 21.12.16



Прегледах готовите неща, но реших да проуча как стоят работите с последния пример и да се опитам да го направя сам.
Имам обаче няколко неясноти. В Printer.Canvas.TextOut(0, 0, 'test test test'); двете нули са координати за позиция. Не разбирам в какви мерни единици са.
Да речем че имам константен текст в началото и края, и променлив по средата. Малко ми е трудно да уцеля точната позиция на крайния текст. Опитвам се да ползвам Edit1.GetTextLen, това обаче ми връща стойност с която не успявам да работя. С проба-грешка, го докарах до това един символ да е широк 18-19 от мерните единици на координатите. Сега умножавам броя на символите по 18, да речем, но хич не ми се получава точно. Подозирам че и ако се смени листа с друг формат, letter примерно, подредбите ще се развалят. За това ми се иска вместо да задавам цифрови координати, да навръзвам позициите на всяко следващо с предходното. Има ли начин да извлека размера на текст в канвас-а? И мога ли да го визуализирам по някакъв начин, освен с ПДФ-а?

Иначе разбрах че с TextRect, мога да задам размер, но прочетох че размерът е за самата фигура, ако текста стане по-дълъг от нея, ще бъде отрязан. Не можах и да го подкарам това TextRect да се покаже в ПДФ-а.

Поздрави и благодаря отново!

Това мнение е било редактирано от Pavlov на 23-03-2017, 15:50
PMEmail PosterUsers Website
Top
enf
Публикувано на: 23-03-2017, 15:30
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 39
Регистриран на: 01.08.14



Разгледай в документацията методите на TCanvas.

Обърни внимание на TextRect и TextExtent
PMEmail Poster
Top
Pavlov
Публикувано на: 23-03-2017, 15:49
Quote Post



Име: Вълкан Павлов
Група: Потребител
Ранг: Новопостъпил

Мнения: 28
Регистриран на: 21.12.16



Благодарности!

Това мнение е било редактирано от Pavlov на 23-03-2017, 15:49
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (5) « първа ... 3 4 [5]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0