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

Unknown

  R.Left := R.Left + StringGrid1.Left;

  R.Right := R.Right + StringGrid1.Left;

  R.Top := R.Top + StringGrid1.Top;

  R.Bottom := R.Bottom + StringGrid1.Top;

  ComboBox1.Left := R.Left + 1;

  ComboBox1.Top := R.Top + 1;

  ComboBox1.Width := (R.Right + 1) - R.Left;

  ComboBox1.Height := (R.Bottom + 1) - R.Top;

  {Покажем combobox}

  ComboBox1.Visible := True;

  ComboBox1.SetFocus;

 end;

 CanSelect := True;

end;

Вопрос:

Как узнать есть ли в заданном CD-ROM'е Audio CD?

Ответ:

Можно использовать функцию Windows API GetDriveType() чтобы определить является ли дисковод CD-ROM'мом. И функцию API GetVolumeInformation() чтобы проверить VolumeName на равенство 'Audio CD'.

Пример:

function IsAudioCD(Drive : char) : bool;

var

 DrivePath : string;

 MaximumComponentLength : DWORD;

 FileSystemFlags : DWORD;

 VolumeName : string;

Begin

 result := false;

 DrivePath := Drive + ':\';

 if GetDriveType(PChar(DrivePath)) <> DRIVE_CDROM then exit;

 SetLength(VolumeName, 64);

 GetVolumeInformation(PChar(DrivePath),PChar(VolumeName), Length(VolumeName),nil,MaximumComponentLength,FileSystemFlags,nil,0);

 if lStrCmp(PChar(VolumeName),'Audio CD') = 0 then result := true;

end;

function PlayAudioCD(Drive : char) : bool;

var mp : TMediaPlayer;

begin

 result := false;

 Application.ProcessMessages;

 if not IsAudioCD(Drive) then exit;

 mp := TMediaPlayer.Create(nil);

 mp.Visible := false;

 mp.Parent := Application.MainForm;

 mp.Shareable := true;

 mp.DeviceType := dtCDAudio;

 mp.FileName := Drive + ':';

 mp.Shareable := true;

 mp.Open;

 Application.ProcessMessages;

 mp.Play;

 Application.ProcessMessages;

 mp.Close;

 Application.ProcessMessages;

 mp.free;

 result := true;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 if not PlayAudioCD('D') then ShowMessage('Not an Audio CD');

end;

Вопрос:

Как узнать есть ли у мыши колесико?

Ответ:

Свойство "WheelPresent" глобального обьекта "mouse".

Вопрос:

События KeyPress и KeyDown не вызываются для клавиши Tab — как определить, что она была нажата?

Ответ:

На уровне формы клавиша tab обычно обрабатывается Windows. В примере создается обработчик события CM_Dialog для перехвата Dialog keys.

Пример:

type TForm1 = class(TForm)

private

 procedure CMDialogKey( Var msg: TCMDialogKey ); message CM_DIALOGKEY;

end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CMDialogKey(var msg: TCMDialogKey);

begin

 if msg.Charcode <> VK_TAB then inherited;

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);