2.12. Свойства разного назначения
Узнать текущее состояние любого управляющего элемента на этапе прогона программы можно с помощью свойства
type TControlState = set of (csLButtonDown, csClicked, csPalette, csReadingState, csAlignmentNeeded, csFocusing, csCreating, csCustomPaint, csDestroyingHandle);
property ControlState: TControlState;
класса TControl.
Элементы множества TControlState имеют следующий смысл:
Элемент | Описание |
csLButtonDow | Над элементом была нажата и еще не отпущена левая кнопка мыши |
n csClicked | То же, что csLButtonDown, но устанавливается, если стиль компонента содержит флаг csClickEvents и означает, что нажатие кнопки интерпретируется как щелчок |
csPalette | Элемент или его родитель получил сообщение WMPALETTCHANGED |
csReadingState | Элемент читает данные из потока |
csAlignmentNeeded | Элемент нуждается в перерисовке, т. к. изменилось его свойство Alignment |
csFocusing | Программа пытается передать элементу фокус ввода |
csCreating | Элемент и/или его родительские и дочерние элементы находятся в стадии создания. Флаг очищается после завершения процесса |
csCustomPaint | Элемент перерисовывается |
csDestroyingHandle | Разрушается Windows-дескриптор элемента |
Свойство
type TControlStyle = set of (csAcceptsControls, csCaptureMouse, csDesignInteractive, csFramed, csClickEvents, csSetCaption, csOpaque, csDoubleClicks, csFixedWidth, csFixedHeight, csNoDesignVisible, csReplicatable, csNoStdEvents, csDisplayDraglmage, csReflector, csActionClient, csMenuEvents) ;
property ControlStyle: TControlStyle;
содержит стилевые флаги элемента, имеющие такой смысл:
Стилевые флаги | Описание |
csAcceptsControls | Элемент может стать владельцем дочернего элемента в технологии Drag&Dock |
csActionClient | Элемент может участвовать в централизованном действии |
csCaptureMouse | Элемент будет получать все сообщения от мыши, даже если ее указатель выйдет из его границ |
csClickEvents | Элемент может воспринимать щелчок мыши |
csDesignInteractive | Элемент воспринимает щелчок правой кнопкой мыши на этапе конструирования формы |
csDisplayDragImage | Элемент способен менять свое изображение при протаскивании над ним “груза” в технологии Drags Drop |
csDoubleClicks | Элемент может воспринимать двойной щелчок мыши |
csPixedHeight | Элемент имеет фиксированную высоту |
csFixedWidth | Элемент имеет фиксированную ширину |
csFramed | Элемент имеет трехмерную рамку |
csNoDesignVisible | Элемент не виден на этапе конструирования формы |
csNoStdEvents | Элемент не реагирует на стандартные события от мыши или клавиатуры |
csOpaque | Элемент закрашивает всю свою клиентскую область |
csReflector | Элемент способен получать диалоговые сообщения Windows, сообщения, связанные с получением/потерей фокуса ввода и изменением размеров. |
csReplicatable | Используется для компонентов АсtiveX |
csSetCaption | Элемент способен отобразить свой образ с помощь метода PaintTo Элемент будет изменять свой заголовок при изменении своего свойства Name |
Контрольные вопросы
Какой класс служит базой для создания как видимых, так и невидимых компонентов.
Какие компоненты способны получать и обрабатывать сообщения Windows?
По каким правилам строится имя компонента в программе?
Какие методы предназначены для управления списком Components?
Какие компоненты называются родительскими, дочерними?
С помощью каких методов можно работать со списком Controls?
С помощью каких методов можно расположить компонент над всеми компонентами и убрать обратно, если он частично или полностью перекрывается другими компонентами?
Какое свойство у глобального объекта Screen используется для изменения формы указателя для всех окон программы одновременно?
Какие обработчики событий определяют реакцию программы на нажатие и отпускание кнопки мыши, на перемещение указателя мыши над компонентом, на щелчок и двойной щелчок левой кнопки?
Каким способом достигается выделение элемента, которому в данный момент передается клавиатурный ввод?
Какой интерфейс в Delphi позволяет компонентам обмениваться данными путем “перетаскивания” их мышью?
Примеры составления программ
Иллюстрация технологии Drag&Drop
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
type
TfmExample = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbClose: TBitBtn;
edInput: TEdit;
lbOutput: TLabel;
mmOutput: TMemo;
procedure lbOutputDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmExample: TfmExample;
implementation
{$R *.DFM}
procedure TfmExample.lbOutputDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := True;
lbOutput.Caption := (Source as TComponent).Name
end;
end.
Выбор несстандартных цветов
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
ColorDialog1: TColorDialog;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
{ Вызываем диалог ColorDialog1 и контролируем его результат:
если его метод Execute возвращает True, пользователь
выбрал нужный цвет: }
if ColorDialog1.Execute then
begin
// Закрашиваем левую панель выбранным цветом:
Panel1.Color := ColorDialog1.Color;
{ Помещаем в Edit1 и в заголовок левой панели шестнадцатеричное
представление цвета: }
Edit1.Text := IntToHex(ColorDialog1.Color,8);
Panel1.Caption := Edit1.Text
end
end;
function HexStrToInt(S: String): Integer;
{Функция преобразует шестнадцатеричное представление S целого числа в тип Integer}
function HDigital(C: Char): Byte;
//Преобразует шестнадцатеричную цифру С в число
begin
case C of
'0'..'9': Result := ord(C)-ord('0');
'A'..'F': Result := ord(C)-ord('A')+10;
else
{Если очередной символ не относится к допустимым для представления шестнадцатеричной цифры, возбуждаем исключительную ситуацию, которая блокирует преобразование и сообщает пользователю об ошибке:}
raise EConvertError.Create
('Недопустимое представление шестнадцатеричного числа');
end;
end; //HDigital
var
k: Integer;
begin //HexStrToInt
Result := 0;
//Удаляем возможный символ-указатель шестнадцатеричного числа:
if S[1]='$' then delete(S,1,1);
//Цикл преобразования строки:
for k := 1 to Length(S) do
Result := Result*16+HDigital(S[k]);
end; //HexStrToInt
procedure TForm1.Button2Click(Sender: TObject);
begin
Panel2.Color := HexStrToInt(Edit1.Text);
Panel2.Caption := Edit1.Text
end;
end.
Демонстрация свойств AlphaBlendValue и TransparentColor
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
Left: Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Left := True;
AlphaBlend := True;
AlphaBlendValue := 255;
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Left and (AlphaBlendValue>0) then
AlphaBlendValue := AlphaBlendValue-15;
if AlphaBlendValue=0 then
Left := False;
if not Left then
if AlphaBlendValue<255 then
AlphaBlendValue := AlphaBlendValue+15
else
begin
Timer1.Enabled := False;
AlphaBlend := False
end;
Caption := IntToStr(AlphaBlendValue);
Repaint
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if TransparentColor then
Button2.Caption := 'Включить TransparentColor'
else
Button2.Caption := 'Выключить TransparentColor';
TransparentColor := not TransparentColor
end;
end.
Проверка мультимедийного таймера
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
type
TfmExample = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbClose: TBitBtn;
edInput: TEdit;
lbOutput: TLabel;
mmOutput: TMemo;
procedure bbRunClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmExample: TfmExample;
implementation
{$R *.DFM}
// Объявление экспортируемых функций:
function timeSetEvent(uDelay, uReolution: UINT; lpTimeProc: Pointer;
dwUser: DWORD; fuEvent: UINT): Integer; stdcall; external 'winmm.dll';
function timeKillEvent(uID: UINT): Integer; stdcall; external 'winmm.dll';
// Обьявление глобальных переменных
var
uEventID: UINT; // Идентификатор события таймера
BegTime: TDateTime; // Засечка времени
Counter: Integer; // Счетчик повторений
Delay: Word; // Период срабатывания
procedure ProcTime(uID, msg: UINT; dwUse, dw1, dw2: DWORD); stdcall;
// Реакция на срабатывание таймера
var
h, m, s, ms: Word; // Переменные для декодирования времени
const
MaxCount = 500; // Количество повторений
begin
timeKillEvent(uEventID); // Останавливаем таймер
Counter := Counter+1; // Наращиваем счетчик
if Counter=MaxCount then // Конец цикла?
begin // - Да: декодируем время
DecodeTime((Time-BegTime)/MaxCount, h, m, s, ms);
fmExample.mmOutput.Lines.Add( // Сообщаем результат
Format('Задано %s ms. Получено %d ms',[fmExample.edInput.Text,ms]));
fmExample.edInput.Text := ''; // Готовим повторение
fmExample.edInput.SetFocus
end else // - Нет: вновь пускаем таймер
uEventID := timeSetEvent(Delay,0,@ProcTime,0,1);
end;
procedure TfmExample.bbRunClick(Sender: TObject);
// Запускает таймер. edInput содержит требуемый период.
begin
// Проверяем задание периода
if edInput.Text='' then Exit;
try
Delay := StrToInt(edInput.Text)
except
ShowMessage('Ошибка ввода числа');
edInput.SelectAll;
edInput.SetFocus;
Exit
end;
Counter := 0; // Сбрасываем счетчик
BegTime := Time; // Засекаем время
// Запускаем таймер:
uEventID := timeSetEvent(Delay,0,@ProcTime,0,1);
if uEventID=0 then
ShowMessage('Ошибка запуска таймера')
end;
procedure TfmExample.FormActivate(Sender: TObject);
begin
edInput.SetFocus
end;
end.
Проверка стандартного таймера
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
type
TfmExample = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbClose: TBitBtn;
edInput: TEdit;
lbOutput: TLabel;
mmOutput: TMemo;
Timer1: TTimer;
procedure bbRunClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
BegTime: TDateTime;
Counter: Integer;
public
{ Public declarations }
end;
var
fmExample: TfmExample;
implementation
{$R *.DFM}
procedure TfmExample.bbRunClick(Sender: TObject);
var
Delay: Word;
begin
// Проверяем задание интервала
if edInput.Text='' then Exit;
try
Delay := StrToInt(edInput.Text);
except
ShowMessage('Ошибка в записи числа');
edInput.SelectAll;
edInput.SetFocus;
Exit
end;
Counter := 0; // Сбрасываем счетчик
Timer1.Interval := Delay; // Устанавливаем интервал
BegTime := Time; // Засекаем время
Timer1.Enabled := True; // Пускаем таймер
Screen.Cursor := crHourGlass
end;
procedure TfmExample.Timer1Timer(Sender: TObject);
var
h, m, s, ms: Word;
begin
Counter := Counter + 1;
if Counter=55 then // 55 - кратно срабатыванию таймера
begin
Timer1.Enabled := False;
DecodeTime((Time-BegTime)/55, h, m, s, ms);
mmOutput.Lines.Add(
Format('Задано %s ms. Получено %d ms.', [edInput.Text, ms]));
edInput.Text := '';
edInput.SetFocus;
Screen.Cursor := crDefault
end;
end;
procedure TfmExample.FormActivate(Sender: TObject);
begin
edInput.SetFocus
end;
end.
Задания для самостоятельного выполнения
Объявить одномерный массив (количество элементов 10). Заполнить его числами от 15 до 6. Вывести содержимое массива на экран в компонент Label свойство Caption c пояснениями.
Объявить двумерный массив (10х10). Верхнюю половину заполнить 3, нижнюю половину заполнить 5. Результат вывести на экран в компонент Label свойство Caption c пояснениями.
Объявить двумерный массив (10х10). По диагонали левую половину заполнить 2, правую половину заполнить 3. Результат вывести на экран в компонент StringGrid свойство Cells.
Объявить одномерный массив (количество элементов 15). Заполнить его числами от 1 до 15. Вывести содержимое массива на экран в компонент StringGrid свойство Cells.
Объявить двумерный массив (10х10). Верхнюю половину заполнить 3, нижнюю половину заполнить 4. Результат вывести на экран в компонент StringGrid свойство Cells. Задать фиксированные строку и столбец для пояснений индексов массива.
Вычислить длину окружности, площадь круга и объём шара одного и того же заданного радиуса. Отобразить на экране в компонент Label свойство Caption c пояснениями.
- Методическое пособие для самостоятельных работ «Основы интегрированной среды программирования delphi6»
- 6.100301 "Судовождение",
- 6.100302 "Эксплуатация судовых энергетических установок"
- 6.092201 "Электрические системы и комплексы транспортных средств",
- Введение
- Глава 1. Интегрированная среда Delphi. Принципы работы
- 1.1. Интегрированная среда Delphi
- 1.2. Принципы визуального программирования
- Val(Edit1.Text,k1,sign);
- Val(Edit2.Text,k2,sign);
- Val(MaskEdit1.Text,r1,sig);
- Val(МaskEdit2.Text,r2,sig);
- 1.3. Событийно-управляемые программы
- 1.4. Составление программ обработки массивов
- I :integer;
- I, j :integer;
- 1.5. Вывод на печать
- Глава 2. Общие свойства компонентов
- 2.1. Иерархия компонентов
- 2.2. Имена и собственники компонентов
- 2.3. Родительские и дочерние компоненты
- 2.4. Положение, размеры и оформление компонентов
- 2.5.Указатели мыши
- 2.3. Окно редактора с готовым изображением указателя
- 2.6. Реакция на события от мыши и клавиатуры
- 2.6.1. События от мыши
- 2.6.2. События от клавиатуры
- 2.6.3. Клавиатура в ms-dos и Windows
- 2.6.4. Фокус ввода
- 2.7. Механизм действий Action
- 2.8. Иинтерфейс Drag&Drop
- 2.9. Иинтерфейс Drag&Dock
- 2.10. Поддержка справочной службы
- 2.11. Поддержка Сом
- 2.12. Свойства разного назначения
- Глава 3. Использование компонентов общего назначения
- 3.1. Компоненты страницы Standard
- 3.1.1. TFrame - рама и шаблоны компонентов
- 6) Окно регистрации рамы в палитре компонентов
- 3.1.2. Создание шаблонов без рам
- 3.1.3. TMainMenu - главное меню формы (программы)
- 3.1.4. TPopupMenu - вспомогательное (локальное) меню
- 3.1.5. TLabel - метка для отображения текста
- 3.1.6. TEdit - ввод и отображение строки
- 3.1.7. TMemo - ввод и отображение текста
- 3.1.8. TButton - кнопка
- 3.1.9. TCheckBox - независимый переключатель
- 3.11. Компонент tCheckBox - независимый переключатель
- 3.1.10. TRadioButton - зависимые переключатели
- 3.1.11. TListBox - список выбора
- 3.1.12. TComboBox – комбинированный или раскрывающийся список выбора
- 3.1.13. TScrollBar - управление значением величины
- 3.1.14. TGroupBox - панель группирования
- 3.1.15. TRadioGroup - группа зависимых переключателей
- 3.1.16. TPanel - панель
- 3.1.17. TActionList - механизм действий
- 3.2. Компоненты страницы Аdditional
- 3.2.1. TBitBtn - кнопка с изображением
- 3.2.2. TSpeedButton - кнопка для инструментальных панелей
- 3.2.3. TMaskEdit - специальный редактор
- 3.2.4. TStringGrid - таблица строк
- 3.2.5. TDrawGrid - произвольная таблица
- 3.2.6. TImage - отображение картинок
- 3.2.7. TShape - стандартная фигура
- 3.2.8. TBevel - кромка
- 3.2.9. TScrollBox - панель с прокруткой
- 3.2.10. TСheckListBox - группа независимых переключателей
- 3.2.11. TSplitter - компонент для изменения размеров
- 3.2.12. TStaticText - метка для отображения текста
- 3.2.13. TControlBar - инструментальная панель
- 3.2.14. TApplicationEvents - обработчик сообщений Windows
- 3.2.15. TValueListEditor - специализированный редактор строк
- 3.2.16. TLabelEdit - однострочный редактор с меткой
- 3.2.17. TColorBox - список выбора цвета
- 3.2.18. TChart - построитель графиков
- 3.2.19. TActionManager - менеджер действий
- 3.2.20. TActionMainMenuBar - полоса меню для действий
- 3.2.21. TActionTollBar - полоса кнопок для действий
- 3.2.22. TCustomizeDIg - диалог настройки интерфейса
- Глава 4. Многодокументный и однодокументный интерфейсы (mdi и sdi)
- 4.1. Mdi и sdi: сравнение
- 4.2. Разработка mdi—приложений
- 4.2.1. Разработка главного и информационного окон
- 4.2.2. Использование стандартных диалоговых окон
- If OpenDialog1.Execute then
- 4.2.3. Разработка диалогового окна
- Var dlg6:tokRightDlg;
- X1,x2,x3:String;
- If b1 or b2 then
- 4.2.4. Управление окнами
- I:integer;
- I:integer;
- 4.2.5. Работа с меню
- Var tf5:tForm2;
- 4.3. Разработка sdi–приложения
- 4.3.1. Простое sdi–приложение
- I,j :byte;
- I,j :byte;
- I,j :byte;
- 4.3.2. Управление окнами в sdi–приложениях
- I :byte;
- Var I :byte; ptr6 :tForm2;
- I :byte;
- Глава 5. Реализация алгоритмов решаемых задач на Delphi
- 5.1. Традиционный подход реализации алгоритмов на Delphi
- 5.2. Объектно-ориентированный подход
- Val(Edit1.Text,k,sig);
- Val(Edit2.Text,l,sig);
- I,j :byte;
- I,j :integer;
- Inherited Create (Ni,Nj);
- Val(Edit1.Text, p, sig1);
- Val(Edit2.Text, q, sig2);
- Val(Edit3.Text, r, sig3);
- Vas :real;
- Val(Edit4.Text,n,sig);
- Глава 6. Тестирование и отладка приложений
- 6.1. Виды ошибок
- 6.2. Отладочные средства Delphi
- 6.3. Составление тестов
- Глава 7. Исключительные ситуации
- 7.1. Обработка исключительных ситуаций
- I, j, k : integer;
- I:integer;
- I, j, k : integer;
- 7.2. Обработка определенных исключительных ситуаций
- Var I,j,k :shortint; p,q :real;
- Заключение
- Литература
- Методическое пособие для самостоятельных работ «Основы интегрированной среды программирования delphi6»
- 6.100301 "Судовождение",
- 6.100302 "Эксплуатация судовых энергетических установок"
- 6.092201 "Электрические системы и комплексы транспортных средств",