Кастомное окно об ошибке
Модератор: Модераторы
Кастомное окно об ошибке
На данный момент в программе сообщения об ошибках выводятся с помощью Application.MessageBox, но ругани много и хотелось бы иметь на MessageBox`е галочку "больше не показывать сообщения данного типа"
Можно както в стандартное окно добавить свой чекбокс? или это решается только показом своего окна? Формошлепать еще одну пусть и маленькую форму жуть как не хочется
Можно както в стандартное окно добавить свой чекбокс? или это решается только показом своего окна? Формошлепать еще одну пусть и маленькую форму жуть как не хочется
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
использовать свой обработчик ошибок try...except...end
>>использовать свой обработчик ошибок try...except...end
тут проблем нету. все ловится и сигнализируется. ну и ошибки по большей части в данных, не в программе - нехватает чегонить, или файлик какой ненайден
Проблема в том что пользователю лениво десять раз кликать ОК, он со второго раза понял в чем дело, и хочет поставить галку "не покзывать данное сообщение" на окне с ошибкой.
А мне лениво под это дело форму формошлепать. Лень, она не будет похожа на стандартную, она повлечет затраты на локализацию и подделжку...
Вдруг есть чтото стандартное для таких случаев?
тут проблем нету. все ловится и сигнализируется. ну и ошибки по большей части в данных, не в программе - нехватает чегонить, или файлик какой ненайден
Проблема в том что пользователю лениво десять раз кликать ОК, он со второго раза понял в чем дело, и хочет поставить галку "не покзывать данное сообщение" на окне с ошибкой.
А мне лениво под это дело форму формошлепать. Лень, она не будет похожа на стандартную, она повлечет затраты на локализацию и подделжку...
Вдруг есть чтото стандартное для таких случаев?
напиши свой обработчик исключений, да назначь его через Application.OnException
соответственно твой обработчик будет показывать "MessageBox с галочкой". (TMessageBoxWithNoShowCheckboxForm
)
соответственно твой обработчик будет показывать "MessageBox с галочкой". (TMessageBoxWithNoShowCheckboxForm
Попробовал 2 пути:
1)
Хоть вроде и имеем AMsgDialog, но встроить в него ничего не получается, там все "захардкожено" увеличиваю ширину чтоб чекбокс гарантировано влазил - кнопки остаются неподвижными не по середине, а при коротком сообщении чекбокс невлазит((
Ну и выглядит странновато - иконка не системная, кнопки какието здоровые. не пойдет((
2) С горя я даже буду согласен не на чекбокс, а просто на кнопки Ok и OkToAll (вторая подавляет все сообщения данного типа), ну думаю с этим то проблем не будет
Хер там(( CreateMessageDialog дает только Yes и YesToAll, а в Application.MessageBox вообще ничего похожего нет
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 вообще ничего похожего нет
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;
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
Спасибо!
Добавлено спустя 1 час 53 секунды:
То что надо. но в линуксе имеются небольшие проблемы с отображением
Спасибо!
Добавлено спустя 1 час 53 секунды:
То что надо. но в линуксе имеются небольшие проблемы с отображением
kit писал(а):...LCLTaskDialog;
kit & zub Можно пример как этим "чудом враждебной техники" пользоваться попросить ?
Код: Выделить всё
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 17:42:53, всего редактировалось 1 раз.
Просьба ко всем быть аккуратнее, когда приводят примеры. Особенная просьба - приводить типы используемых переменных. Ведь без них непонятно же ничего. Автор вопроса, конечно, полезет и найдет, а остальным что делать?
А TTaskDialog - компонент со страницы StandartDialog, а подробнее https://wiki.freepascal.org/TTaskDialog
А TTaskDialog - компонент со страницы StandartDialog, а подробнее https://wiki.freepascal.org/TTaskDialog
Естественно я имел ввиду TTaskDialog из LCLTaskDialog
Добавлено спустя 2 минуты 25 секунд:
компонент Dialogs.TTaskDialog является визуальной надстройкой над LCLTaskDialog.LCLTaskDialog
Добавлено спустя 2 минуты 25 секунд:
компонент Dialogs.TTaskDialog является визуальной надстройкой над LCLTaskDialog.LCLTaskDialog
zub писал(а):Там в комментах пример использования. меняешь параметры, получаешь нужный диалог
Спасибо гляну ! ("Лень разума хуже Гитлера!"
Alex2013
там все методом тыка интуитивно понятно
там все методом тыка интуитивно понятно
