Можно ли отключить определенный элемент в radiogroup


RadioGroup, RadioButton и GroupBox — группы радиокнопок

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

Компонент RadioGroup

Компонент RadioGroup — панель группы радиокнопок. Панель может содержать регулярно распоюженные столбцами и строками радиокнопки.

Компонент RadioGroup очень удобен, но не свободен от некоторых недостатков. Его хорошо использовать, если надписи кнопок имеют примерно одинаковую длину и если число кнопок в каждом столбце (при размещении их в нескольких столбцах) одинаково

Компоненты RadioButton иCheckBox

Иногда желательно нерегулярное расположение кнопок. Такую возможность дают компоненты RadioButton, сгруппированные панелью GroupBox.

В качестве индикаторов обычно используются другие компоненты — CheckBox. А радиокнопки имеют смысл, когда они взаимодействуют друг с другом в группе. Эта группа и объединяется единым контейнером, обычно панелью GroupBox.

Свойства компонента CheckBox

Свойство Описание
Name Имя компонента. Используется для доступа к свойствам компонента
Caption Текст, который находится справа от флажка
Checked Состояние, внешний вид флажка. Если флажок установлен (в квадратике есть «галочка»), то значение свойства checked равно true; если флажок сброшен (нет «галочки»), то значение Checked равно false
State Состояние флажка. В отличие от свойства Checked, позволяет различать установленное, сброшенное и промежуточное состояния. Состояние флажка определяет одна из констант: cbchecked (установлен); cbGrayed (серый, неопределенное состояние); cbUnChecked (сброшен)
AllowGrayed Свойство определяет, может ли флажок быть в промежуточном состоянии: если значение AllowGrayed равно false, то флажок может быть только установленным или сброшенным; если значение AllowGrayed равно true, то допустимо промежуточное состояние

Свойства компонента RadioButton

Свойство Описание
Name Имя компонента. Используется для доступа к свойствам компонента
Caption Текст, который находится справа от кнопки
Checked Состояние, внешний вид кнопки. Если кнопка выбрана, то значение свойства checked равно true, если кнопка не выбрана, то false

if ( CheckBox1->Checked == true) // есть галочка

ShowMessage(«CheckBox1 is checked»);

ShowMessage(«CheckBox1 is not checked»);

Button и BitBtn — управляющие кнопки

Компонент Button — обычная кнопка без рисунка, наиболее распространена в приложениях. BitBtn — кнопка с рисунком.

Свойства компонента BitBtn

Свойство Значение
Caption Определяет название кнопки.
Glyph С помощью него можно подгрузить рисунок кнопки в форматеbmp. Очень много картинок для кнопок находятся в %\Program Files\Common Files\Borland Shared\Images\Buttons
Kind Набор заготовок кнопок типа «Ок» или «Нет» и т.д. Иностранный текст можно заменить на русский через Caption.
Layout Расположение изображения и названия кнопки относительно друг друга, blGlyphLeft — изображение слева, blGlyphBottom — снизу, blGlyphRight — справа, blGlyphTop — сверху.
Style Стиль кнопок, bsAutoDetect, bsNew, bsWin31 — авто определение, новый вид, в стиле Windows 3.1соответственно.

Задание 1

Установите на форме две кнопки BitBtn, три CheckBox, один Memo (см. рис. 1). По нажатию на кнопку OK должны меняться настройки шрифта в поле Memo в соответствии с установленными флажками CheckBox. По нажатию на кнопку Close форма должна закрываться.

Установка полужирного начертания в компоненте Memo выполняется следующим оператором: memo1->Font->Style=memo1->Font->Style+[fsBold];

Отключение полужирного начертания:

Рис. 1 Вид приложения


Компонент SpeedButton представляет собой кнопку, на поверхности которой находится картинка.

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

JackyFox

стример, который не стримит

Доступ к элементам TRadioGroup

Если вы когда-нибудь пользовались компонентом TRadioGroup, то, пожалуй, знаете, насколько он удобен при динамическом формировании списка переключателей. Всего-то и нужно, что добавлять и удалять строки списка типа TStringList

Ну и конечно же, вы знаете, что определить выбранную точку можно по значению свойства ItemIndex . Нумерация начинается с нуля, как заведено.

А вот вопрос: как получить доступ к свойствам отдельных элементов, сперва вызывает проблемы. На самом деле всё просто, нужно использовать массив Controls . Вот доступ к выделенному элементу:

Можно ли отключить определенный элемент в radiogroup?

Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Форум программистов > Технологии > Помощь студентам
Подскажите с RadioGroup
Регистрация
Поиск по форуму
Расширенный поиск
К странице.
Страница 1 из 2 1 2 Следующая >

Всем доброго дня!

Подскажите пожалуйста, с таким вопросом. Мне на одной форме нужно создать две независимые RadioGroup’s, в каждой по две Radio кнопки (чтобы в одной группе я мог выбрать одну кнопку и в другой одну), если просто создавать выбирается только одна.

И еще маленький вопрос: в этой же форме, есть три поля Edit, подскажите как можно сделать, чтобы при вводе в первое поле (число), если нажата первая RadioButton1, во втором поле отображалось число первого поля + 5, если нажата вторая RadioButton2, во втором поле отображалось число первого поля + 10. При нажатии Enter в поле Edit1 (после ввода числа) курсор будет переходить к Edit3.

20.03.2009, 14:35 #1
20.03.2009, 14:50 #2

по первой части: можно ли создать две RadioGroup на одной форме? Насчет динамически или нет — не знаю, я только учусь.


А по второй части можно подробнее?

Выложил исходник, если кто может подправьте, пожалуйста

Вложения

20.03.2009, 14:56 #3
0.rar (175.9 Кб, 11 просмотров)

Да конечно можно. У тебя сверху есть же панель инсрументов. Берёшь ставишь одну, а потом снова выбираешь радиогруппу и ставишь вторую.

По второй части я ошибся надо прописать метод OnKeyUp:

20.03.2009, 15:07 #4

Берёшь ставишь одну, а потом снова выбираешь радиогруппу и ставишь вторую.

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

20.03.2009, 15:11 #5
20.03.2009, 15:16 #6

я выложил прогу посмотри мою, мыло: crush_17@mail.ru, но в принципе можно прямо здесь на форуме выкладывать файлы

по твоему коду все работает, только если пользователь при ошибочном вводе в Edit1 захочет стереть число, вылетает ошибка

Можно ли отключить определенный элемент в radiogroup?

Радиокнопки образуют группы взаимосвязанных индикаторов, из которых обычно может быть выбран только один. Они используются для выбора пользователем одной из нескольких взаимоисключающих альтернатив, например, отдела, в котором работает сотрудник, или пола сотрудника. Впрочем, радиокнопки могут использоваться и для отображения аналогичных данных. В этом случае управление кнопками осуществляется программно. Несколько примеров организации размещения радиокнопок вы можете увидеть на рис. 5.1 в разделе 5.1.

Начнем рассмотрение радиокнопок с компонента RadioGroup — панели группы радиокнопок. Это панель, которая может содержать регулярно расположенные столбцами и строками радиокнопки. Надпись в левом верхнем углу панели (см. рис. 5.1) определяется свойством Caption. А надписи кнопок и их количество определяются свойством Items, имеющим тип TStrings. Щелкнув на кнопке с многоточием около этого свойства в окне Инспектора Объектов, вы попадете в редактор списков строк, который уже рассматривался нами в разделе 3.3.4 (рис. 3.9). В нем вы можете занести надписи, которые хотите видеть около кнопок, по одной в строке. Сколько строчек вы запишете — столько и будет кнопок. Например, для компонента RadioGroup в верхней правой части формы рис. 5.1 свойство Items имеет вид:

Кнопки, появившиеся в панели после задания значений Items, можно разместить в несколько столбцов (не более 17), задав свойство Columns. По умолчанию Columns = 1, т.е. кнопки размещаются друг под другом.

Определить, какую из кнопок выбрал пользователь, можно по свойству ItemIndex, которое показывает индекс выбранной кнопки. Индексы, как всегда в Delphi, начинаются с 0. По умолчанию ItemIndex = -1, что означает отсутствие выбранной кнопки. Если вы хотите, чтобы в момент начала выполнения приложения какая-то из кнопок была выбрана (это практически всегда необходимо), то надо установить соответствующее значение ItemIndex во время проектирования. Если вы используете радиокнопки не для ввода, а для отображения данных, устанавливать значение ItemIndex можно программно во время выполнения приложения.

Компонент RadioGroup очень удобен, но не свободен от некоторых недостатков. Его хорошо использовать, если надписи кнопок имеют примерно одинаковую длину и если число кнопок в каждом столбце (при размещении их в нескольких столбцах) одинаково. Посмотрите, например, рис. 5.1 из раздела 5.1. Группа радиокнопок в нижнем левом углу формы имеет нормальный вид. А группа аналогичных радиокнопок в верхней правой части формы выглядит плохо: она занимает слишком много места, которое пропадает в пустую. Связано это с тем, что длина надписей у кнопок первого столбца превышает длину надписей у остальных кнопок. A RadioGroup при размещении кнопок ориентируется на надпись максимальной длины. Еще хуже выглядела бы эта группа, если бы число кнопок было, например, равно 5.

В подобных случаях желательно нерегулярное расположение кнопок. Такую возможность дают компоненты RadioButton, сгруппированные панелью GroupBox. Панель GroupBox выглядит на форме так же, как RadioGroup (см. рис. 5.1), и надпись в ее верхнем левом углу также определяется свойством Caption. Эта панель сама по себе пустая. Ее назначение — служить контейнером для других управляющих элементов, в частности, для радиокнопок RadioButton. Отдельная радиокнопка RadioButton особого смысла не имеет, хотя и может служить индикатором, включаемым и выключаемым пользователем. Но в качестве индикаторов обычно используются другие компоненты — CheckBox. А радиокнопки имеют смысл, когда они взаимодействуют друг с другом в группе. Эта группа и объединяется единым контейнером, обычно панелью GroupBox.

Рассмотрим свойства радиокнопки RadioButton. Свойство Caption содержит надпись, появляющуюся около кнопки. Значение свойства Alignment определяет, с какой стороны от кнопки появится надпись: taLeftJustify — слева, taRightJustify — справа (это значение принято по умолчанию). Свойство Checked определяет, выбрана ли данная кнопка пользователем, или нет. Поскольку в начале выполнения приложения обычно надо, чтобы одна из кнопок группы была выбрана по умолчанию, ее свойство Checked надо установить в true в процессе проектирования. Если вы поэкспериментируете, то заметите, что и во время проектирования можно установить в true значение Checked только у одной кнопки из группы.

Размещение кнопок RadioButton в панели GroupBox, как можно видеть из рис. 5.1 раздела 5.1, дает большую свободу по сравнению с компонентом RadioGroup и позволяет разместить кнопки не регулярно.

Радиокнопки RadioButton могут размещаться не только в панели GroupBox, но и в любой панели другого типа, а также непосредственно на форме. Группа взаимосвязанных кнопок в этих случаях определяется тем оконным компонентом, который содержит кнопки. В частности, для радиокнопок, размещенных непосредственно на форме, контейнером является сама форма. Таким образом, все кнопки, размещенных непосредственно на форме, работают как единая группа, т.е. только в одной из этих кнопок можно установить значение Checked в true.

500+ FAQ по Delphi


20.03.2009, 15:19 #7
Перейти на: Главную | Индексную | Предыдущую | Следующую страницу

надувные кровати
Можно ли изменить число колонок и их ширину в компоненте TFileListBox?

В приведенном примере FileListBox приводится к типу TDirectoryListBox — таким образом можно добавиь дополнительные колонки.
Пример:
with TDirectoryListBox(FileListBox1) do
begin
Columns := 2;
SendMessage(Handle, LB_SETCOLUMNWIDTH, Canvas.TextWidth(‘WWWWWWWW.WWW’),0);
end;
Как настроить табуляцию в компоненте TMemo?

Пошлите в Memo сообщение EM_SETTABSTOPS. Например установим первую позицию табуляции на 20-й пиксел.
Пример:
procedure TForm1.FormCreate(Sender: TObject);
var
DialogUnitsX : LongInt;
PixelsX : LongInt;
i : integer;
TabArray : array[0..4] of integer;
begin
Memo1.WantTabs := true;
DialogUnitsX := LoWord(GetDialogBaseUnits);
PixelsX := 20;
for i := 1 to 5 do
begin
TabArray[i — 1] :=((PixelsX * i ) * 4) div DialogUnitsX;
end;
SendMessage(Memo1.Handle,
EM_SETTABSTOPS,5,LongInt(@TabArray));
Memo1.Refresh;
end;
Как перехватить нажатия функциональных клавиш и стрелок?

Проверяйте значение переменной key на равенство VK_RIGHT, VK_LEFT, VK_F1 и т.д. на событии KeyDown формы.
Пример:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RIGHT then
Form1.Caption := ‘Right’;
if Key = VK_F1 then
Form1.Caption := ‘F1’;
end;
При обработке события DrawCell компонента DrawGr >
Правильно укажите границы используемого канваса.
Пример:
If (Row = 0) then
begin
DrawGr > DrawGrid1.Canvas.TextOut(Rect.Left,Rect.Top, IntToStr(Col));
end;
При использовании BitBtn Caption(текст) и картинка(bitmap) из файла не видны одновременно. Почему?

Это может происходить если картинка слишком велика. Класс TBitBtn сначала рисует картинку, а затем выводит текст над, под, слева или справа от картинки (в завивимости от свойства Layout). Если размер картинки такой же как у всей кнопки для вывода текста просто не остается места. Если Вам нужно получить кнопку такого же размера как Ваша картинка и видеть при этом надпись на кнопке Вам придется выводить текст надписи непосредственно на канву картинки.
Пример:
var
bm : TBitmap;
OldBkMode : integer;
begin
bm := TBitmap.Create;
bm.W > bm.Height := BitBtn1.Glyph.Height;
bm.Canvas.Draw(0, 0, BitBtn1.Glyph);
OldBkMode := SetBkMode(bm.Canvas.Handle, Transparent);
bm.Canvas.TextOut(0, 0, ‘The Caption’);
SetBkMode(bm.Canvas.Handle, OldBkMode);
BitBtn1.Glyph.Assign(bm);
end;
Можно ли изменить вид текстового курсора (каретки) edit’а или другого элемента управления Windows?

Можно! В примере показано как создать два цветных «bitmap’а»: «улыбчивый» и «хмурый» и присвоить их курсору edit’а. Для этого нужно перехватить оконную процедуру edit’а. Чтобы сделать это заменим адрес оконной процедуры Edit’а нашим собственным, а старую оконную процедуру будем вызывать по необходимости. Пример показывает «улыбчивый» курсор при наборе текста и «хмурый» при забое клавишей backspace.
Пример:

<$IFDEF WIN32>
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
<$ELSE>
uses
WinTypes, WinProcs, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private

public

CaretBm : TBitmap;
CaretBmBk : TBitmap;
OldEditsWindowProc : Pointer;
end;

var
Form1: TForm1;

type
<$IFDEF WIN32>
WParameter = LongInt;
<$ELSE>
WParameter = Word;
<$ENDIF>
LParameter = LongInt;


function NewWindowProc(WindowHandle : hWnd; TheMessage : WParameter; ParamW : WParameter;
ParamL : LParameter) : LongInt
<$IFDEF WIN32>stdcall; <$ELSE>; export; <$ENDIF>
begin

NewWindowProc := CallWindowProc(Form1.OldEditsWindowProc, WindowHandle,
TheMessage, ParamW, ParamL);
if TheMessage = WM_SETFOCUS then
begin
CreateCaret(WindowHandle, Form1.CaretBm.Handle, 0, 0);
ShowCaret(WindowHandle);
end;
if TheMessage = WM_KILLFOCUS then
begin
HideCaret(WindowHandle);
DestroyCaret;
end;
if TheMessage = WM_KEYDOWN then
begin
if ParamW = VK_BACK then
CreateCaret(WindowHandle, Form1.CaretBmBk.Handle, 0, 0)
else
CreateCaret(WindowHandle, Form1.CaretBm.Handle, 0, 0);
ShowCaret(WindowHandle);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

CaretBm := TBitmap.Create;
CaretBm.Canvas.Font.Name := ‘WingDings’;
CaretBm.Canvas.Font.Height := Edit1.Font.Height;
CaretBm.Canvas.Font.Color := clWhite;
CaretBm.W ) + 2;
CaretBm.Height := CaretBm.Canvas.TextHeight(‘J’) + 2;
CaretBm.Canvas.Brush.Color := clBlue;
CaretBm.Canvas.FillRect(Rect(0, 0, CaretBm.Width, CaretBm.Height));
CaretBm.Canvas.TextOut(1, 1, ‘J’);

CaretBmBk := TBitmap.Create;
CaretBmBk.Canvas.Font.Name := ‘WingDings’;
CaretBmBk.Canvas.Font.Height := Edit1.Font.Height;
CaretBmBk.Canvas.Font.Color := clWhite;
CaretBmBk.W ) + 2;
CaretBmBk.Height := CaretBmBk.Canvas.TextHeight(‘L’) + 2;
CaretBmBk.Canvas.Brush.Color := clBlue;
CaretBmBk.Canvas.FillRect(Rect(0,0, CaretBmBk.Width, CaretBmBk.Height));
CaretBmBk.Canvas.TextOut(1, 1, ‘L’);

OldEditsWindowProc := Pointer(SetWindowLong(Edit1.Handle,GWL_WNDPROC,
LongInt(@NewWindowProc)));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin

SetWindowLong(Edit1.Handle,GWL_WNDPROC, LongInt(OldEditsWindowProc));
CaretBm.Free;
CaretBmBk.Free;
end;
Почему при изменении цвета букв StatusBar’а ничего не происходит?

Status bar — стандартный элемент управления Windows, и соответственно цвет его букв — значение
clBtnText которое изменяется с помощью настроек в Control Panel. Этот цвет черный по умолчанию и
может изменяться в зависимости от выбранной цветовой схемы. Другие стандартные элемент управления Windows,
например кнопки, также имеют цвет букв, настраиваемый из ControlPanel. StatusBar и его панели имеют
свойство «owner-draw», позволяющее Вам использовать любой цвет букв.
Пример:

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
if Panel = StatusBar.Panels[0] then
begin
StatusBar.Canvas.Font.Color := clRed;
StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, ‘Panel — 0’)
end
else
begin
StatusBar.Canvas.Font.Color := clGreen;
StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, ‘Panel — 1’);
end;
end;
Как сделать многострочную надпись на TBitBtn?

Выводите текст надписи непосредственно на «glyph» TBitBtn’а. См. пример.
Пример:
procedure TForm1.FormCreate(Sender: TObject);
var
R : TRect;
N : Integer;
Buff : array[0..255] of Char;
begin
with BitBtn1 do
begin
Caption := ‘A really really long caption’;
Glyph.Canvas.Font := Self.Font;
Glyph.W > Glyph.Height := Height — 6;
R := Bounds(0, 0, Glyph.Width, 0);
StrPCopy(Buff, Caption);
Caption := »;
DrawText(Glyph.Canvas.Handle,Buff,StrLen(Buff),R,
DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
OffsetRect(R,(Glyph.Width — R.Right) div 2,
(Glyph.Height — R.Bottom) div 2);
DrawText(Glyph.Canvas.Handle,Buff,StrLen(Buff),R,
DT_CENTER or DT_WORDBREAK);
end;
end;
Как изменить стиль шрифта RichEdit нажатиями соответствующих комбинаций клавиш? (например включить курсив по нажатию Ctrl + I)

В примере стили шрифта меняются по нажатию след. комбинаций клавиш
Ctrl + B — вкл/выкл жирного шрифта
Ctrl + I — вкл/выкл наклонного шрифта
Ctrl + S — вкл/выкл зачеркнутого шрифта
Ctrl + U — вкл/выкл подчеркнутого шрифта
Пример:
const
KEY_CTRL_B = 02;
KEY_CTRL_I = 9;
KEY_CTRL_S = 19;
KEY_CTRL_U = 21;

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
case Ord(Key) of
KEY_CTRL_B:
begin
Key := #0;
if fsBold in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style — [fsBold]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style + [fsBold];
end;
KEY_CTRL_I:
begin
Key := #0;
if fsItalic in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style — [fsItalic]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style + [fsItalic];
end;
KEY_CTRL_S:
begin
Key := #0;
if fsStrikeout in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style-[fsStrikeout]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style+[fsStrikeout];
end;
KEY_CTRL_U:
begin
Key := #0;
if fsUnderline in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style-[fsUnderline]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style+[fsUnderline];
end;
end;
end;
В документации компонента TRegIniFile говорится, что можно изменять корневой ключ (root key). Я пытаюсь это сделать но ничего не получается.

См. пример.
Пример:
uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
WinIni : TRegIniFile;
begin
WinIni := TRegIniFile.Create(»);
WinIni.RootKey := HKEY_LOCAL_MACHINE;
WinIni.WriteString(‘Frank’,’Borland’,’Writes Fast Code!’);
WinIni.Free;
end;
Можно ли динамически изменять свойство «owner» компонента во время выполнения программы?

Вы можете менять свойство «owner» и после создания компонента с помощью методов InsertComponent() и RemoveComponent(). @G
Как очистить содержимое Canvas’а?
Просто нарисуйте прямоугольник любого цвета.
Пример:
Canvas.Brush.Color := ClWhite;
Canvas.FillRect(Canvas.ClipRect);
Можно ли динамически менять какая форма считается главной в приложении во время работы программы? Можно, но только во время загрузки приложения. Чтобы сделать это выберите «View->Project Source» и измените код инициализации приложения, так что порядок создания форм зависил от какого-то условия.

Примечание: Вам придется редактировать этот код, если Вы добавите в приложение новые формы.

begin
Application.Initialize;
if then
begin
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
end
else
begin
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
end;
end.
Application.Run;
Как программно «щелкнуть» по компоненту speed button? Я пытался использовать SendMessage но у Speedbuttons нет «handle».


В примере используется метод Perform класса TControl для отправки сообщения.
Пример:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
ShowMessage(‘clicked’);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SpeedButton1.Perform(WM_LBUTTONDOWN, 0, 0);
SpeedButton1.Perform(WM_LBUTTONUP, 0, 0);
end;
Можно ли отключить определенный элемент в RadioGroup?

В примере показано как получить доступ к отдельным элементам компонента TRadioGroup.
Пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
TRadioButton(RadioGroup1.Controls[1]). Enabled := False;
end;
Почему методы рисования Delphi (например MoveTo и LineTo) рисуют на один пиксел короче?

Так работает большинство графических систем, включая Windows. Библиотека VCL просто передает вызовы в функции GDI. Если Вы хотите нарисовать линию с последним пикселом включительно просто добавте единицу к координатам.
Как показать подсказки «hints» для элементов меню?

В примере создается обработчик события Application.Hint — подсказки меню изображаются
на status panel.

type
TForm1 = class(TForm)
Panel1: TPanel;
MainMenu1: TMainMenu;
MenuItemFile: TMenuItem;
MenuItemOpen: TMenuItem;
MenuItemClose: TMenuItem;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure MenuItemCloseClick(Sender: TObject);
procedure MenuItemOpenClick(Sender: TObject);
private

procedure HintHandler(Sender: TObject);
public

end;

var
Form1: TForm1;

procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.Align := alBottom;
MenuItemFile.Hint := ‘File Menu’;
MenuItemOpen.Hint := ‘Opens A File’;
MenuItemClose.Hint := ‘Closes the Application’;
Application.OnHint := HintHandler;
end;

procedure TForm1.HintHandler(Sender: TObject);
begin
Panel1.Caption := Application.Hint;
end;

procedure TForm1.MenuItemCloseClick(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.MenuItemOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
Form1.Caption := OpenDialog1.FileName;
end;

Группы радиокнопок — компоненты RadioGroup, RadioButton и GroupBox

Радиокнопки образуют группы взаимосвязанных индикаторов, из которых обычно может быть выбран только один. Они используются для выбора пользователем одной из нескольких взаимоисключающих альтернатив, например, отдела, в котором работает сотрудник, или пола сотрудника. Впрочем, радиокнопки могут использоваться и для отображения аналогичных данных. В этом случае управление кнопками осуществляется программно. Несколько примеров организации размещения радиокнопок вы можете увидеть на рис. 7. в разделе выше.

Начнем рассмотрение радиокнопок с компонента RadioGroup — панели группы радиокнопок. Это панель, которая может содержать регулярно расположенные столбцами и строками радиокнопки. Надпись в левом верхнем углу панели (см. рис. 7). определяется свойством Caption. А надписи кнопок и их количество определяются свойством Items, имеющим тип TStrings. Щелкнув на кнопке с многоточием около этого свойства в окне Инспектора Объектов, вы попадете в редактор списков строк, который уже рассматривался нами в разделе выше (рис. 13). В нем вы можете занести надписи, которые хотите видеть около кнопок, по одной в строке. Сколько строчек вы запишете — столько и будет кнопок. Например, для компонента RadioGroup в верхней правой части формы рис. 7. свойство Items имеет вид:

бухгалтерияадминистрацияцех 1цех 2цех 3цех 4

Кнопки, появившиеся в панели после задания значений Items, можно разместить в несколько столбцов (не более 17), задав свойство Columns. По умолчанию Columns = 1, т.е. кнопки размещаются друг под другом.

Определить, какую из кнопок выбрал пользователь, можно по свойству ItemIndex, которое показывает индекс выбранной кнопки. Индексы, как всегда в Delphi, начинаются с 0. По умолчанию ItemIndex = -1, что означает отсутствие выбранной кнопки. Если вы хотите, чтобы в момент начала выполнения приложения какая-то из кнопок была выбрана (это практически всегда необходимо), то надо установить соответствующее значение ItemIndex во время проектирования. Если вы используете радиокнопки не для ввода, а для отображения данных, устанавливать значение ItemIndex можно программно во время выполнения приложения.

Компонент RadioGroup очень удобен, но не свободен от некоторых недостатков. Его хорошо использовать, если надписи кнопок имеют примерно одинаковую длину и если число кнопок в каждом столбце (при размещении их в нескольких столбцах) одинаково. Посмотрите, например, рис. 7. из раздела выше. Группа радиокнопок в нижнем левом углу формы имеет нормальный вид. А группа аналогичных радиокнопок в верхней правой части формы выглядит плохо: она занимает слишком много места, которое пропадает в пустую. Связано это с тем, что длина надписей у кнопок первого столбца превышает длину надписей у остальных кнопок. A RadioGroup при размещении кнопок ориентируется на надпись максимальной длины. Еще хуже выглядела бы эта группа, если бы число кнопок было, например, равно 5.

В подобных случаях желательно нерегулярное расположение кнопок. Такую возможность дают компоненты RadioButton, сгруппированные панелью GroupBox. Панель GroupBox выглядит на форме так же, как RadioGroup (см. рис. 7), и надпись в ее верхнем левом углу также определяется свойством Caption. Эта панель сама по себе пустая. Ее назначение — служить контейнером для других управляющих элементов, в частности, для радиокнопок RadioButton. Отдельная радиокнопка RadioButton особого смысла не имеет, хотя и может служить индикатором, включаемым и выключаемым пользователем. Но в качестве индикаторов обычно используются другие компоненты — CheckBox. А радиокнопки имеют смысл, когда они взаимодействуют друг с другом в группе. Эта группа и объединяется единым контейнером, обычно панелью GroupBox.

Рассмотрим свойства радиокнопки RadioButton. Свойство Caption содержит надпись, появляющуюся около кнопки. Значение свойства Alignment определяет, с какой стороны от кнопки появится надпись: taLeftJustify — слева, taRightJustify — справа (это значение принято по умолчанию). Свойство Checked определяет, выбрана ли данная кнопка пользователем, или нет. Поскольку в начале выполнения приложения обычно надо, чтобы одна из кнопок группы была выбрана по умолчанию, ее свойство Checked надо установить в true в процессе проектирования. Если вы поэкспериментируете, то заметите, что и во время проектирования можно установить в true значение Checked только у одной кнопки из группы.

Размещение кнопок RadioButton в панели GroupBox, как можно видеть из рис. 7. раздела выше, дает большую свободу по сравнению с компонентом RadioGroup и позволяет разместить кнопки не регулярно.

Радиокнопки RadioButton могут размещаться не только в панели GroupBox, но и в любой панели другого типа, а также непосредственно на форме. Группа взаимосвязанных кнопок в этих случаях определяется тем оконным компонентом, который содержит кнопки. В частности, для радиокнопок, размещенных непосредственно на форме, контейнером является сама форма. Таким образом, все кнопки, размещенных непосредственно на форме, работают как единая группа, т.е. только в одной из этих кнопок можно установить значение Checked в true.

Контрольні питання

1. Навести характеристику поняття візуальні компоненти


2. Надати храктеристику кнопкам, індикаторам та керуючим елементам

САМОСТІЙНА РОБОТА СТУДЕНТА

ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ. ВІЗУАЛЬНІ КОМПОНЕНТИ. БАЗИ ДАНИХ

ТЕМА 6.2: ВІЗУАЛЬНІ КОМПОНЕНТИ

Самостійне заняття №32 – Списки

План заняття

1. Характеристика поняття списки

2. Характеристика упорядкованого списку

3. Огляд методики додавання елемента у список

4. Методика видалення елемента зі списку

5. Поняття динамічного та статичного списків

Списки

Указатели и динамические переменные позволяют создавать сложные динамические структуры данных, такие как списки и деревья.

Список можно изобразить графически (рис. 80).

Рис. 80.Графическое изображение списка

Каждый элемент списка (узел) представляет собой запись, состоящую из двух частей. Первая часть — информационная. Вторая часть отвечает за связь со следующим и, возможно, с предыдущим элементом списка. Список, в котором обеспечивается связь только со следующим элементом, называется односвязным.

Для того чтобы программа могла использовать список, надо определить тип компонентов списка и переменную-указатель на первый элемент списка. Ниже приведен пример объявления компонента списка студентов:

Type

TPStudent = ^TStudent; // указатель на переменную типа TStudent

// описание типа элемента списка

TStudent = record

surname: string[20]; // фамилия

name: string[20];’ // имя


group: integer; // номер группы

address: string[60]; // домашний адрес

next: TPStudent; // указатель на следующий элемент списка

End;

Var

head: TPStudent; // указатель на первый элемент списка

Добавлять данные можно в начало, в конец или в нужное место списка. Во всех этих случаях необходимо корректировать указатели. На рис. 81. изображен процесс добавления элементов в начало списка.

После добавления второго элемента в список head указывает на этот элемент

Рис. 81.Добавление элементов в список

Следующая программа (ее текст приведен в листинге 28.) формирует список студентов, добавляя фамилии в начало списка. Данные вводятся в поля редактирования диалогового окна программы (рис. 82) и добавляются в список нажатием кнопки Добавить(suttoni).

Рис. 82.Окно программы Динамический список 1

Дата добавления: 2014-12-01 ; просмотров: 1304 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Как отключить один RadioButton из трех в RadioGroup На моей форме

December 2020

1.4k раз

На моей форме есть один TRadioGroup . В том , что TRadioGroup я добавляю 3 шт. Теперь я хочу , чтобы отключить один элемент из трех в TRadioGroup .

Как мне это сделать? Я пишу код .

. но он дает ошибку «Access Violation». Причина этой ошибки

rgbLoadSurveyTypes.Controls[1] дают null значение и
rgbLoadSurveyTypes шоу ControlCount = 0 и
Item Count = 3

1 ответы

You have to use Buttons property to access individual TRadioButton object.

Как отключить один RadioButton из трех в RadioGroup На моей форме

На моей форме есть одна TRadioGroup . В эту TRadioGroup я добавляю 3 TRadioGroup . Теперь я хочу отключить один элемент из трех в TRadioGroup .

Как мне это сделать? Я пишу код .


. но выдает ошибку «Нарушение прав доступа». Причина этой ошибки

rgbLoadSurveyTypes.Controls[1] дает null значение и
rgbLoadSurveyTypes show ControlCount = 0 и
Item Count = 3

1 ответ

Вы должны использовать свойство Buttons для доступа к отдельному объекту TRadioButton.

Как отключить один RadioButton из трех в RadioGroup На моей форме

На моей форме есть одна TRadioGroup . В эту TRadioGroup я добавляю 3 TRadioGroup . Теперь я хочу отключить один элемент из трех в TRadioGroup .

Как мне это сделать? Я пишу код .

. но выдает ошибку «Нарушение прав доступа». Причина этой ошибки

rgbLoadSurveyTypes.Controls[1] дает null значение и
rgbLoadSurveyTypes show ControlCount = 0 и
Item Count = 3

1 ответ

Вы должны использовать свойство Buttons для доступа к отдельному объекту TRadioButton.

500+ FAQ по Delphi

Перейти на: Главную | Индексную | Предыдущую | Следующую страницу

Можно ли изменить число колонок и их ширину в компоненте TFileListBox?

В приведенном примере FileListBox приводится к типу TDirectoryListBox — таким образом можно добавиь дополнительные колонки.
Пример:
with TDirectoryListBox(FileListBox1) do
begin
Columns := 2;
SendMessage(Handle, LB_SETCOLUMNWIDTH, Canvas.TextWidth(‘WWWWWWWW.WWW’),0);
end;
Как настроить табуляцию в компоненте TMemo?

Пошлите в Memo сообщение EM_SETTABSTOPS. Например установим первую позицию табуляции на 20-й пиксел.
Пример:
procedure TForm1.FormCreate(Sender: TObject);
var
DialogUnitsX : LongInt;
PixelsX : LongInt;
i : integer;
TabArray : array[0..4] of integer;
begin
Memo1.WantTabs := true;
DialogUnitsX := LoWord(GetDialogBaseUnits);
PixelsX := 20;
for i := 1 to 5 do
begin
TabArray[i — 1] :=((PixelsX * i ) * 4) div DialogUnitsX;
end;
SendMessage(Memo1.Handle,
EM_SETTABSTOPS,5,LongInt(@TabArray));
Memo1.Refresh;
end;
Как перехватить нажатия функциональных клавиш и стрелок?

Проверяйте значение переменной key на равенство VK_RIGHT, VK_LEFT, VK_F1 и т.д. на событии KeyDown формы.
Пример:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RIGHT then
Form1.Caption := ‘Right’;
if Key = VK_F1 then
Form1.Caption := ‘F1’;
end;
При обработке события DrawCell компонента DrawGr >
Правильно укажите границы используемого канваса.
Пример:
If (Row = 0) then
begin
DrawGr > DrawGrid1.Canvas.TextOut(Rect.Left,Rect.Top, IntToStr(Col));
end;
При использовании BitBtn Caption(текст) и картинка(bitmap) из файла не видны одновременно. Почему?

Это может происходить если картинка слишком велика. Класс TBitBtn сначала рисует картинку, а затем выводит текст над, под, слева или справа от картинки (в завивимости от свойства Layout). Если размер картинки такой же как у всей кнопки для вывода текста просто не остается места. Если Вам нужно получить кнопку такого же размера как Ваша картинка и видеть при этом надпись на кнопке Вам придется выводить текст надписи непосредственно на канву картинки.
Пример:
var
bm : TBitmap;
OldBkMode : integer;
begin
bm := TBitmap.Create;
bm.W > bm.Height := BitBtn1.Glyph.Height;
bm.Canvas.Draw(0, 0, BitBtn1.Glyph);
OldBkMode := SetBkMode(bm.Canvas.Handle, Transparent);
bm.Canvas.TextOut(0, 0, ‘The Caption’);
SetBkMode(bm.Canvas.Handle, OldBkMode);
BitBtn1.Glyph.Assign(bm);
end;
Можно ли изменить вид текстового курсора (каретки) edit’а или другого элемента управления Windows?

Можно! В примере показано как создать два цветных «bitmap’а»: «улыбчивый» и «хмурый» и присвоить их курсору edit’а. Для этого нужно перехватить оконную процедуру edit’а. Чтобы сделать это заменим адрес оконной процедуры Edit’а нашим собственным, а старую оконную процедуру будем вызывать по необходимости. Пример показывает «улыбчивый» курсор при наборе текста и «хмурый» при забое клавишей backspace.
Пример:

<$IFDEF WIN32>
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
<$ELSE>
uses
WinTypes, WinProcs, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private

public

CaretBm : TBitmap;
CaretBmBk : TBitmap;
OldEditsWindowProc : Pointer;
end;

var
Form1: TForm1;

type
<$IFDEF WIN32>
WParameter = LongInt;
<$ELSE>
WParameter = Word;
<$ENDIF>
LParameter = LongInt;



function NewWindowProc(WindowHandle : hWnd; TheMessage : WParameter; ParamW : WParameter;
ParamL : LParameter) : LongInt
<$IFDEF WIN32>stdcall; <$ELSE>; export; <$ENDIF>
begin

NewWindowProc := CallWindowProc(Form1.OldEditsWindowProc, WindowHandle,
TheMessage, ParamW, ParamL);
if TheMessage = WM_SETFOCUS then
begin
CreateCaret(WindowHandle, Form1.CaretBm.Handle, 0, 0);
ShowCaret(WindowHandle);
end;
if TheMessage = WM_KILLFOCUS then
begin
HideCaret(WindowHandle);
DestroyCaret;
end;
if TheMessage = WM_KEYDOWN then
begin
if ParamW = VK_BACK then
CreateCaret(WindowHandle, Form1.CaretBmBk.Handle, 0, 0)
else
CreateCaret(WindowHandle, Form1.CaretBm.Handle, 0, 0);
ShowCaret(WindowHandle);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

CaretBm := TBitmap.Create;
CaretBm.Canvas.Font.Name := ‘WingDings’;
CaretBm.Canvas.Font.Height := Edit1.Font.Height;
CaretBm.Canvas.Font.Color := clWhite;
CaretBm.W ) + 2;
CaretBm.Height := CaretBm.Canvas.TextHeight(‘J’) + 2;
CaretBm.Canvas.Brush.Color := clBlue;
CaretBm.Canvas.FillRect(Rect(0, 0, CaretBm.Width, CaretBm.Height));
CaretBm.Canvas.TextOut(1, 1, ‘J’);

CaretBmBk := TBitmap.Create;
CaretBmBk.Canvas.Font.Name := ‘WingDings’;
CaretBmBk.Canvas.Font.Height := Edit1.Font.Height;
CaretBmBk.Canvas.Font.Color := clWhite;
CaretBmBk.W ) + 2;
CaretBmBk.Height := CaretBmBk.Canvas.TextHeight(‘L’) + 2;
CaretBmBk.Canvas.Brush.Color := clBlue;
CaretBmBk.Canvas.FillRect(Rect(0,0, CaretBmBk.Width, CaretBmBk.Height));
CaretBmBk.Canvas.TextOut(1, 1, ‘L’);

OldEditsWindowProc := Pointer(SetWindowLong(Edit1.Handle,GWL_WNDPROC,
LongInt(@NewWindowProc)));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin

SetWindowLong(Edit1.Handle,GWL_WNDPROC, LongInt(OldEditsWindowProc));
CaretBm.Free;
CaretBmBk.Free;
end;
Почему при изменении цвета букв StatusBar’а ничего не происходит?

Status bar — стандартный элемент управления Windows, и соответственно цвет его букв — значение
clBtnText которое изменяется с помощью настроек в Control Panel. Этот цвет черный по умолчанию и
может изменяться в зависимости от выбранной цветовой схемы. Другие стандартные элемент управления Windows,
например кнопки, также имеют цвет букв, настраиваемый из ControlPanel. StatusBar и его панели имеют
свойство «owner-draw», позволяющее Вам использовать любой цвет букв.
Пример:

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
if Panel = StatusBar.Panels[0] then
begin
StatusBar.Canvas.Font.Color := clRed;
StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, ‘Panel — 0’)
end
else
begin
StatusBar.Canvas.Font.Color := clGreen;
StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, ‘Panel — 1’);
end;
end;
Как сделать многострочную надпись на TBitBtn?

Выводите текст надписи непосредственно на «glyph» TBitBtn’а. См. пример.
Пример:
procedure TForm1.FormCreate(Sender: TObject);
var
R : TRect;
N : Integer;
Buff : array[0..255] of Char;
begin
with BitBtn1 do
begin
Caption := ‘A really really long caption’;
Glyph.Canvas.Font := Self.Font;
Glyph.W > Glyph.Height := Height — 6;
R := Bounds(0, 0, Glyph.Width, 0);
StrPCopy(Buff, Caption);
Caption := »;
DrawText(Glyph.Canvas.Handle,Buff,StrLen(Buff),R,
DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
OffsetRect(R,(Glyph.Width — R.Right) div 2,
(Glyph.Height — R.Bottom) div 2);
DrawText(Glyph.Canvas.Handle,Buff,StrLen(Buff),R,
DT_CENTER or DT_WORDBREAK);
end;
end;
Как изменить стиль шрифта RichEdit нажатиями соответствующих комбинаций клавиш? (например включить курсив по нажатию Ctrl + I)

В примере стили шрифта меняются по нажатию след. комбинаций клавиш
Ctrl + B — вкл/выкл жирного шрифта
Ctrl + I — вкл/выкл наклонного шрифта
Ctrl + S — вкл/выкл зачеркнутого шрифта
Ctrl + U — вкл/выкл подчеркнутого шрифта
Пример:
const
KEY_CTRL_B = 02;
KEY_CTRL_I = 9;
KEY_CTRL_S = 19;
KEY_CTRL_U = 21;

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
case Ord(Key) of
KEY_CTRL_B:
begin
Key := #0;
if fsBold in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style — [fsBold]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style + [fsBold];
end;
KEY_CTRL_I:
begin
Key := #0;
if fsItalic in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style — [fsItalic]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style + [fsItalic];
end;
KEY_CTRL_S:
begin
Key := #0;
if fsStrikeout in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style-[fsStrikeout]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style+[fsStrikeout];
end;
KEY_CTRL_U:
begin
Key := #0;
if fsUnderline in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style-[fsUnderline]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style+[fsUnderline];
end;
end;
end;
В документации компонента TRegIniFile говорится, что можно изменять корневой ключ (root key). Я пытаюсь это сделать но ничего не получается.

См. пример.
Пример:
uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
WinIni : TRegIniFile;
begin
WinIni := TRegIniFile.Create(»);
WinIni.RootKey := HKEY_LOCAL_MACHINE;
WinIni.WriteString(‘Frank’,’Borland’,’Writes Fast Code!’);
WinIni.Free;
end;
Можно ли динамически изменять свойство «owner» компонента во время выполнения программы?

Вы можете менять свойство «owner» и после создания компонента с помощью методов InsertComponent() и RemoveComponent(). @G
Как очистить содержимое Canvas’а?
Просто нарисуйте прямоугольник любого цвета.
Пример:
Canvas.Brush.Color := ClWhite;
Canvas.FillRect(Canvas.ClipRect);
Можно ли динамически менять какая форма считается главной в приложении во время работы программы? Можно, но только во время загрузки приложения. Чтобы сделать это выберите «View->Project Source» и измените код инициализации приложения, так что порядок создания форм зависил от какого-то условия.

Примечание: Вам придется редактировать этот код, если Вы добавите в приложение новые формы.

begin
Application.Initialize;
if then
begin
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
end
else
begin
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
end;
end.
Application.Run;
Как программно «щелкнуть» по компоненту speed button? Я пытался использовать SendMessage но у Speedbuttons нет «handle».

В примере используется метод Perform класса TControl для отправки сообщения.
Пример:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
ShowMessage(‘clicked’);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SpeedButton1.Perform(WM_LBUTTONDOWN, 0, 0);
SpeedButton1.Perform(WM_LBUTTONUP, 0, 0);
end;
Можно ли отключить определенный элемент в RadioGroup?

В примере показано как получить доступ к отдельным элементам компонента TRadioGroup.
Пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
TRadioButton(RadioGroup1.Controls[1]). Enabled := False;
end;
Почему методы рисования Delphi (например MoveTo и LineTo) рисуют на один пиксел короче?

Так работает большинство графических систем, включая Windows. Библиотека VCL просто передает вызовы в функции GDI. Если Вы хотите нарисовать линию с последним пикселом включительно просто добавте единицу к координатам.
Как показать подсказки «hints» для элементов меню?

В примере создается обработчик события Application.Hint — подсказки меню изображаются
на status panel.

type
TForm1 = class(TForm)
Panel1: TPanel;
MainMenu1: TMainMenu;
MenuItemFile: TMenuItem;
MenuItemOpen: TMenuItem;
MenuItemClose: TMenuItem;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure MenuItemCloseClick(Sender: TObject);
procedure MenuItemOpenClick(Sender: TObject);
private

procedure HintHandler(Sender: TObject);
public

end;

var
Form1: TForm1;

procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.Align := alBottom;
MenuItemFile.Hint := ‘File Menu’;
MenuItemOpen.Hint := ‘Opens A File’;
MenuItemClose.Hint := ‘Closes the Application’;
Application.OnHint := HintHandler;
end;

procedure TForm1.HintHandler(Sender: TObject);
begin
Panel1.Caption := Application.Hint;
end;

procedure TForm1.MenuItemCloseClick(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.MenuItemOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
Form1.Caption := OpenDialog1.FileName;
end;

Илон Маск рекомендует:  Что такое код localsize
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL