Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

MetaCanvas.Font.Assign(oGrid.Font);

MetaCanvas.Font.Size := Round(oGrid.Font.Size * kScale);

kW := MetaCanvas.TextWidth('W') / oGrid.Canvas.TextWidth('W');

kH := MetaCanvas.TextHeight('W') / oGrid.Canvas.TextHeight('W');

finally

MetaCanvas.Free;

end;

finally

PrevMetafile.Free;

end;

end;

Решаем 2.

var

PrevMetafile : TMetafile;

MetaCanvas : TMetafileCanvas;

begin

PrevMetafile := nil;

MetaCanvas := nil;

try

PrevMetaFile := TMetaFile.Create;

PrevMetafile.Width := oWidth;

PrevMetafile.Height := oHeight;

try

MetaCanvas := TMetafileCanvas.Create(PrevMetafile, 0);

// здесь должен быть ваш код - с учетом масштабиpования.

// я эту вещь вынес в ассигнуемую пpоцедуpу, и данный блок

// вызываю лишь для отpисовки целой стpаницы.

см. PS1.

finally

MetaCanvas.Free;

end;

...

PS1. Код, котоpый используется для отpисовки. oCanvas - TCanvas метафайла.

...

var iHPage : integer; // высота страницы

begin

withoCanvas do begin

iHPage := 3000;

// залили область метайфайла белым - для дальнейшей pаботы

Pen.Color := clBlack;

Brush.Color := clWhite;

FillRect(Rect(0, 0, 2000, iHPage));

// установили шpифты - с учетом их дальнейшего масштабиpования

oCanvas.Font.Assign(oGrid.Font);

oCanvas.Font.Size := Round(oGrid.Font.Size * kScale);

...

xEnd := xBegin;

iH := round(RowHeights[iRow] * kH);

foriCol := 0 toColCount - 1 do begin

x := xEnd;

xEnd := x + round(ColWidths[iCol] * kW);

Rectangle(x, yBegin, xEnd, yBegin + iH);

r := Rect(x + 1, yBegin + 1, xEnd – 1, yBegin + iH – 1);

s := Cells[iCol, iRow];

// выписали в полученный квадрат текст

DrawText(oCanvas.Handle, PChar(s), Length(s), r, DT_WORDBREAK ordt_center);

Главное, что важно помнить на этом этапе – это не забывать, что все выводимые объекты должны пользоваться описанными коэф-тами (как вы их получите – это уже ваше дело). В данном случае – я работаю с пеpеделанным TStringGrid, который сделал для многостраничной печати. Последний пункт – надо сформированный метафайл или bmp напечатать.

var

Info: PBitmapInfo;

InfoSize: Integer;

Image: Pointer;

ImageSize: DWORD;

Bits: HBITMAP;

DIBWidth, DIBHeight: Longint;

PrintWidth, PrintHeight: Longint;

begin

...

caseImageType of

itMetafile:

begin

ifPicture.Metafile<> nil thenPrinter.Canvas.StretchDraw(Rect(aLeft, aTop, aLeft+fWidth, aTop+fHeight), Picture.Metafile);

end;

itBitmap:

begin

ifPicture.Bitmap<> nil then begin

withPrinter, Canvas do begin

Bits := Picture.Bitmap.Handle;

GetDIBSizes(Bits, InfoSize, ImageSize);

Info := AllocMem(InfoSize);

try

Image := AllocMem(ImageSize);

try

GetDIB(Bits, 0, Info^, Image^);

withInfo^.bmiHeader dobegin

DIBWidth := biWidth;

DIBHeight := biHeight;

end;

PrintWidth := DIBWidth;

PrintHeight := DIBHeight;

StretchDIBits(Canvas.Handle, aLeft, aTop, PrintWidth, PrintHeight, 0, 0, DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);

finally

FreeMem(Image, ImageSize);

end;

finally

FreeMem(Info, InfoSize);

end;

end;

end;

end;

end;

В чем заключается идея PreView? Остается имея на руках Metafila, Bmp – отрисовать с пересчетом внешний вид изобpажения (надо высчитать левый верхний угол и размеpы «предварительно просматриваемого» изображения. Для показа изобpажения достаточно использовать StretchDraw.

После того, как удалось вывести объекты на печать, проблему создания PreView решили как «домашнее задание».

Кстати, когда мы работаем с Bmp, то для просмотра используем следующий хинт – записываем битовый образ через такую процедуру:

w:=MulDiv(Bmp.Width, GetDeviceCaps(Printer.Handle,LOGPIXELSX), Screen.PixelsPerInch);

h:=MulDiv(Bmp.Height, GetDeviceCaps(Printer.Handle,LOGPIXELSY), Screen.PixelsPerInch);

PrevBmp.Width:=w;

PrevBmp.Height:=h;

PrevBmp.Canvas.StretchDraw(Rect(0, 0, w, h),Bmp);

aPicture.Assign(PrevBmp);

Пpи этом масштабируется битовый образ с минимальными искажениями, а вот при печати – приходится bmp печатать именно так, как описано выше. Итог – наша bmp при печати чуть меньше, чем печатать ее через WinWord, но при этом – внешне – без каких-либо искажений и пр.

Imho, я для себя пpоблему печати pешил. Hа основе вышесказанного, сделал PreView для myStringGrid, где вывожу сложные многостpочные заголовки и пр. на несколько листов, осталось кое-что допилить, но с принтером у меня проблем не будет уже точно :)

PS. Кстати, Андрей Аристов на основе своей наработки сделал сложные геокарты, которые по качеству не хуже, а может, и лучше, чем выдает Surfer (специалисты поймут). Hа ватмат.

PPS. Прошу прощения за возможные стилистические неточности – время вышло, охрана уже ругается. Но код – выдран из работающих исходников.

Разное

Как в ATX корпусе программно выключить питание под DOS

Serj Kolesnikovрекомендует:

=== Cut ===

mov ax,5301h

sub bx,bx

int 15h

jc @@finish

mov ax,530Eh

sub bx,bx

mov cx,102h

int 15h

jc @@finish

mov ax,5307h

mov bx,1

mov cx,3

int 15h

@@finish:

int 20h

=== Cut ===

Операционная система

Буфер обмена

Как удобнее работать с буфером обмена как с последовательностью байт?

Из советов Nomadic'a:

Используя потоки —

unitClipStrm;

{

This unit is Copyright (c) Alexey Mahotkin 1997-1998

and may be used freely for any purpose. Please mail

your comments to

E-Mail: alexm@hsys.msk.ru

FidoNet: Alexey Mahotkin, 2:5020/433

This unit was developed during incorporating of TP Lex/Yacc

into my project. Please visit ftp://ftp.nf.ru/pub/alexm

or FREQ FILES from 2:5020/433 or mail me to get hacked

version of TP Lex/Yacc which works under Delphi 2.0+.

}

interface usesClasses, Windows;

typeTClipboardStream = class(TStream)

private

FMemory : pointer;

FSize : longint;

FPosition : longint;

FFormat : word;

public

constructorCreate(fmt : word);

destructorDestroy; override;

function Read( varBuffer; Count : Longint) : Longint; override;

function Write( constBuffer; Count : Longint) : Longint; override;

functionSeek(Offset : Longint; Origin : Word) : Longint; override;

end;

implementation usesSysUtils;

constructorTClipboardStream.Create(fmt : word);

var

tmp : pointer;

FHandle : THandle;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x