Кастомное окно об ошибке

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Кастомное окно об ошибке

Сообщение zub » 05.11.2020 13:30:32

На данный момент в программе сообщения об ошибках выводятся с помощью Application.MessageBox, но ругани много и хотелось бы иметь на MessageBox`е галочку "больше не показывать сообщения данного типа"
Можно както в стандартное окно добавить свой чекбокс? или это решается только показом своего окна? Формошлепать еще одну пусть и маленькую форму жуть как не хочется
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Кастомное окно об ошибке

Сообщение Снег Север » 05.11.2020 14:14:21

использовать свой обработчик ошибок try...except...end
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Кастомное окно об ошибке

Сообщение zub » 05.11.2020 14:48:01

>>использовать свой обработчик ошибок try...except...end
тут проблем нету. все ловится и сигнализируется. ну и ошибки по большей части в данных, не в программе - нехватает чегонить, или файлик какой ненайден

Проблема в том что пользователю лениво десять раз кликать ОК, он со второго раза понял в чем дело, и хочет поставить галку "не покзывать данное сообщение" на окне с ошибкой.
А мне лениво под это дело форму формошлепать. Лень, она не будет похожа на стандартную, она повлечет затраты на локализацию и подделжку...

Вдруг есть чтото стандартное для таких случаев?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Кастомное окно об ошибке

Сообщение скалогрыз » 05.11.2020 21:52:30

напиши свой обработчик исключений, да назначь его через Application.OnException
соответственно твой обработчик будет показывать "MessageBox с галочкой". (TMessageBoxWithNoShowCheckboxForm :mrgreen: )
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Кастомное окно об ошибке

Сообщение zub » 06.11.2020 01:30:36

Попробовал 2 пути:
1)
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  AMsgDialog: TForm;
  ACheckBox: TCheckBox;
begin
  AMsgDialog := CreateMessageDialog('test test test test test test test test test test test test test test test test test test test test test test test test test',mtError, [mbOK]) ;
  ACheckBox := TCheckBox.Create(AMsgDialog) ;
  with ACheckBox do begin
    Caption := 'Not show this message';
    AutoSize:=true;
    AnchorSide[akRight].Side := asrRight;
    AnchorSide[akRight].Control := AMsgDialog;
    AnchorSide[akBottom].Side := asrBottom;
    AnchorSide[akBottom].Control := AMsgDialog;
    Anchors := [akRight,akBottom];
    Parent := AMsgDialog;
  end;
  //AMsgDialog.Width:=max(AMsgDialog.Width,{ACheckBox.Width}500);
  AMsgDialog.ShowModal;
end;

Хоть вроде и имеем AMsgDialog, но встроить в него ничего не получается, там все "захардкожено" увеличиваю ширину чтоб чекбокс гарантировано влазил - кнопки остаются неподвижными не по середине, а при коротком сообщении чекбокс невлазит((
Ну и выглядит странновато - иконка не системная, кнопки какието здоровые. не пойдет((

2) С горя я даже буду согласен не на чекбокс, а просто на кнопки Ok и OkToAll (вторая подавляет все сообщения данного типа), ну думаю с этим то проблем не будет


Хер там(( CreateMessageDialog дает только Yes и YesToAll, а в Application.MessageBox вообще ничего похожего нет
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Кастомное окно об ошибке

Сообщение kit » 06.11.2020 07:53:47

unit LCLTaskDialog;

function TTaskDialog.Execute(aCommonButtons: TCommonButtons;
aButtonDef: integer; aFlags: TTaskDialogFlags;
aDialogIcon: TTaskDialogIcon; aFooterIcon: TTaskDialogFooterIcon;
aRadioDef, aWidth: integer; aParent: HWND; aNonNative: boolean;
aEmulateClassicStyle: boolean; aOnButtonClicked: TTaskDialogButtonClickedEvent): integer;
kit
постоялец
 
Сообщения: 156
Зарегистрирован: 29.09.2016 09:39:07

Re: Кастомное окно об ошибке

Сообщение zub » 06.11.2020 08:28:13

kit
Спасибо!

Добавлено спустя 1 час 53 секунды:
То что надо. но в линуксе имеются небольшие проблемы с отображением
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Кастомное окно об ошибке

Сообщение Alex2013 » 07.11.2020 15:52:53

kit писал(а):...LCLTaskDialog;

kit & zub Можно пример как этим "чудом враждебной техники" пользоваться попросить ? :roll: А то у меня сходу разобраться (или быстро нагуглить готовый пример использования ) не получилось ... Но есть подозрение что вещь полезная . :idea:
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Кастомное окно об ошибке

Сообщение zub » 07.11.2020 17:18:52

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
...
uses ... LCLTaskDialog, ...
...
var
  Task: TTaskDialog;
begin
  Task.Title := 'MyApp';
  Task.Inst := '';
  Task.Content := 'pizdec';
  Task.Verify := 'Do no ask for this setting next time';
  Task.VerifyChecked := false;
  Task.Execute([],0,[tdfPositionRelativeToWindow],tiError);
  if Task.VerifyChecked then
    ShowMessage(Task.Verify);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Task: TTaskDialog;
begin
  Task.Inst := 'Saving application settings';
  Task.Content := 'This is the content';
  Task.Radios := 'Store settings in registry'#10'Store settings in XML file';
  Task.Verify := 'Do no ask for this setting next time';
  Task.VerifyChecked := true;
  Task.Footer := 'XML file is perhaps a better choice';
  Task.Execute([],0,[],tiQuestion,tfiInformation,200);
  ShowMessage(IntToStr(Task.RadioRes)); // 200=Registry, 201=XML
  if Task.VerifyChecked then
    ShowMessage(Task.Verify);
end;

Там в коментах пример использования. меняешь параметры, получаешь нужный диалог
Последний раз редактировалось zub 07.11.2020 18:42:53, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Кастомное окно об ошибке

Сообщение DedFrend » 07.11.2020 18:22:44

Просьба ко всем быть аккуратнее, когда приводят примеры. Особенная просьба - приводить типы используемых переменных. Ведь без них непонятно же ничего. Автор вопроса, конечно, полезет и найдет, а остальным что делать?

А TTaskDialog - компонент со страницы StandartDialog, а подробнее https://wiki.freepascal.org/TTaskDialog
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Re: Кастомное окно об ошибке

Сообщение zub » 07.11.2020 18:43:38

Естественно я имел ввиду TTaskDialog из LCLTaskDialog

Добавлено спустя 2 минуты 25 секунд:
компонент Dialogs.TTaskDialog является визуальной надстройкой над LCLTaskDialog.LCLTaskDialog
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Кастомное окно об ошибке

Сообщение Alex2013 » 08.11.2020 15:50:22

zub писал(а):Там в комментах пример использования. меняешь параметры, получаешь нужный диалог

Спасибо гляну ! ("Лень разума хуже Гитлера!" :wink: )
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Кастомное окно об ошибке

Сообщение zoltanleo » 13.11.2020 01:58:38

Alex2013
там все методом тыка интуитивно понятно
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

Рейтинг@Mail.ru