property Forms[Index: Integer]: TForm;
property FonrCount: Integer;

Нужно иметь в виду, что в списке указаны только формы, открытые приложением, а не все окна системы.

Следующие два свойства указывают на активную в данный момент форму и ее активный элемент управления:

property ActiveControl: TWinControl ;
property ActiveForm: TForm;

При их изменении генерируются, соответственно, события

property OnActiveControlChange: TNotifyEvent;
property OnActiveFormChange: TNotifyEvent;
Хотя и "некстати", расскажем здесь о свойстве property DefaultKbLayout: HKL;

Оно указывает на раскладку клавиатуры, принятую в системе по умолчанию. Часто раскладку клавиатуры нужно переключать программно, чтобы облегчить жизнь пользователю. Так, в приложении, в котором надо быстро вводить в базу данных большой объем информации на русском и английском языках, такое переключение при смене полей просто необходимо.

Сначала следует прочитать список имеющихся в системе раскладок и установить нужную:

var RusLayout, EixjLayout : THandle;
procedure TMainForm.FormCreate(Sender: TObject);
var Layouts : array[0..7] of THandle;
i,n : Integer;
begin
// Считывание раскладок RusLayout := 0;
EngLayout := 0;
n := GetKeyboardLayoutList(High(Layouts)+1, Layouts);

if n>0 then

for i: = 0 to n-1 do

if LoWord (Layouts [i] ) and SFF = LANG_RUSSIAN then RusLayout := Layouts [i] else if LoWord (Layouts [i] ) and SFF = LANGJSNGLISH then EngLayout := Layouts[i]; /'/ Если есть, включим русскую

if RusLayoutoO then ActivateKeyboardLayout (RusLayout, 0);
end;

Затем при входе в определенное поле (компонент редактирования данных) и выходе из него можно программно сменить раскладку:

prœedure TMainForm.EditDocSerEnter(Sender: TObject);
begin
if EngLayoutoO then ActivateKeyboardLayout (EngLayout, 0) ;
end;
prccedure TMainForm.EditDocSerExit(Sender: TObject);
begin
if RusLayoutoO then ActivateKeyboardLayout (RusLayout, 0) ;
end;

Вывод графики сиспользованиемотображаемыхфайлов

Спору нет - объект TBitmap удобен и универсален. Программисты Borland шагают в ногу с разработчиками графического API Windows, и исходный код модуля GRAPHICS.PAS от версии к версии совершенствуется. Но в ряде случаев возможностей, предоставляемых стандартным компонентом, недостаточно. Один из таких случаев - работа с большими и очень большими изображениями (до сотен Мбайт). С ними приходится иметь дело в полиграфии, медицине, при обработке изображений дистанционного зондирования Земли из космоса и т. п. Здесь класс TBitmap не подходит, т. к. запрашивает для хранения и преобразования картинки слишком много ресурсов.

Что делать? На помощь следует призвать Windows API, поддерживающий файлы, отображаемые в память (Memory Mapped Files). У них много полезных свойств, но здесь важно только одно из них. При создании битовой карты Windows распределяет для нее часть виртуального адресного пространства. А оно не безгранично - для выделения 50-100 Мбайт может не хватить размеров файла подкачки, не говоря уже об ОЗУ. Но можно напрямую отобразить файл в виртуальную память, сделав его частью виртуального адресного пространства. В этом случае нашему файлу с изображением будет просто выделен диапазон адресов, которые можно использовать для последующей работы.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Декабрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31