Выбрать главу

   if PF=nil then Error('can''t create map view of file');

   try

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

    if PBitmapFileHeader(PF)^.bfType<>$4D42 then Error('file format');

    Ofs:=PBitmapFileHeader(PF)^.bfOffBits;

    with PBitmapInfo(PF+sizeof(TBitmapFileHeader))^.bmiHeader do begin

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

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

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

     Allocate(biWidth,biHeight);

    end;

    for j:=0 to BI.bmiHeader.biHeight-1 do

for i:=0 to BI.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}

function TMBitmap.GetPixel(X,Y:integer):PRGB;

begin

 if (X>=0) and (X<BI.bmiHeader.biWidth) and (Y>=0) and (Y<BI.bmiHeader.biHeight) then

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

 else Result:=PRGB(PB);

end;

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

var BMP: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): Залить фон битмапа синим цветом. 

Получение контекста устройства для элемента управления

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

{Bitmap в TImage}

HDC := TImage.Picture.bitmap.canvas.handle;

DC – что нибудь с Canvas.handle 

Отладка 

Hard mode без перерыва II

Delphi 1 

ОПРЕДЕЛЕНИЕ: «hard mode» является режимом Windows, при которой не происходит никакой обработки сообщений. Это происходит при отрисовке меню или некоторых операциях ядра. Это означает, что в этом состоянии Delphi не может «заморозить» ваше приложение, не блокируя Windows. Обычно это возникает вследствие многочисленных вызовов SendMessage. В этом случае, для выхода из Hard mode, необходимо «встряхнуть» систему. Вполне достаточно, если ваш отладчик покажет вам системно-модальное окно (messagebox), говорящее вам о том, что вы находитесь в hard mode! Для этого попробуйте поставить дополнительный breakpoint (точку останова) на строчке, *предшествующей* вашему breakpoint. В этом случае вы получите предупреждение о том, что система находится в hard mode, и этот же диалог «вышибет» систему из этого состояния. При нажатии на OK, вторая точка останова сработает как положено.

ПРИМЕЧАНИЕ: Поскольку работа отладчика построена на обработке сообщений, то он не может остановить работу в точке останова, если он «думает», что система вошла в режим hard mode, поскольку в этом случае вы не сможете ничего сделать, и система просто напросто зависнет. 

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

Nomadic отвечает:

A: Снести QEMM. Начисто. Простое отключение его функций не помогает.

Впрочем, это исправлено в QEMM 9.0. 

Разное 

Переустановка Delphi 2.0