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

Unknown

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;

 Pen : hPen;

 OldPen : hPen;

 OldBrush : hBrush;

begin

 inherited;

 dc := GetWindowDC(Handle);

 msg.Result := 1;