Виртуальная библиотека Delphi - [83]

Шрифт
Интервал

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

> Pen := CreatePen(PS_SOLID, 1, RGB(255, 0, 0));

> OldPen := SelectObject(dc, Pen);

> OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH));

> Rectangle(dc, 0,0, Form1.Width, Form1.Height);

> SelectObject(dc, OldBrush);

> SelectObject(dc, OldPen);

> DeleteObject(Pen);

> ReleaseDC(Handle, Canvas.Handle);

>end;


Вопрос:

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

Ответ:

Создайте процедуру, которая будет вызываться при событии Application.OnIdle.

Обьявим процедуру:

>{Private declarations}

>procedure IdleEventHandler(Sender: TObject; var Done: Boolean);

В разделе implementation опишем процедуру:

>procedure TForm1.IdleEventHandler(Sender: TObject; var Done: Boolean);

>begin

> {Do a small bit of work here}

> Done := false;

>end;

В методе Form'ы OnCreate — укажем что наша процедура вызывается на событии Application.OnIdle.

Application.OnIdle := IdleEventHandler;

Событие OnIdle возникает один раз — когда приложение переходит в режим "безделья" (idle). Если в обработчике переменной Done присвоить False событие будет вызываться вновь и вновь, до тех пор пока приложение "бездельничает" и переменной Done не присвоенно значение True.


Вопрос:

При перемещении фокуса ввода клавишей Tab чтобы переместить его в RadioGroup нужно нажать клавишу Tab дважды если какой нибудь пункт RadioGroup уже выбран, но только один раз если не выбран. Можно ли сделать поведение RadioGroup логичным?

Ответ:

Установка свойства RadioGroup'ы TabStop в false должна решить эту проблему — поскольку клавиша tab будет продолжать работать — перемещаясь сразу на выделенный пункт RadioGroup.


Вопрос:

Как разместить маленькие картинки в компоненте TPopUpMenu?

Ответ:

В приведенном примере показано как это сделать с использованием функции Windows API SetMenuItemBitmaps(). Эта функция получает handle popup menu, позицию строчки меню куда будет помещена картинка, и два дескриптора (handles) на две картинки (одна из них — картинка которая будет показана когда строка меню доступна, вторая — когда строка меню недоступна).

>type TForm1 = class(TForm)

> PopupMenu1: TPopupMenu;

> Pop11: TMenuItem;

> Pop21: TMenuItem;

> Pop31: TMenuItem;

> procedure FormCreate(Sender: TObject);

> procedure FormDestroy(Sender: TObject);

> procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

>private

> {Private declarations}

> bmUnChecked : TBitmap;

> bmChecked : TBitmap;

>public

> {Public declarations}

>end;


>var Form1: TForm1;


>implementation

>{$R *.DFM}


>procedure TForm1.FormCreate(Sender: TObject);


Еще от автора Неизвестный Автор
Галчонок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Призраки ночи

В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.


Закат  вечности

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


mmmavro.org | День 131, Победа

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


mmmavro.org | День 132, Поэт

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.



DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.