Главная страница
    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.011 c
3-99465
Марат
2003-12-08 07:44
2003.12.30
Считывание информации из справочника


14-99709
Dimman1
2003-12-09 11:16
2003.12.30
Использование снифферов в сети с коммутаторами


14-99726
Сатир
2003-12-08 18:15
2003.12.30
subj


4-99824
Дмитрий Д
2003-11-01 09:08
2003.12.30
Notebooc


1-99593
Tumcoat
2003-12-16 03:03
2003.12.30
Как программно в Word-е добавить таблицу?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский