Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
6-99675
Addead
2003-11-02 18:21
2003.12.30
послать письмо на почту от...


14-99707
Ru
2003-12-09 13:00
2003.12.30
Людей жалко


14-99750
Dimka Maslov
2003-12-09 18:25
2003.12.30
Наш ответ Маздаю!


1-99549
Крутыш
2003-12-15 22:20
2003.12.30
Как вывести в центре MdiChild-форму в MdiForm(главной)?


3-99503
Artemij
2003-12-04 10:57
2003.12.30
Добавление текста в DBEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский