Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров
- Дата:20.06.2024
- Категория: Компьютеры и Интернет / Программирование
- Название: Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор: Валентин Озеров
- Просмотров:5
- Комментариев:0
Шрифт:
Интервал:
Закладка:
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.
- Основы объектно-ориентированного программирования - Бертран Мейер - Прочая околокомпьтерная литература
- HR-брендинг. Как стать лучшим работодателем в России - Нина Осовицкая - Маркетинг, PR, реклама
- Аквариум. (Новое издание, исправленное и переработанное) - Виктор Суворов (Резун) - Шпионский детектив
- Как учить чужой язык? - Антон Хрипко - Справочники
- Концептуальное проектирование сложных решений - Андрей Теслинов - Психология, личное