Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.30;
Скачать: CL | DM;

Вниз

MetaFile и PreView   Найти похожие ветки 

 
Fast   (2003-12-17 18:41) [0]

Уважаемые мастера! У Тейксера и Пачеко есть пример PreView. Хотелось реализовать. Не уверен, что правтльно получилось, т.к. текст из Мемо пролетает не задерживаясь на моей панели. Просьба помочь. См. участки кода

unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Printers;
const Koef = 0.1;

type
TPrevPanel = class(TPanel)
public
property Canvas;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button6: TButton;
Memo1: TMemo;
pnlEditor: TPanel;
pnlButton: TPanel;
btnPrior: TButton;
btnNext: TButton;
btnClose: TButton;
procedure Button2Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
hp : HDC;
PageSize, CharPos: TPoint;
GloStream : TStream;
Printer : TPrinter;
pnlPreView : TPrevPanel;
function GetPageSize : TPoint;
procedure ClearCanvas;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Printer := TPrinter.Create;
hp:=Printer.Handle;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
pnlEditor.Visible := False; // панель просмотра
Memo1.Visible := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Ratio : double;
PR_Wid, PR_Hei, i,L,T,W,H : integer;
R : TRect;
MetaFile : TMetaFile;
ss : string;
begin
Memo1.Visible := False; //на место мемо ставим панель предвар.смотра
with pnlEditor do begin
Visible := True;
Left := Memo1.Left;
Top := Memo1.Top;
Width := Memo1.Width;
Height := Memo1.Height;
end;
with pnlButton do begin //вместе с кнопками управления
Left := 0;
Top := 0;
Width := Parent.Width;
Height := 40;
end;
PageSize := GetPageSize;
Ratio := Printer.PageHeight / Printer.PageWidth;
PR_Hei := trunc(pnlEditor.Height*(1-2*Koef)-pnlButton.Height);
PR_Wid := trunc(PR_Hei / Ratio);
with TPanel.Create(self) do begin //тень панели
L := trunc(pnlEditor.Width/2 - PR_Wid/2);
T := trunc(pnlEditor.Height*Koef+pnlButton.Height);
H := PR_Hei;
W := PR_Wid;
SetBounds(L, T, W, H);
Color := clBlack;
BevelInner := bvNone;
BevelOuter := bvNone;
Parent := pnlEditor;
end;
pnlPreView := TPrevPanel.Create(self);
with pnlPreView do begin // предвар.смотра с канвас
SetBounds(L-5, T-5, W-3, H);
Color := clWhite;
BevelInner := bvNone;
BevelOuter := bvNone;
BorderStyle := bsNone;
Parent := pnlEditor;
R := Rect(0,0,Width,Height);
Canvas.Rectangle(R.Left-2, R.Top-2, R.Right+2, R.Bottom+2);

// создаем метафайл, используя дескриптор принтера в качестве устройства
MetaFile := TMetaFile.Create;
with TMetafileCanvas.Create(Metafile, hp) do
try
//выводим то, что предназначено для печати на канву этого метафайла,
//как на канву принтера
for i:=0 to Memo1.Lines.Count - 1 do begin
ss:= PChar(Memo1.Lines.Strings[i]);
DrawText(pnlPreView.Canvas.Handle, PChar(ss), -1, R, dt_WordBreak or dt_Left);
end;
finally
Free;
end;
// выводим содержимое метафайла на экран
Form1.Canvas.Draw(0,0,Metafile);
end;
end;


 
TUser ©   (2003-12-17 20:34) [1]


> for i:=0 to Memo1.Lines.Count - 1 do begin
> ss:= PChar(Memo1.Lines.Strings[i]);

Такой код тебе конечно выведет весь текст из мемы. А как иначе - ты же его весь прогоняешь. Определи, сколько строк на странице и показывай только их.
В Jedi я видел готовый компонент для организации Preview. Сам его не использовал, поэтому ничего вразумительного сказать не могу. Но стоит его попробовать или по крайней мере посмотреть исходники.


 
Fast   (2003-12-17 23:18) [2]

TUser © (17.12.03 20:34) [1]
Пока спасибо. Посмотрю RX-Jedi.



Страницы: 1 вся ветка

Текущий архив: 2003.12.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
14-99723
Dimmu
2003-12-08 12:19
2003.12.30
Tomcat.


4-99825
Дубинин Алексей
2003-11-03 21:46
2003.12.30
Как получить имя исполняемого файла зная его Handle


1-99625
Пубертанец
2003-12-17 09:06
2003.12.30
Что есть в Дельфи для создания и парсинга XML-файлов?


3-99472
AndDem
2003-12-01 17:34
2003.12.30
Компонент EventAlert для ADO-соединения с MSSQL


14-99743
Сатир
2003-12-07 19:30
2003.12.30
Новый взгляд на курение