Форум: "Основная";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c