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

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

Уважаемые читатели!
Тут можно читать бесплатно Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров. Жанр: Программирование. Так же Вы можете читать полную версию (весь текст) онлайн книги без регистрации и SMS на сайте Knigi-online.info (книги онлайн) или прочесть краткое содержание, описание, предисловие (аннотацию) от автора и ознакомиться с отзывами (комментариями) о произведении.
Описание онлайн-книги Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров:
…начиная с 1001. Смотрите другие файлы…
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 111 112 113 114 115 116 117 118 119 ... 123

  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.

1 ... 111 112 113 114 115 116 117 118 119 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий

Рейтинговые книги