Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"Не показывать больше это окно"


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]

Кинуть на форму чекбокс?


Наверх

Титульная страница Поиск, карта сайта Написать письмо