Borland Delphi FAQ
Страница 3.



------------------------------------------------------------

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

 
« Предыдущая статья   Следующая статья »