KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Валентин Озеров, "Советы по Delphi. Версия 1.4.3 от 1.1.2001" бесплатно, без регистрации.
Перейти на страницу:

  result := False;

  OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);

  tp.PrivilegeCount := 1;

  if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then begin

   if enable then tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED

   else tp.Privileges[0].Attributes := 0;

   dwRetLen := 0;

   result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);

  end;

  CloseHandle(token);

 end;


begin

 if SetPrivilege('SeShutdownPrivilege', true) then begin

  ExitWindowsEx(flags, 0);

  SetPrivilege('SeShutdownPrivilege', False)

 end;

end;


initialization

 if IsSoftIce95Loaded or IsSoftIceNTLoaded then begin

  WinExit(EWX_SHUTDOWN or EWX_FORCE);

  Halt;

 end;

end

Файлы помощи 

Не могу открыть файл помощи…

Я создал файл помощи для моего приложения и назвал его KidsHelp.hlp

При запуске в системе, в которой файл был создан, программа находит его без проблем. Данная машина имеет конфигурацию Pentium 120 с установленной Windows 95. При запуске программы на второй системе, с Windows 3.1, при выборе пункта меню «Using Help» программа не может открыть файл. Я создал файл помощи с помощью программы «HC31.exe». В самом проекте я не указывал полный путь к файлу помощи, я указал только его имя.

1. Для решения этой проблемы я делаю две вещи:

2. Всегда располагаю файл помощи в том же каталоге, что и приложение

Назначаю файл помощи в обработчике события главной формы OnCreate таким образом:

Application.HelpFile := ChangeFileExt(Application.ExeName, '.HLP');

– Neil Rubenking 

Как сделать так, чтобы в приложении вызывался хелп с окошечком для поиска раздела?

Nomadic советует:

1.

unit {$IFDEF WIN32} Windows {$ELSE} WinProcs {$ENDIF};

function WinHelp(Wnd: HWnd; HelpFile: PChar; Command: Word; Data: LongInt): Bool;

Здесь цитата из WinAPI Help:

HELP_CONTEXTPOPUP

An unsigned long integer containing the context number for a topic. Displays in a pop-up window a particular Help topic identified by a context number that has been defined in the [MAP] section of the .HPJ file.

2. То же самое, что делает макрос «Search()» для WinHelp-а.

procedure TForm1.HelpSearchFor;

var S: String;

begin

 S := '';

 Application.HelpFile := 'C:MYAPPPATHMYHELP.HLP';

 Application.HelpCommand(HELP_PARTIALKEY, LongInt(@S));

end

Как заставить Help-файлы нормально отображать русский текст под Windows 3.x?

Nomadic советует:

Удалось вылечить дописыванием в файл проекта в графу Options строчки FORCEFONT=Arial Cyr, причем HC31 ругается что нет такого шрифта, но зато хелп потом нормально показывается практически под любой руссифицированной виндой.

Проверял с [Win31+CyrWin], [Win311Rus], [Win95PE], [Win95Rus].

На NT не проверял.

Причем шрифты в тексте ноомально переключаются и будут не только Arial.

Вот кусок который надо вставить в HPJ файл перед компиляцией –

[OPTIONS]

FORCEFONT=Arial Cyr

Графика 

256-цветное изображение из res-файла

Вот функция, правильно читающая 256-цветные изображения из файла ресурсов.

function LoadBitmap256(hInstance: HWND; lpBitmapName: PChar): HBITMAP;

var

 hPal, hRes, hResInfo: THandle;

 pBitmap: PBitmapInfo;

 nColorData: Integer;

 pPalette: PLogPalette;

 X: Integer;hPalette: THandle;

begin

 hResInfo:= FindResource(hInstance, lpBitmapName, RT_BITMAP);

 hRes:= LoadResource(hInstance, hResInfo);

 pBitmap:= Lockresource(hRes);

 nColorData:= pBitmap^.bmiHeader.biClrUsed;

 hPal := GlobalAlloc(GMEM_MOVEABLE, (16 * nColorData));

 {hPal := GlobalAlloc(GMEM_MOVEABLE, (SizeOf(LOGPALETTE) + (nColorData * SizeOf(PALETTEENTRY)));}

 pPalette := GlobalLock(hPal);

 pPalette^.palVersion := $300;

 pPalette^.palNumEntries := nColorData;

 for x := 0 to nColorData do begin

  pPalette^.palPalentry[X].peRed   := pBitmap^.bmiColors[X].rgbRed;

  pPalette^.palPalentry[X].peGreen := pBitmap^.bmiColors[X].rgbGreen;

  pPalette^.palPalentry[X].peBlue  := pBitmap^.bmiColors[X].rgbBlue;

 end;

 hPalette := CreatePalette(pPalette^);

 GlobalUnlock(hRes);

 GlobalUnlock(hPal);

 GlobalFree(hPal);

end;

end.

– Mark Lussier 

Как записать содержимое окна OpenGL в 'bmp' файл?

Nomadic советует:

Вот что попробовал – вроде получилось:

bt := TBitmap.Create;

bt.Width := gr.Width;

bt.Height := gr.Height;

bt.Canvas.CopyRect(ClientRect, gr.Canvas, gr.ClientRect);

bt.SaveToFile('e:bt.bmp');

bt.Free;

(gr – объект, в канве которого я рисую с помощью OpenGL)

Как создать disable'ный битмап из обычного (emboss etc)?

Nomadic советует:

CreateMappedBitmap() :-)

Один из параметров указатель на COLORMAP, в нем для 16 основных цветов делаешь перекодировку, цвета подберешь сам из принципа:

• все самые яркие → в GetSysColor(COLOR_3DLIGHT);

• самые темные → GetSysColor(COLOR_3DSHADOW);

• нейтральные, которые бyдyт прозрачными → GetSysColor(COLOR_3DFACE);

Так на самом деле вот как делается данная задача:

procedure Tform1.aaa(bmpFrom, bmpTo:Tbitmap);

var

 TmpImage,Monobmp:TBitmap;

 IRect:TRect;

begin

 MonoBmp := TBitmap.Create;

 TmpImage:=Tbitmap.Create;

 TmpImage.Width := bmpFrom.Width;

 TmpImage.Height := bmpFrom.Height;

 IRect := Rect(0, 0, bmpFrom.Width, bmpFrom.Height);

 TmpImage.Canvas.Brush.Color := clBtnFace;

 try

  with MonoBmp do begin

   Assign(bmpFrom);

   Canvas.Brush.Color := clBlack;

   if Monochrome then begin

    Canvas.Font.Color := clWhite;

    Monochrome := False;

    Canvas.Brush.Color := clWhite;

   end;

   Monochrome := True;

  end;

  with TmpImage.Canvas do begin

   Brush.Color := clBtnFace;

   FillRect(IRect);

   Brush.Color := clBlack;

   Font.Color := clWhite;

   CopyMode := MergePaint;

   Draw(IRect.Left + 1, IRect.Top + 1, MonoBmp);

   CopyMode := SrcAnd;

   Draw(IRect.Left, IRect.Top, MonoBmp);

   Brush.Color := clBtnShadow;

   Font.Color := clBlack;

   CopyMode := SrcPaint;

   Draw(IRect.Left, IRect.Top, MonoBmp);

   CopyMode := SrcCopy;

   bmpTo.assign(TmpImage);

   TmpImage.free;

  end;

 finally

  MonoBmp.Free;

 end;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

 aaa(image1.picture.bitmap,image2.picture.bitmap);

 Image2.invalidate;

end;

Писал это не я. Это написал сам Борланд (некузявно было бы взглянуть на класс TButtonGlyph. Как раз из него я это и выдернул). Ну а если уже совсем хорошо разобраться, то можно заметить функцию ImageList_DrawEx, в которой можно на 25 и 50 процентов уменьшить яркость (но визуально это очень плохо воспринимается). Соответственно параметры ILD_BLEND25, ILD_BLEND50, ILD_BLEND-A-MED. Естественно, что последний абзац работает только с тройкой.

Denis Tanayeff

Это кусочек из рабочей проги на Си, Вроде все лишнее я убрал.

#define CO_GRAY 0x00C0C0C0L

hMemDC = CreateCompatibleDC(hDC);

 hOldBitmap = SelectObject(hMemDC, hBits);

// hBits это собственно картинка, которую надо «засерить»

GetObject(hBits, sizeof(Bitmap), (LPSTR) &Bitmap);

if (GetState(BS_DISABLED)) // Blt disabled

{

 hOldBrush = SelectObject(hDC, CreateSolidBrush(CO_GRAY));//CO_GRAY

 PatBlt(hDC, BD_BORDERWIDTH, BD_BORDERWIDTH, Bitmap.bmWidth, Bitmap.bmHeight, PATCOPY);

 DeleteObject(SelectObject(hDC, hOldBrush));

 lbLogBrush.lbStyle = BS_PATTERN;

 lbLogBrush.lbHatch =(int)LoadBitmap(hInsts, MAKEINTRESOURCE(BT_DISABLEBITS));

 hOldBrush = SelectObject(hDC, CreateBrushIndirect(&lbLogBrush));

 BitBlt(hDC, BD_BORDERWIDTH, BD_BORDERWIDTH, Bitmap.bmWidth, Bitmap.bmHeight, hMemDC, 0, 0, 0x00A803A9UL); // DPSoa

 DeleteObject(SelectObject(hDC, hOldBrush));

 DeleteObject((HGDIOBJ)lbLogBrush.lbHatch);

}

Компонент для работы с FLIC-анимацией

Новостная группа: comp.lang.pascal.delphi.components

Тема: Компонент для работы с FLIC-анимацией: отправной пункт.

От: Paul Kuczora < [email protected]>

Дата: Чет, 03 Авг 95 16:51:19 GMT

В качество ответа на целый круг вопросов, я включил в свой ответ два файла:

aaplay1.inc — include-файл с интерфейсом для библиотеки aaplay.dll

aaplay1.pas — сырой скелет компонента для проигрывания FLIC-анимации

Я разработал это глядя на другой компонент (это был полнофункциональный плейер, работающий как форма), и вынужден был сохранить некоторые вещи неприкосновенными (попробуй тут сделай иначе :-)

Для работы вам понадобится библиотека aaplay.dll от Autodesk, которую вы можете найти на множестве мест (например, я так предполагаю, на Encarta CD). Для полного счастья вы можете обратиться к файлу помощи для Animation Player for Windows, который, не удивляйтесь, содержит справку для этой DLL — на первой странице найдите в ее самой нижней части указание на эту библиотеку, и перед вами предстанет полная справка по вызовам этой самой DLL.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*