Читать «Виртуальная библиотека Delphi» онлайн - страница 152

Unknown

{$ELSE}

 if RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'HARDWARE\DESCRIPTION\System\FloatingPointProcessor',0, KEY_EXECUTE, TheKey) <> ERROR_SUCCESS then result := false;

 RegCloseKey(TheKey);

{$ENDIF}

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 if HasCoProcesser then ShowMessage('Has CoProcessor')

 else ShowMessage('No CoProcessor - Windows Emulation Mode');

end;

Вопрос:

Как узнать серийный номер аудио CD?

Ответ:

CD может иметь или не иметь серийный номер и/или универсальный код продукта (Universal Product Code). MCI-расширение Windows предоставляет эту информации с помощью комманды MCI_INFO_MEDIA_IDENTITY command. Эта команда возвращает уникальную ID-строку.

Пример:

uses MMSystem, MPlayer;

procedure TForm1.Button1Click(Sender: TObject);

var

 mp : TMediaPlayer;

 msp : TMCI_INFO_PARMS;

 MediaString : array[0..255] of char;

 ret : longint;

begin

 mp := TMediaPlayer.Create(nil);

 mp.Visible := false;

 mp.Parent := Application.MainForm;

 mp.Shareable := true;

 mp.DeviceType := dtCDAudio;

 mp.FileName := 'D:';

 mp.Open;

 Application.ProcessMessages;

 FillChar(MediaString, sizeof(MediaString), #0);

 FillChar(msp, sizeof(msp), #0);

 msp.lpstrReturn := @MediaString;

 msp.dwRetSize := 255;

 ret := mciSendCommand(Mp.DeviceId, MCI_INFO, MCI_INFO_MEDIA_IDENTITY, longint(@msp));

 if Ret <> 0 then begin

  MciGetErrorString(ret, @MediaString, sizeof(MediaString));

  Memo1.Lines.Add(StrPas(MediaString));

 end else Memo1.Lines.Add(StrPas(MediaString));

 mp.Close;

 Application.ProcessMessages;

 mp.free;

end;

end.

Вопрос:

Как вывести на элемент управления (Window control) текст, содержащий амперсанд — &?

Ответ:

Используя два амперсанда подряд. Windows интерпритирует одиночный амперсанд как указание на то, что следующий символ — горячая клавиша (и поддчеркивает следующий символ вместо изображения аперсанда).

Пример:

Button1.Caption := 'Черное && Белое';

Вопрос:

Как поместить bitmap в Metafile?

Ответ:

см. пример

Пример:

procedure TForm1.Button1Click(Sender: TObject);

var

 m : TmetaFile;

 mc : TmetaFileCanvas;

 b : tbitmap;

begin

 m := TMetaFile.Create;

 b := TBitmap.create;

 b.LoadFromFile('C:\SomePath\SomeBitmap.BMP');

 m.Height := b.Height;

 m.Width := b.Width;

 mc := TMetafileCanvas.Create(m, 0);

 mc.Draw(0, 0, b);

 mc.Free;

 b.Free;

 m.SaveToFile('C:\SomePath\Test.emf');

 m.Free;

 Image1.Picture.LoadFromFile('C:\SomePath\Test.emf');

end;

Вопрос:

Как узнать, что курсор мыши над моей формой?

Ответ:

Можно использовать функцию GetCapture() из Windows API.

Примечание: Cм. документацию Windows для информации об ограничениях функции GetCapture.