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);

begin

 if Key = VK_TAB then Form1.Caption := 'Tab Key Down!';

end;

Вопрос:

В чем отличие между Create(Self) и Create(Application)?

Ответ:

Self может быть использовано только в методе класса, и ссылается на текущий экземпляр класса. Таким образом "Self" в методе класса TForm1 ссылается на текущий экземпляр TForm1. При создании компонента Вы передаете его владельца (owner) в конструктор. При уничтожении формы или компонента автоматически уничтожаются и все компоненты владельцем которого она является. Таким образом если при создании формы передать в качестве владельца Application эта форма будет автоматически уничтожена при уничтожении Application. Если же при создании формы передать в качестве владельца другую форму, вновь созданная форма будет автоматически уничтоженн при уничтожении формы-владельца.

Вопрос:

Как во время выполнения определить поддерживает ли обьект заданное свойство?

Ответ:

function HasProperty(Obj : TObject; Prop : string) : PPropInfo;

begin

 Result := GetPropInfo(Obj.ClassInfo, Prop);

end;

procedure TForm1.Button1Click(Sender: TObject);

var p : pointer;

begin

 p := HasProperty(Button1, 'Color');

 if p <> nil then SetOrdProp(Button1, p, clRed)

 else ShowMessage('Button has no color property');

 p := HasProperty(Label1, 'Color');

 if p <> nil then SetOrdProp(Label1, p, clRed)

 else ShowMessage('Label has no color property');

 p := HasProperty(Label1.Font, 'Color');

 if p <> nil then SetOrdProp(Label1.Font.Color, p, clBlue)

 else ShowMessage('Label.Font has no color property');

end;

Вопрос:

Как при проигрывании музыки с Audio CD показывать сколько прошло минут и секунд?

Ответ:

В примере время выводится по таймеру.

Пример:

uses MMSystem;

procedure TForm1.Timer1Timer(Sender: TObject);

var

 Trk : Word;

 Min : Word;

 Sec : Word;

begin

 with MediaPlayer1 do begin

  Trk := MCI_TMSF_TRACK(Position);

  Min := MCI_TMSF_MINUTE(Position);

  Sec := MCI_TMSF_SECOND(Position);

  Label1.Caption := Format('%.2d',[Trk]);

  Label2.Caption := Format('%.2d:%.2d',[Min,Sec]);

 end;

end;

Вопрос:

Можно ли рисовать на рамке формы?

Ответ:

Обрабатывайте событие WM_NCPAINT. В примере рамка обводится красной линией толщиной в 1 пиксел.

Пример:

type TForm1 = class(TForm)

private

 {Private declarations}

 procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPAINT;

public

 {Public declarations}

end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);

var

 dc : hDc;

Перейти на страницу:

Похожие книги