powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Диалоговые окна не модальны!
16 сообщений из 16, страница 1 из 1
Диалоговые окна не модальны!
    #32268882
chenosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемая публика. Подскажите, где я мог наворотить такого, что теперь все диалоговые окна , типа ShowMessage, в одной из программ перестали быть модальными. В программе всего одна форма с несколькими вкладками.
В другой аналогичной программе все в порядке.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32268984
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Handler потерял
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269047
chenosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если можно поподробнее. Никаких действий с хандлером я не производил. В CreateForm только действия с ини-файлом. Просмотр и сравнение свойств этой формы и нормально работающей - тоже ничего не дали.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269097
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну чтобы окошко типа MessageBox было модальным для конкретной формы приложения, в него передаётся хандлер этой формы. Чтобы было модальным относительно всего приложения передаётся хандлер от Application. А проще в этом случае юзать
Код: plaintext
Application->MessageBox( "Message" ,  "caption" , MB_OK);
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269259
chenosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно, что я делать-то должен в этой конкретной ситуации. Где копать?
Есть форма с PageControl c 9 закладками, на которые накиданы куча элементов. Даже, если я убираю АБСОЛЮТНО все процедуры модуля и по кнопке просто вывожу:
ShowMessage ('QWERTY');
это окошко не является модальным.
Запуск аппликации стандартный:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
program KKMOff;

uses
  Forms,
  KKMOffice in 'KKMOffice.pas' {fmKKMOffice};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfmKKMOffice, fmKKMOffice);
  Application.Run;
end.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269272
Aleksei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего это глюк.

У меня уже было такое.

Просто перезагружаеш комп и вперед на мины!.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269334
chenosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Aleksei
Черта с два.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269619
chenosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык что, больше никто с такой проблемой не сталкивался?
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269842
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShowMessage, кажется, все лишь обертка для MessageDlg. Может быть в исходных текстах модуля Dialogs покопаться следует.

Советы относительно потерянного хендлера - лажа, т.к. вызывается ShowMessage, а не MesssageBox. Кроме того, приведенный пример
> Application->MessageBox("Message", "caption", MB_OK);
с точки зрения Delphi-синтаксиса не совсем корректен: строковые параметры заключены не в одинарные, а в двойные кавычки, параметр-сообщение лучше вызывать через PChar(). Если все это приводилось с учетом синтаксиса Билдера - тогда сорри.

С другой стороны, если причина глюка устранена не будет, то настоятельно порекомендую пользоваться все тем же MessageBox, который гораздо гибче в настройке, и не затрагивает модуль Dialogs.

Заменить все вызовы ShowMessage на аналогичные по внешнему виду MessageBox можно следующим образом:
MessageBox(Application.Handle, PChar('xxx'), Application.Title, 8192);
, где вместо 'xxx' пишешь свое сообщение.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32269937
chenosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, этот номер прошел, только с небольшой поправкой:
MessageBox(Application.Handle, PChar('xxx'), PChar(Application.Title), 8192);

Однако, это не спасает, т.к. нужны и диалоги, а не только мессаги. Понимаю, что это наверное тоже решается через CreateDialog и т.д. Но, уж больно неохота замарачиваться из-за такой ерунды.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32270065
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй
Код: plaintext
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;


Например
Код: plaintext
MessageDlg('xxx', mtInformation,[mbOk],  0 );

Он не трогает модуль Dialogs.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32270157
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, MessageDlg содержится в Dialogs.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32270429
Cheboor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
модальный мессаджюокс

MessageBox(Application.Handle, 'ТеКсТ','ЗаГоЛоВоК',MB_APPLMODAL);

MB_APPLMODAL-"константа модальности"
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32270737
chenosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался! Оказывается, есть 2 юнита - Dialogs и QDialogs. Процедуры и функции там имеют одинаковые имена, там есть и ShowMessage и MessageDlgPos, правда с другим количеством параметров. У меня были выбраны оба юнита, а MessageDlgPos с кол-вом параметров, соответствующим QDialogs.
После удаления из юнитов QDialogs и вызовом MessageDlgPos с кол-вом параметров, соответствующим Dialogs окошки диалогов снова стали модальными.
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32270801
Papka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УРА!
...
Рейтинг: 0 / 0
Диалоговые окна не модальны!
    #32271271
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догоночку.
С помощью MessageBox можно добится той же функциональности, как и MessageDlg, кроме кнопок "Yes To All" и "No To All". А в положительную сторону отличается возможностью задавать заголовок (а не "Information", "Warning" и прочие стандартные надписи в зависимости от выбранной пиктограммы), возможность задавать системную модальность окна (когда его не закроет ни одно другое приложение) и неиспользование монстра-юнита "Dialogs".
Почему монстра? Попробуйте создать наиэлементарнейшую программу вида:
programs app1;
begin

end.
и выведите сообщение с помощью MessageBox, а потом с помощью MessageDlg. Разницу в величине Exe заметили? Она многократна.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Диалоговые окна не модальны!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]