LibKing » Книги » comp-programming » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

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

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

Валентин Озеров - Советы по 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 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

Комментарии:

Функция рисует тень сложной формы на форме Form2 (извиняюсь за стиль). Для определения формы тени используется регион ShadeRgn, который был создан где-то раньше (например в OnCreate). Относительно регионов см. Win32 API.

Как рисовать на органе управления, например, на TPanel?

Nomadicсоветует:

У всех компонентов, порожденных от TCustomControl, имеется свойство Canvas типа TCanvas.

Если свойство Canvas недоступно, Вы можете достучаться до него созданием потомка и переносом этого свойства в раздел Public.

{ Example. We recommend You to create this component through Component Wizard.

In Delphi 1 it can be found as 'File|New Component…', and can be found

as 'Component|New Component…' in Delphi 2 or above. }

type

TcPanel = class(TPanel)

public

propertyCanvas;

end;

У меня есть маленькое замечание.

Если у объекта нет свойства Canvas (у TDBEdit вроде-бы нет), то, по крайней меpе в D3, можно использовать класс TControlCanvas. Примерное использование:

var

cc: TControlCanvas;

cc := TControlCanvas.Create;

cc.Control := yourControl;

и далее как обычно можно использовать методы Canvas.

Как мне из Handle битовой картинки, получить адрес битового изображения в памяти?

Nomadicсоветует:

Вот кусок одного моего класса, в котором есть две интересные вещицы — проецирование файлов в память и работа с битмэпом в памяти через указатель.

Сразу оговорюсь, что все это работает только под Win95/NT.

type

TarrRGBTriple= array[byte] ofTRGBTriple;

ParrRGBTriple=^TarrRGBTriple;

{организует битмэп размером SX,SY;true_color}

procedureTMBitmap.Allocate(SX,SY:integer);

varDC:HDC;

begin

ifBM<>0 thenDeleteObject(BM); {удаляем старый битмэп, если был}

BM:=0;

PB:= nil;

fillchar(BI,sizeof(BI),0);

withBI.bmiHeader do{заполняем структуру с параметрами битмэпа}

begin

biSize:=sizeof(BI.bmiHeader);

biWidth:=SX;

biHeight:=SY;

biPlanes:=1;

biBitCount:=24;

biCompression:=BI_RGB;

biSizeImage:=0;

biXPelsPerMeter:=0;

biYPelsPerMeter:=0;

biClrUsed:=0;

biClrImportant:=0;

FLineSize:=(biWidth+1)*3 and(-1 shl2); {размер строки(кратна 4 байтам)}

if(biWidth orbiHeight)<>0 then begin

DC:=CreateDC('DISPLAY', nil, nil, nil);

{замечательная функция (см.HELP), возвращает HBITMAP, позволяет сразу разместить выделяемый битмэп в спроецированном файле, что позволяет ускорять работу и экономить память при генерировании большого битмэпа}

{!} BM:=CreateDIBSection(DC,BI, DIB_RGB_COLORS, pointer(PB), nil, 0);

DeleteDC(DC); {в PB получаем указатель на битмэп-----^^}

ifBM=0 thenError('error creating DIB');

end;

end;

end;

{эта процедура загружает из файла true-color'ный битмэп}

procedureTMBitmap.LoadFromFile( constFileName: string);

var

HF:integer; {file handle}

HM:THandle; {file-mapping handle}

PF:pchar; {pointer to file view in memory}

i,j: integer;

Ofs:integer;

begin

{открываем файл}

HF:=FileOpen(FileName,fmOpenRead orfmShareDenyWrite);

ifHF<0 thenError('open file '''+FileName+'''');

try

{создаем объект-проецируемый файл}

HM:=CreateFileMapping(HF, nil,PAGE_READONLY,0,0, nil);

ifHM=0 thenError('can''t create file mapping');

try

{собственно проецируем объект в адресное }

PF:=MapViewOfFile(HM,FILE_MAP_READ,0,0,0);

{получаем указатель на область памяти, в которую спроецирован файл}

ifPF= nil thenError('can''t create map view of file');

try

{работаем с файлом как с областью памяти через указатель PF}

ifPBitmapFileHeader(PF)^.bfType<>$4D42 thenError('file format');

Ofs:=PBitmapFileHeader(PF)^.bfOffBits;

withPBitmapInfo(PF+sizeof(TBitmapFileHeader))^.bmiHeader do begin

if(biSize<>40) or(biPlanes<>1) thenError('file format');

if(biCompression<>BI_RGB) or(biBitCount<>24) thenError('only true-color BMP supported');

{выделяем память под битмэп}

Allocate(biWidth,biHeight);

end;

forj:=0 toBI.bmiHeader.biHeight-1 do

fori:=0 toBI.bmiHeader.biWidth-1 do

{Pixels - это property, возвр. указатель на соотв. RGBTriple в битмэпе}

Pixels[i,j]^.Tr:=ParrRGBTriple(PF+j*FLineSize+Ofs)^[i];

finally

UnmapViewOfFile(PF);

end;

finally

CloseHandle(HM);

end;

finally

FileClose(HF);

end;

end;

{эта функция - реализация Pixels read}

functionTMBitmap.GetPixel(X,Y:integer):PRGB;

begin

if(X>=0) and(Xand(Y>=0) and(Ythen

Result:=PRGB(PB+(Y)*FLineSize+X*3)

elseResult:=PRGB(PB);

end;

Если у вас на форме есть компонент TImage, то можно сделать так:

varBMP:TMBitmap;

B:TBitmap;

BMP.LoadFromFile( );

B:=TBitmap.Create;

B.Handle:=BMP.Handle;

Image1.Picture.Bitmap:=B;

и загруженный битмэп появится на экране.

Можно ли запустить OpenGL под Windows'95, и как поставлять его с программой?

Nomadicсоветует:

Надо сразу отметить, что для работы Microsoft OpenGL 1.1 требуется только наличие в системе двух динамических библиотек. Они различны для Windows 95 и для Windows NT. Они всегда инсталлируется вместе с системой, если эта система – Windows 95 OSR2 или более поздняя, или если это Windows NT. Однако, если Вы столкнулись с машиной, где OpenGL отсутствует (Windows 95 OSR1 и более ранние), то достаточно их взять из диcтpибyтива OSR2 (GLU32.DLL и OPENGL32.DLL) и записать в GetSystemDirectory – и запycкайте OpenGL-приложения на здоpовье.

Более эффективную реализацию OpenGL для Win32 от фирмы SGI я бы советовал стянуть с www.sgi.comили www.opengl.org(SGI OpenGL for Windows). Кроме того, оттуда же советую скачать дополнительную библиотеку функций-утилит, позволяющую упростить работу в OpenGL (GLUT). Возможно, что Вам понравится какой-нибудь API более высокого уровня, типа SCiTech MGL ( www.scitechsoft.com).

Как вывести на экран текст с 'красивым' обрезанием по длине (если текст не помещается на экране)?

Одной строкой

Nomadicсоветует:

Используй вызов DrawTextEx, установив в параметре dwDTFormat значение DT_PATH_ELLIPSIS.

При работе программ на Delphi 1 под Windows 95 в hicolor-режимах на иконках TBitBtn'ов обнаруживаются странные коричневые артефакты. Как от них избавиться?

Одной строкой

Nomadicсоветует:

A: (AB): Залить фон битмапа синим цветом.

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


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

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




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


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


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

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img