Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
{ пункта (Entry) определенной секции [Section] определенного }
{ INI-файла (дополняем '.ini', если отсутствует). Возвращаем }
{ нулевую строку, если IniFile, Section или Entry не найден. }
{----------------------------------------------------------------}
var
IniFileVar: string;
IniFileObj: TIniFile;
begin
ifStrEndsWith(IniFile, '.ini') thenIniFileVar := IniFile
elseIniFileVar := IniFile + '.ini';
IniFileObj := TIniFile.Create(IniFileVar);
GetIni := IniFileObj.ReadString(Section, Entry, '');
IniFileObj.Free;
end; {GetIni}
Как исправить проблемы с вызовом помощи при одновременно стоящих Delphi 1 и Delphi 2?
Nomadicотвечает:
A: (AP): Решаются так…
В regedit убейте из секции HKLM\SOFTWARE\Microsoft\Windows\Help все, что равно «…\help».
Изменив соответствующие пути, импортируйте в реестр следующий файлик:
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\delphi32.exe]
@="C:\\DELPHI2\\BIN\\delphi32.exe
"Path"="C:\\DELPHI2\\HELP"
Защита
Борьба с SoftIce
Igor Nikolaev aKa The Spriteпишет:
Hаткнулся в инете на некий модуль StopIce, и любопытство сделало своё дело. Как долго я смеялся… :))))
Для тех, кто не в курсе: посмотрите export NmSymIsSoftIceLoaded (или что-то подобное) в nmtrans.dll.
Вот полный юнит против SOFTICE, при обнаружении отладчика перезагружает компьютер:
unitStopIce;
interface
implementation
usesWindows;
FunctionIsSoftIce95Loaded: boolean;
VarhFile: Thandle;
Begin
result := false;
hFile := CreateFileA('\\.\SICE', GENERIC_READ orGENERIC_WRITE, FILE_SHARE_READ orFILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(hFile <> INVALID_HANDLE_VALUE) then begin
CloseHandle(hFile);
result := TRUE;
end;
End;
FunctionIsSoftIceNTLoaded: boolean;
VarhFile: Thandle;
Begin
result := false;
hFile := CreateFileA('\\.\NTICE', GENERIC_READ orGENERIC_WRITE, FILE_SHARE_READ orFILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(hFile <> INVALID_HANDLE_VALUE) then begin
CloseHandle(hFile);
result := TRUE;
end;
End;
functionWinExit(flags: integer): boolean;
functionSetPrivilege(privilegeName: string; enable: boolean): boolean;
var
tpPrev, tp: TTokenPrivileges;
token: THandle;
dwRetLen: DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES orTOKEN_QUERY, token);
tp.PrivilegeCount := 1;
ifLookupPrivilegeValue( nil, pchar(privilegeName), tp.Privileges[0].LUID) then begin
ifenable thentp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
elsetp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;
begin
ifSetPrivilege('SeShutdownPrivilege', true) then begin
ExitWindowsEx(flags, 0);
SetPrivilege('SeShutdownPrivilege', False)
end;
end;
initialization
ifIsSoftIce95Loaded orIsSoftIceNTLoaded then begin
WinExit(EWX_SHUTDOWN orEWX_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};
functionWinHelp(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-а.
procedureTForm1.HelpSearchFor;
varS: String;
begin
S := '';
Application.HelpFile := 'C:\MYAPPPATH\MYHELP.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-цветные изображения из файла ресурсов.
functionLoadBitmap256(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;
forx := 0 tonColorData 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)
Читать дальшеИнтервал:
Закладка: