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

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

> {Private declarations}

> procedure UMMyGlobalMessage(var AMessage: TMessage); message UM_MyGlobalMessage;

>public

> {Public declarations}

>end;


>var Form1: TForm1;


>implementation

>{$R *.DFM}


>uses Unit2;


>procedure TForm1.FormShow(Sender: TObject);

>begin

> Form2.Show;

>end;


>procedure TForm1.UMMyGlobalMessage(var AMessage: TMessage);

>begin

> Label1.Left := AMessage.WParam;

> Label1.Top := AMessage.LParam;

> Form1.Caption := 'Got It!';

>end;


>procedure TForm1.Button1Click(Sender: TObject);

>var f: integer;

>begin

> for f := 0 to Screen.FormCount - 1 do Screen.Forms[f].Perform(UM_MyGlobalMessage, 42, 42);

>end;


>{Code for Unit2}

>const UM_MyGlobalMessage = WM_USER + 1;

>type TForm2 = class(TForm)

> Label1: TLabel;

>private

> {Private declarations}

> procedure UMMyGlobalMessage(var AMessage: TMessage); message UM_MyGlobalMessage;

>public

> {Public declarations}

>end;


>var Form2: TForm2;


>implementation

>{$R *.DFM}


>procedure TForm2.UMMyGlobalMessage(var AMessage: TMessage);

>begin

> Label1.Left := AMessage.WParam;

> Label1.Top := AMessage.LParam;

> Form2.Caption := 'Got It!';

>end;


Вопрос:

Как обновить список дисков компонента TDriveComboBox, учитывая, что могут быть подключены/отключены сетевые диски и произведена "горячая замена" plug&play дисков?

Ответ:

Следующий пример вызывает защищенный (protected) метод класса TDriveComboBox BuildList() для регенерации списка дисков. (использовая так наз. "class cracer")

Пример:

>type TNewDriveComboBox = class(TDriveComboBox) //это наш "class cracer"

>end;


>procedure TForm1.Button1Click(Sender: TObject);

>var Drive : char;

>begin

> Drive := DriveComboBox1.Drive;

> TNewDriveComboBox(DriveComboBox1).BuildList; //вызываем защищенный метод родительского класса

> DriveComboBox1.Drive := Drive;

>end;


Вопрос:

Как программно заставить выпасть меню?

Ответ:

В примере показано как показать меню и выбрать в нем какой-то пункт, эмулируя нажатие "быстрой клавиши" пункта меню. Если у Вашего пункта меню нет "быстрой клавиши" Вы можете посылать комбинации VK_MENU, VK_LEFT, VK_DOWN, и VK_RETURN, чтобы программно "путешествовать" по меню.

Пример:

>procedure TForm1.Button1Click(Sender: TObject);

>begin

> //Allow button to finish painting in response to the click

> Application.ProcessMessages;

> {Alt Key Down}

> keybd_Event(VK_MENU, 0, 0, 0);

> {F Key Down - Drops the menu down}

> keybd_Event(ord('F'), 0, 0, 0);

> {F Key Up}

> keybd_Event(ord('F'), 0, KEYEVENTF_KEYUP, 0);

> {Alt Key Up}

> keybd_Event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);

> {F Key Down}

> keybd_Event(ord('S'), 0, 0, 0);

> {F Key Up}

> keybd_Event(ord('S'), 0, KEYEVENTF_KEYUP, 0);

>end;


Вопрос:

Как сделать клавишу-акселератор (keyboard shortcut) компоненту, у которого нет заголовка?

Ответ:

Возможный вариант — присвоить ссылку на этот компонент свойству FocusControl TLabel'а. В примере используется невидимый Label для создания "быстрой" клавиши (Alt+M) компонента Memo. Чтобы использовать пример, разместите на форме компонет TMemo, Label и несколько других компонентов, которые могут принимать фокус ввода. Запустите программу, перевидите фокус ввода куда-нибудь вне Memo и нажмите Alt+M — фокус ввода вернется в Memo.

Пример:

>procedure TForm1.FormCreate(Sender: TObject);

>begin

> Label1.Visible := false;

> Label1.Caption := '&M';

> Label1.FocusControl := Memo1;

>end;


 Вопрос:

Можно ли как-то уменьшить мерцание при перерисовке компонента?

Ответ:

Если добавить флаг csOpaque (непрозрачный) к свойству ControlStyle компонента — то фон компонента перерисовываться не будет.

Пример:

>constructor TMyControl.Create;

>begin

> inherited;

> ControlStyle := ControlStyle + [csOpaque];

>end;


Вопрос:

Как запретить изменение размера моего компонента в design-time?

Ответ:

Поместите в конструктор компонента код, устанавливающий размеры по умолчанию. Переопределите метод SetBounds и проверяйте в нем "componentstate". Если компонет находится режиме "design-time" (csDesigning in ComponentState) просто передавайте значения ширины и высоты (width и heights) компонента по умолчанию (в нашем примере 50) методу класса-предка.

Пример:

>procedure TVu.SetBounds(ALeft : integer; ATop : integer; AWidth : integer; AHeight : integer);

>begin

> if csdesigning in componentstate then begin

>  AWidth := 50;

>  AHeight := 50;

>  inherited; //вызываем унаследованный от предка метод

> end;

>end;


Вопрос:

Можно ли уменьшить потребляемые компонентами TNotebook и TTabbedNotebook ресурсы?

Ответ:

Да. Можно уничтожать обьекты, расположенные не на текущей странице TNotebook или TTabbedNotebook. В примере вызывается защищенный (Protected) метод путем создания так называемый "class cracer'ов".

>type TMyTabbedNotebook = class(TTabbedNotebook); //это наш "class cracer"

>type TMyNotebook = class(TNotebook);


>procedure TForm1.TabbedNotebook1Change(Sender: TObject; NewTab: Integer; var AllowChange: Boolean);

>begin

> with TabbedNotebook1 do //вызываем защищенный метод родительского класса

>  TMyTabbedNotebook(TWinControl(Pages.Objects[PageIndex])).DestroyHandle;

>end;


>procedure TForm1.TabSet1Change(Sender: TObject; NewTab: Integer; var AllowChange: Boolean);

>begin

> with Notebook1 do //вызываем защищенный метод родительского класса


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

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


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

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


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

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


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

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


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

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


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

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


Рекомендуем почитать
Графика DirectX в Delphi

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


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


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

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


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

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


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

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


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

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