Страница 3 из 12
------------------------------------------------------------ Q-40: Как получить короткий путь файла если имеется длинный? ------------------------------------------------------------ GetShortPathName() ------------------------------------------------------------ Q-41: Как написать сервис для Windows NT? ------------------------------------------------------------ В поставке Delphi 4 есть пример. https://www.sawatzki.de. ------------------------------------------------------------
Q-42: Как работать с registry?
------------------------------------------------------------ TRegistry ------------------------------------------------------------
Q-43: Как выдвинуть дверцу CD-ROM'а?
------------------------------------------------------------ procedure EjectCDROM(aLetter : char); const AliasName = 'MyCoolCdrom'; var s : string; begin s := 'open ' + aLetter + ': type cdaudio alias ' + AliasName + aLetter + ' shareable wait'; if mciSendString(PChar(s), nil, 0, 0) <> 0 then exit; // fails to open try s := 'set ' + AliasName + aLetter + ' door open wait'; mciSendString(PChar(s), nil, 0, 0); finally s := 'close ' + AliasName + aLetter + ' wait'; mciSendString(PChar(s), nil, 0, 0); end; end; ------------------------------------------------------------
Q-44: Как перехватывать клавиши, нажатые в окне другой программы? И вообще, любые события
------------------------------------------------------------ SetWindowsHookEx(). ------------------------------------------------------------ Q-45: Как вызывать из 32-битной программы 16-битные DLL? ------------------------------------------------------------ Hадо применять так называемые "thunks". Смотри статью на https://www.itecuk.com/delmag/thunk95.htm. ------------------------------------------------------------ Q-46: Почему у меня record a : word; b : longint end; имеет размер восемь байт вместо шести?
------------------------------------------------------------ RTFM packed, $A. ------------------------------------------------------------ Q-47: Где взять подробную документацию по работе с RTF, TRichEdit? ------------------------------------------------------------ В MSDN. В rxLib 2.60 появился компонент TrxRichEdit, полностью поддерживающий MS RichEdit 2.0 и его DB-aware версия. Рекомендуется. ------------------------------------------------------------ Q-48: Как можно перетаскивать форму не только за заголовок? ------------------------------------------------------------ WM_NCHITTEST. ------------------------------------------------------------ Q-49: Как отследить "уход" курсора мыши с компонета? ------------------------------------------------------------ Обрабатывать CM_MOUSEENTER/CM_MOUSELEAVE. ------------------------------------------------------------ Q-50: Как добавить пункты в системное меню окна? ------------------------------------------------------------ Получить хэндл системного меню окна можно с помощью функции GetSystemMenu(). ------------------------------------------------------------ Q-51: Можно ли сделать так, чтобы в исполняемом файле программы находился какой-нибудь звук в формате .wav
------------------------------------------------------------ Можно ли сделать так, чтобы в исполняемом файле программы находился какой-нибудь звук в формате .wav, и можно было бы проиграть этот звук? В файл MyWave.rc пишешь: MyWave RCDATA LOADONCALL MyWave.wav brcc32.exe MyWave.rc, получаешь MyWave.res. В своей программе пишешь: {$R MyWave.res} Все! Предупреждая следующий твой вопрос "а как прочитать wave-файл из исполняемого файла?" procedure RetrieveMyWave; var hResource: THandle; pData: Pointer; begin hResource:=LoadResource( hInstance, FindResource(hInstance, 'MyWave', RT_RCDA TA)); try pData := LockResource(hResource); if pData = nil then raise Exception.Create('Cannot read MyWave'); // Здесь pData указывает на MyWave // Теперь можно, например, проиграть его (Win32): PlaySound(pData, 0, SND_MEMORY); finally FreeResource(hResource); end; end; +++++++++++++++++++++++++++++++++ PlaySound('RESNAME', 0, SND_MEMORY or SND_RESOURCE); Anatoly Podgoretsky ------------------------------------------------------------ Q-52: Как узнать и поменять разрешение экрана? ------------------------------------------------------------ Поменять: procedure ChangeDisplayResolution(x, y : word); var dm : TDEVMODE; begin ZeroMemory(@dm, sizeof(TDEVMODE)); dm.dmSize := sizeof(TDEVMODE); dm.dmPelsWidth := x; dm.dmPelsHeight := y; dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT; ChangeDisplaySettings(dm, 0); end; Узнать можно также с помощью объекта Screen Screen.Width Screen.Height |