Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > MessageDlg c дополнительным чекбоксом


Автор: Alexeis 20.5.2008, 09:18
Может быть я плохо искал, но в DRKB ненашёл, и думаю было бы полезно добавить. Код MessageDlg с чекбоксом внизу (к примеры галка "Непоказывать больше это окно"). Функция разработана не мной, я просто портировал код C++, который нашёл на http://raz-soft.com/c-builder/message-box-with-check-box/. По этой-же ссылочке есть и скриншот как это окошко выглядит.

Код

function CheckMessageDlg(const Msg, Caption, CheckBoxCaption: string;
  var Checked: boolean; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons{;
  DefaultButton: TMsgDlgBtn}): TModalResult;
var
  Dialog: TForm;
  LeftEdge, TopEdge: Integer;
  i: Integer;
  Ctrl: TControl;
  CheckBox: TCheckBox;
begin
  Dialog:= CreateMessageDialog(Msg, DlgType, Buttons{, DefaultButton});

  if not (Caption = '') then
    Dialog.Caption:= Caption;

  LeftEdge:= Dialog.ClientWidth;
  TopEdge:= Dialog.ClientHeight;
  if Dialog.ControlCount > 0 then
    for i := 1 to Dialog.ControlCount - 1 do
    begin
      Ctrl:= Dialog.Controls[i];
      if Ctrl.Left < LeftEdge then LeftEdge:= Ctrl.Left;
      if Ctrl.Top < TopEdge then TopEdge:= Ctrl.Top;
    end
  else
  begin
    LeftEdge:= 10;
    TopEdge:= 10;
  end;

  CheckBox:= TCheckBox.Create(Dialog);
  with CheckBox do
  begin
    Parent:= Dialog;
    Caption:= CheckBoxCaption;
    Checked:= Checked;
    Left:= LeftEdge;
    Top:= Dialog.ClientHeight;
    Width:= Dialog.Canvas.TextWidth(CheckBox.Caption) + 30;
  end;

  Dialog.ClientHeight:= Dialog.ClientHeight + CheckBox.Height + TopEdge;

  if (CheckBox.Width + LeftEdge * 2) > Dialog.ClientWidth then
    Dialog.ClientWidth:= CheckBox.Width + LeftEdge * 2;

  Result:= Dialog.ShowModal;
  Checked:= CheckBox.Checked;

  Dialog.Free;
end;

Автор: http://vingrad.ru/@mrB1n Источник: http://forum.vingrad.ru/index.php?show_type=&showtopic=

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)