Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

InflateRect(RC, -1, -1);

end;

ifIsDown then begin

FCanvas.Pen.Color:= clBtnShadow;

FCanvas.Pen.Width:= 1;

FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);

InflateRect(RC, -1, -1);

ifF3DFrame then begin

FCanvas.Pen.Color:= FButtonColor;

FCanvas.Pen.Width:= 1;

DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);

end;

end elseDrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);

FCanvas.Brush.Color:= FButtonColor;

FCanvas.FillRect(RC);

InflateRect(RC, 1, 1);

ifIsFocused then begin

RC:= ClientRect;

InflateRect(RC, -1, -1);

end;

ifIsDown thenOffsetRect(RC, 1, 1);

FCanvas.Font:= Self.Font;

DrawButtonText(Caption, RC, State, 0);

ifIsFocused andIsDefault then begin

RC:= ClientRect;

InflateRect(RC, -4, -4);

FCanvas.Pen.Color:= clWindowFrame;

Windows.DrawFocusRect(FCanvas.Handle, RC);

end;

FCanvas.Handle:= 0;

end;

procedureTColorBtn.CalcuateTextPosition( constCaption: string; varTRC: TRect; BiDiFlags: Integer);

var

TB: TRect;

TS, TP: TPoint;

begin

withFCanvas do begin

TB:= Rect(0, 0, TRC.Right + TRC.Left, TRC.Top + TRC.Bottom);

DrawText(Handle, PChar(Caption), Length(Caption), TB, DT_CALCRECT orBiDiFlags);

TS := Point(TB.Right - TB.Left, TB.Bottom - TB.Top);

TP.X := ((TRC.Right - TRC.Left) - TS.X + 1) div2;

TP.Y := ((TRC.Bottom - TRC.Top) - TS.Y + 1) div2;

OffsetRect(TB, TP.X + TRC.Left, TP.Y + TRC.Top);

TRC:= TB;

end;

end;

procedureTColorBtn.DrawButtonText( constCaption: string; TRC: TRect; State: TButtonState; BiDiFlags: Integer);

begin

withFCanvas do begin

CalcuateTextPosition(Caption, TRC, BiDiFlags);

Brush.Style:= bsClear;

ifState = bsDisabled then begin

OffsetRect(TRC, 1, 1);

Font.Color:= clBtnHighlight;

DrawText(Handle, PChar(Caption), Length(Caption), TRC, DT_CENTER orDT_VCENTER orBiDiFlags);

OffsetRect(TRC, -1, -1);

Font.Color:= clBtnShadow;

DrawText(Handle, PChar(Caption), Length(Caption), TRC, DT_CENTER orDT_VCENTER orBiDiFlags);

end elseDrawText(Handle, PChar(Caption), Length(Caption), TRC, DT_CENTER orDT_VCENTER orBiDiFlags);

end;

end;

procedure Register;

begin

RegisterComponents('Controls', [TColorBtn]);

end;

end.

Небольшое дополнение. Кнопку по прежнему рисует WINDOWS, а раскрашивает ее ColorBtn. Код компонента на 90% повторяет код BitBtn, ничего необычного здесь нет. Хочется повторить слова Калверта — «Пользуйтесь исходным кодом». Чаще заглядывайте в VCL – можно найти много интересного.

Обработка щелчка нескольких кнопок, используя их заголовок

Delphi 1

…с ваших слов я понял, что вы все уже реализовали, но давайте все повторим: вы должны убедиться в том, что событие OnClick привязано к каждой кнопке калькулятора (числовые кнопки 0..9) и указывают на общий обработчик события.

В разделяемом обработчике события получите заголовок обрабатываемой кнопки следующим образом:

Edit1.Text := TButton(Sender).Caption;

…я думаю в этом случае самым разумным будет использование свойства Tag каждой кнопки:

1. назначьте уникальный Tag для каждой кнопки (например, эквивалент арабским цифрам)

2. procedureTForm1.Button1Click(Sender: TObject);

begin

if(Sender isTButton) then with(Sender asTButton) do

{используем Tag}

end;

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

procedureTForm1.Edit1Click(Sender: TObject);

begin

edit1.text := (sender asTButton).caption;

end;

Приведенная ниже конструкция будет недостаточной:

sender.caption

поскольку компилятор не знает о том, имеет ли «sender» свойство caption, или нет.

CheckBox

Массив из CheckBox – использование разделяемого обработчика события I

Delphi 1

Поместите несколько Checkbox в компонент TGroupBox. Во время прогона (или проектирования) назначьте общий обработчик события Click для всех checkbox'в. Чтобы в цикле обойти все «дочерние» TCheckBox'ы, можно воспользоваться свойством-массивом Controls TGroupBox (и заодно привести их к типу TCheckBox). Приблизительно так:

fori := 0 toGroupBox1.ControlCount -1 do

if (GroupBox1.Controls[i] asTCheckBox).checked then

{что-то там еще};

Вы можете получить имя sender следующим образом:

procedureTMain1.CheckBoxClick(Sender: TObject);

varwhodidit: string[63];

begin

whodidit := TComponent(sender).name;

end;

После приведения типа можно добраться и до других свойств. К примеру, очень полезным может оказаться свойство Tag. Во время создания, вы можете присвоить каждому checkbox.tag свой ID номер. А в обработчике события, читая ID, можно идентифицировать sender.

Массив из CheckBox – использование разделяемого обработчика события II

Delphi 1

var

CheckArray: array[1..x] ofTCheckBox;

i:integer;

begin

fori:=1 tox do begin

CheckArray[i]:=TCheckBox.Create(Form1);

{Устанавливаем свойства}

withCheckBox[i] do begin

Left:=i*20;

Width:=15;

другое…

end;

end;

Очевидно, можно сказать:

Check[i].OnClick:=xyz.

Пока я и сам не знаю как поступить. Динамическое создание компонентов да, но обработчики событий?

Существует способ организации массива checkbox'ов с разделяемым обработчиком события. Расположите их на форме и дайте им «непрерывные» имена (Check1, Check2 и т.д.). Затем установите у них общий обработчик события. Обработчик события может выглядеть так:

procedureTForm.Check1Click(Sender : TObject);

vari : Integer;

begin

fori := 1 to10 { предположим, что мы имеем 10 checkbox'ов } do

WithTCheckBox(FindComponent('Check'+IntToStr(i))) do begin

{ другой какой-то код }

end;

end;

Идентификация CheckBox'ов

Delphi 3

В режиме проектирования вы, как программист, без труда узнаете, сколько checkbox'ов содержит ваша форма. А вот когда приложение запущено… Используйте Delphi Run Time Type Information (RTTI). Для нашей испытуемой формы вы можете попробовать следующий код:

vari : Integer

begin

fori := 0 toComponentCount - 1 do

ifComponents[i] isTCheckBox then

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x