![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Не показывать больше это окно"
Fishka © (2004-10-05 12:28:00)Подскажите, как создать окно с галочкой "Не показывать больше это окно"
Игорь Шевченко (2004-10-05 12:57:00) [1]
function hs_MessageDlgWithCheckBox (const MsgStr : String;
DlgType : TMsgDlgType;
var Checked : Boolean;
CheckBoxStr : String) : Integer;
const
CheckBoxOffset = 10; //Отступ CheckBox'а от краев формы и от кнопок
var CheckBox : TCheckBox;
AForm : TForm;
HeightInc, WidthInc : Integer; //Изменения ширины и высоты формы для
//вставки CheckBox'а
CheckBoxWidth : Integer; //Ширина CheckBox'а с надписью и отступами
TextRect : TRect;
AMsgButtons : TMsgDlgButtons;
AButton : TButton;
begin
AMsgButtons := [mbOk];
case DlgType of
mtConfirmation:
AMsgButtons := [mbYes, mbNo];
end;
AForm := CreateMessageDialog(MsgStr, DlgType, AMsgButtons);
with AForm do
try
Caption := Application.Title;
Position := poMainFormCenter;
//Создание CheckBox'а с флажком слева от надписи и установка его на форму
CheckBox := TCheckBox.Create(AForm);
CheckBox.Alignment := taRightJustify;
CheckBox.Parent := AForm;
CheckBox.Caption := CheckBoxStr;
//Определение ширины надписи на CheckBox'е. Поскольку Canvas CheckBox'а
//недоступна, ширина определяется по Canvas формы, а чтобы надпись была
//той же ширины, Font CheckBox'а приравнивается к Font формы.
CheckBox.Font.Assign(Font);
SetRect(TextRect, 0, 0, Screen.Width div 2, 0);
DrawText(Canvas.Handle, PChar(CheckBoxStr), Length(CheckBoxStr), TextRect,
DT_CALCRECT OR DT_EXPANDTABS OR DT_WORDBREAK);
//TextRect содержит размеры надписи для CheckBox'а.
//Я считаю, что CheckBox без надписи имеет ширину, равную высоте
//(установлено эмпирическим путем)
//Ширина CheckBox'а с отступами справа и слева.
CheckBoxWidth := TextRect.Right + CheckBoxOffset * 2 + CheckBox.Height;
//Изменение высоты формы
HeightInc := CheckBox.Height + CheckBoxOffset;
Height := Height + HeightInc;
//Если CheckBox с надписью получился шире формы, то форма должна стать
//шире, а кнопки выровнены по центру.
if (Width < CheckBoxWidth) then begin
WidthInc := (CheckBoxWidth - Width) DIV 2; //Для центрирования кнопок
Width := CheckBoxWidth;
end else
WidthInc := 0;
if (DlgType = mtConfirmation) then begin
AButton := FindComponent('Yes') as TButton;
AButton.Caption:=SMsgDlgYes;
end else
AButton := FindComponent('Ok') as TButton;
with AButton do begin
Top := Top + HeightInc;
//По первой кнопке спозиционировать CheckBox по высоте
CheckBox.Top := Top - CheckBox.Height - CheckBoxOffset;
Left := Left + WidthInc;
end;
if DlgType = mtConfirmation then
with (FindComponent('No') as TButton) do begin
Caption:=SMsgDlgNo;
Top := Top + HeightInc;
Left := Left + WidthInc;
end;
CheckBox.Width := Width - CheckBoxOffset;
CheckBox.Left := CheckBoxOffset;
Result := ShowModal;
Checked := CheckBox.Checked;
finally
Free;
end;
end;
{
Функция выдает сообщение, требующее подтверждения, с возможностью отключения
выдачи этого сообщения.
}
function ConfirmWithCheckBox (const MsgStr: String; var Checked: Boolean;
CheckBoxStr: String = 'Больше не показывать это сообщение'): Integer;
begin
Result := hs_MessageDlgWithCheckBox (MsgStr, mtConfirmation, Checked,
CheckBoxStr);
end;
Reindeer Moss Eater (2004-10-05 12:48:00) [2]Это значит что есть еще места.
Reindeer Moss Eater (2004-10-05 12:47:00) [3]Это тема кандидатской
Fishka (2004-10-05 12:47:00) [4]Я не совсем понял, что значит "А это не единственное место для галочек"
Fishka (2004-10-05 12:46:00) [5]По поводу ини-файла вещь пройдет, как создать файлик понятно, а как определить есть-ли он
Reindeer Moss Eater (2004-10-05 12:45:00) [6]А это не единственное место для галочек
Fishka (2004-10-05 12:44:00) [7]Логично, только в откомпиленом проекте галочка сохраняться не будет
Reindeer Moss Eater (2004-10-05 12:43:00) [8]if then else
Суслик (2004-10-05 12:43:00) [9]храни где-нибудь:
1. TIniFile
2. TRegistry
3. TFileStream
выбирай на вкус и цвет
Fishka (2004-10-05 12:41:00) [10]Это понятно он и так галочку ставить будет, мне нужно чтобы ащкьф загружалась в программе до тех пор пока CheckBox не будет с галочкой
TUser (2004-10-05 12:37:00) [11]Кинуть на форму чекбокс?