![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
В какой-то момент времени решил в проекте заменить стандартные MessageDlg на более продвинутые TTaskDialog. И всё бы хорошо, но столкнулся со странной проблемой - когда программа скомпилирована с отладчиком, то окна TTaskDialog не выводятся на экран. А когда программа скомпилирована без отладчика, то всё нормально вызывается.
Вот такой функцией вызывается TTaskDialog: Код:
function ShowRussianMessageDialog(const DlgCaption: string; const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; const Title: String = ''): Integer;
var
S: string;
Dialog: TTaskDialog;
begin
if Trim(DlgCaption) = '' then
case DlgType of
mtWarning: S := 'Предупреждение';
mtError: S := 'Ошибка';
mtInformation: S := 'Информация';
mtConfirmation: S := 'Подтверждение';
mtCustom: S := '';
end
else
S := DlgCaption;
Dialog := TTaskDialog.Create(FindControl(Application.ActiveFormHandle));
try
Dialog.Caption := S;
Dialog.Text := Msg;
Dialog.Title := Title;
Dialog.Flags := Dialog.Flags + [tfPositionRelativeToWindow];
{$IFDEF VER340}
Dialog.Flags := Dialog.Flags + [tfSizeToContent];
{$ENDIF}
case DlgType of
TMsgDlgType.mtWarning: Dialog.MainIcon := tdiWarning;
TMsgDlgType.mtError: Dialog.MainIcon := tdiError;
TMsgDlgType.mtInformation: Dialog.MainIcon := tdiInformation;
TMsgDlgType.mtConfirmation: Dialog.MainIcon := tdiShield;
end;
Dialog.CommonButtons := [];
if mbOk in Buttons then
Dialog.CommonButtons := Dialog.CommonButtons + [tcbOk];
if mbYes in Buttons then
Dialog.CommonButtons := Dialog.CommonButtons + [tcbYes];
if mbNo in Buttons then
Dialog.CommonButtons := Dialog.CommonButtons + [tcbNo];
if mbCancel in Buttons then
Dialog.CommonButtons := Dialog.CommonButtons + [tcbCancel];
if mbRetry in Buttons then
Dialog.CommonButtons := Dialog.CommonButtons + [tcbRetry];
if mbClose in Buttons then
Dialog.CommonButtons := Dialog.CommonButtons + [tcbClose];
Dialog.Execute;
Result := Dialog.ModalResult;
finally
Dialog.Free;
end;
end; |
|
#2
|
|||
|
|||
|
может что-то с получением хэндла не то.
Попробуй пока просто как-то так: Код:
TTaskDialog.Create(self) Если это у тебя библиотечная функция, то попробуй так: Код:
TTaskDialog.Create(Application.MainForm) |
|
#3
|
|||
|
|||
|
Не помогло. Тот бред, что у меня используется в параметре конструктора, сделан от безысходности. Так как я так и не смог постигнуть логику ломания системного компонента.
|
|
#4
|
|||
|
|||
|
А на какой винде запускаешь?
Кстати, попробуй пока временно убрать лишние флаги (Dialog.Flags). В принципе, можно попробовать вызвать эту функцию напрямую, а не через дельфиную обертку. Если напрямую будет так же не работать под отладчиком, то явно что-то не то. сигнатуру см. тут: https://learn.microsoft.com/en-us/wi...trl-taskdialog |
|
#5
|
|||
|
|||
|
Смех смехом, но я перенёс эту функцию в более мелкий проект и там всё заработало.
|
|
#6
|
|||
|
|||
|
Хм. Значит что-то не так с твоим проектом.
А проверь, включены ли темы для дебаг сборки? |